{"version":3,"file":"sdk.mjs","sources":["../src/data/irisData.js","../src/data/spiralData.js","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/descending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/number.js","../node_modules/d3-array/src/bisect.js","../node_modules/d3-array/src/blur.js","../node_modules/d3-array/src/count.js","../node_modules/d3-array/src/cross.js","../node_modules/d3-array/src/variance.js","../node_modules/d3-array/src/deviation.js","../node_modules/d3-array/src/extent.js","../node_modules/d3-array/src/fsum.js","../node_modules/internmap/src/index.js","../node_modules/d3-array/src/identity.js","../node_modules/d3-array/src/group.js","../node_modules/d3-array/src/permute.js","../node_modules/d3-array/src/sort.js","../node_modules/d3-array/src/array.js","../node_modules/d3-array/src/constant.js","../node_modules/d3-array/src/ticks.js","../node_modules/d3-array/src/nice.js","../node_modules/d3-array/src/threshold/sturges.js","../node_modules/d3-array/src/bin.js","../node_modules/d3-array/src/max.js","../node_modules/d3-array/src/maxIndex.js","../node_modules/d3-array/src/min.js","../node_modules/d3-array/src/minIndex.js","../node_modules/d3-array/src/quickselect.js","../node_modules/d3-array/src/greatest.js","../node_modules/d3-array/src/quantile.js","../node_modules/d3-array/src/mean.js","../node_modules/d3-array/src/merge.js","../node_modules/d3-array/src/pairs.js","../node_modules/d3-array/src/range.js","../node_modules/d3-array/src/leastIndex.js","../node_modules/d3-array/src/shuffle.js","../node_modules/d3-array/src/transpose.js","../node_modules/d3-array/src/intersection.js","../node_modules/d3-array/src/superset.js","../node_modules/d3-axis/src/identity.js","../node_modules/d3-axis/src/axis.js","../node_modules/d3-dispatch/src/dispatch.js","../node_modules/d3-selection/src/namespaces.js","../node_modules/d3-selection/src/namespace.js","../node_modules/d3-selection/src/creator.js","../node_modules/d3-selection/src/selector.js","../node_modules/d3-selection/src/array.js","../node_modules/d3-selection/src/selectorAll.js","../node_modules/d3-selection/src/matcher.js","../node_modules/d3-selection/src/selection/selectChild.js","../node_modules/d3-selection/src/selection/selectChildren.js","../node_modules/d3-selection/src/selection/sparse.js","../node_modules/d3-selection/src/selection/enter.js","../node_modules/d3-selection/src/selection/data.js","../node_modules/d3-selection/src/selection/sort.js","../node_modules/d3-selection/src/selection/attr.js","../node_modules/d3-selection/src/window.js","../node_modules/d3-selection/src/selection/style.js","../node_modules/d3-selection/src/selection/property.js","../node_modules/d3-selection/src/selection/classed.js","../node_modules/d3-selection/src/selection/text.js","../node_modules/d3-selection/src/selection/html.js","../node_modules/d3-selection/src/selection/raise.js","../node_modules/d3-selection/src/selection/lower.js","../node_modules/d3-selection/src/selection/insert.js","../node_modules/d3-selection/src/selection/remove.js","../node_modules/d3-selection/src/selection/clone.js","../node_modules/d3-selection/src/selection/on.js","../node_modules/d3-selection/src/selection/dispatch.js","../node_modules/d3-selection/src/selection/index.js","../node_modules/d3-selection/src/select.js","../node_modules/d3-selection/src/create.js","../node_modules/d3-selection/src/selection/select.js","../node_modules/d3-selection/src/selection/selectAll.js","../node_modules/d3-selection/src/selection/filter.js","../node_modules/d3-selection/src/constant.js","../node_modules/d3-selection/src/selection/exit.js","../node_modules/d3-selection/src/selection/join.js","../node_modules/d3-selection/src/selection/merge.js","../node_modules/d3-selection/src/selection/order.js","../node_modules/d3-selection/src/selection/call.js","../node_modules/d3-selection/src/selection/nodes.js","../node_modules/d3-selection/src/selection/node.js","../node_modules/d3-selection/src/selection/size.js","../node_modules/d3-selection/src/selection/empty.js","../node_modules/d3-selection/src/selection/each.js","../node_modules/d3-selection/src/selection/append.js","../node_modules/d3-selection/src/selection/datum.js","../node_modules/d3-selection/src/selection/iterator.js","../node_modules/d3-selection/src/local.js","../node_modules/d3-selection/src/sourceEvent.js","../node_modules/d3-selection/src/pointer.js","../node_modules/d3-selection/src/selectAll.js","../node_modules/d3-drag/src/noevent.js","../node_modules/d3-drag/src/nodrag.js","../node_modules/d3-drag/src/constant.js","../node_modules/d3-drag/src/event.js","../node_modules/d3-drag/src/drag.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-color/src/math.js","../node_modules/d3-color/src/lab.js","../node_modules/d3-color/src/cubehelix.js","../node_modules/d3-interpolate/src/basis.js","../node_modules/d3-interpolate/src/basisClosed.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/numberArray.js","../node_modules/d3-interpolate/src/array.js","../node_modules/d3-interpolate/src/date.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/object.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-interpolate/src/value.js","../node_modules/d3-interpolate/src/round.js","../node_modules/d3-interpolate/src/transform/decompose.js","../node_modules/d3-interpolate/src/transform/parse.js","../node_modules/d3-interpolate/src/transform/index.js","../node_modules/d3-interpolate/src/zoom.js","../node_modules/d3-interpolate/src/hsl.js","../node_modules/d3-interpolate/src/hcl.js","../node_modules/d3-interpolate/src/cubehelix.js","../node_modules/d3-interpolate/src/piecewise.js","../node_modules/d3-timer/src/timer.js","../node_modules/d3-timer/src/timeout.js","../node_modules/d3-transition/src/transition/schedule.js","../node_modules/d3-transition/src/interrupt.js","../node_modules/d3-transition/src/transition/tween.js","../node_modules/d3-transition/src/transition/interpolate.js","../node_modules/d3-transition/src/transition/attr.js","../node_modules/d3-transition/src/transition/attrTween.js","../node_modules/d3-transition/src/transition/delay.js","../node_modules/d3-transition/src/transition/duration.js","../node_modules/d3-transition/src/transition/selection.js","../node_modules/d3-transition/src/transition/style.js","../node_modules/d3-transition/src/transition/index.js","../node_modules/d3-transition/src/transition/select.js","../node_modules/d3-transition/src/transition/selectAll.js","../node_modules/d3-transition/src/transition/filter.js","../node_modules/d3-transition/src/transition/merge.js","../node_modules/d3-transition/src/transition/transition.js","../node_modules/d3-transition/src/transition/on.js","../node_modules/d3-transition/src/transition/styleTween.js","../node_modules/d3-transition/src/transition/text.js","../node_modules/d3-transition/src/transition/textTween.js","../node_modules/d3-transition/src/transition/remove.js","../node_modules/d3-transition/src/transition/ease.js","../node_modules/d3-transition/src/transition/easeVarying.js","../node_modules/d3-transition/src/transition/end.js","../node_modules/d3-ease/src/quad.js","../node_modules/d3-ease/src/cubic.js","../node_modules/d3-ease/src/poly.js","../node_modules/d3-ease/src/sin.js","../node_modules/d3-ease/src/math.js","../node_modules/d3-ease/src/exp.js","../node_modules/d3-ease/src/circle.js","../node_modules/d3-ease/src/bounce.js","../node_modules/d3-ease/src/back.js","../node_modules/d3-ease/src/elastic.js","../node_modules/d3-transition/src/selection/transition.js","../node_modules/d3-transition/src/selection/index.js","../node_modules/d3-transition/src/selection/interrupt.js","../node_modules/d3-transition/src/active.js","../node_modules/d3-brush/src/constant.js","../node_modules/d3-brush/src/event.js","../node_modules/d3-brush/src/noevent.js","../node_modules/d3-brush/src/brush.js","../node_modules/d3-chord/src/math.js","../node_modules/d3-chord/src/chord.js","../node_modules/d3-path/src/path.js","../node_modules/d3-chord/src/array.js","../node_modules/d3-chord/src/constant.js","../node_modules/d3-chord/src/ribbon.js","../node_modules/d3-contour/src/array.js","../node_modules/d3-contour/src/ascending.js","../node_modules/d3-contour/src/constant.js","../node_modules/d3-contour/src/contains.js","../node_modules/d3-contour/src/noop.js","../node_modules/d3-contour/src/contours.js","../node_modules/d3-contour/src/area.js","../node_modules/d3-contour/src/density.js","../node_modules/robust-predicates/esm/util.js","../node_modules/robust-predicates/esm/orient2d.js","../node_modules/delaunator/index.js","../node_modules/d3-delaunay/src/path.js","../node_modules/d3-delaunay/src/polygon.js","../node_modules/d3-delaunay/src/voronoi.js","../node_modules/d3-delaunay/src/delaunay.js","../node_modules/d3-dsv/src/dsv.js","../node_modules/d3-dsv/src/csv.js","../node_modules/d3-dsv/src/tsv.js","../node_modules/d3-dsv/src/autoType.js","../node_modules/d3-fetch/src/blob.js","../node_modules/d3-fetch/src/buffer.js","../node_modules/d3-fetch/src/text.js","../node_modules/d3-fetch/src/dsv.js","../node_modules/d3-fetch/src/json.js","../node_modules/d3-fetch/src/xml.js","../node_modules/d3-quadtree/src/add.js","../node_modules/d3-quadtree/src/quad.js","../node_modules/d3-quadtree/src/x.js","../node_modules/d3-quadtree/src/y.js","../node_modules/d3-quadtree/src/quadtree.js","../node_modules/d3-force/src/constant.js","../node_modules/d3-force/src/jiggle.js","../node_modules/d3-force/src/collide.js","../node_modules/d3-force/src/link.js","../node_modules/d3-quadtree/src/cover.js","../node_modules/d3-quadtree/src/data.js","../node_modules/d3-quadtree/src/extent.js","../node_modules/d3-quadtree/src/find.js","../node_modules/d3-quadtree/src/remove.js","../node_modules/d3-quadtree/src/root.js","../node_modules/d3-quadtree/src/size.js","../node_modules/d3-quadtree/src/visit.js","../node_modules/d3-quadtree/src/visitAfter.js","../node_modules/d3-force/src/lcg.js","../node_modules/d3-force/src/simulation.js","../node_modules/d3-format/src/formatDecimal.js","../node_modules/d3-format/src/exponent.js","../node_modules/d3-format/src/formatSpecifier.js","../node_modules/d3-format/src/formatPrefixAuto.js","../node_modules/d3-format/src/formatRounded.js","../node_modules/d3-format/src/formatTypes.js","../node_modules/d3-format/src/identity.js","../node_modules/d3-format/src/locale.js","../node_modules/d3-format/src/defaultLocale.js","../node_modules/d3-format/src/formatGroup.js","../node_modules/d3-format/src/formatNumerals.js","../node_modules/d3-format/src/formatTrim.js","../node_modules/d3-format/src/precisionFixed.js","../node_modules/d3-format/src/precisionPrefix.js","../node_modules/d3-format/src/precisionRound.js","../node_modules/d3-geo/src/math.js","../node_modules/d3-geo/src/noop.js","../node_modules/d3-geo/src/stream.js","../node_modules/d3-geo/src/area.js","../node_modules/d3-geo/src/bounds.js","../node_modules/d3-geo/src/cartesian.js","../node_modules/d3-geo/src/centroid.js","../node_modules/d3-geo/src/constant.js","../node_modules/d3-geo/src/compose.js","../node_modules/d3-geo/src/rotation.js","../node_modules/d3-geo/src/circle.js","../node_modules/d3-geo/src/clip/buffer.js","../node_modules/d3-geo/src/pointEqual.js","../node_modules/d3-geo/src/clip/rejoin.js","../node_modules/d3-geo/src/polygonContains.js","../node_modules/d3-geo/src/clip/index.js","../node_modules/d3-geo/src/clip/antimeridian.js","../node_modules/d3-geo/src/clip/circle.js","../node_modules/d3-geo/src/clip/rectangle.js","../node_modules/d3-geo/src/length.js","../node_modules/d3-geo/src/clip/line.js","../node_modules/d3-geo/src/distance.js","../node_modules/d3-geo/src/contains.js","../node_modules/d3-geo/src/graticule.js","../node_modules/d3-geo/src/identity.js","../node_modules/d3-geo/src/path/area.js","../node_modules/d3-geo/src/path/bounds.js","../node_modules/d3-geo/src/path/centroid.js","../node_modules/d3-geo/src/path/context.js","../node_modules/d3-geo/src/path/measure.js","../node_modules/d3-geo/src/path/string.js","../node_modules/d3-geo/src/transform.js","../node_modules/d3-geo/src/projection/fit.js","../node_modules/d3-geo/src/projection/resample.js","../node_modules/d3-geo/src/projection/index.js","../node_modules/d3-geo/src/projection/conic.js","../node_modules/d3-geo/src/projection/conicEqualArea.js","../node_modules/d3-geo/src/projection/cylindricalEqualArea.js","../node_modules/d3-geo/src/projection/albers.js","../node_modules/d3-geo/src/projection/azimuthal.js","../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../node_modules/d3-geo/src/projection/azimuthalEquidistant.js","../node_modules/d3-geo/src/projection/mercator.js","../node_modules/d3-geo/src/projection/conicConformal.js","../node_modules/d3-geo/src/projection/equirectangular.js","../node_modules/d3-geo/src/projection/conicEquidistant.js","../node_modules/d3-geo/src/projection/equalEarth.js","../node_modules/d3-geo/src/projection/gnomonic.js","../node_modules/d3-geo/src/projection/naturalEarth1.js","../node_modules/d3-geo/src/projection/orthographic.js","../node_modules/d3-geo/src/projection/stereographic.js","../node_modules/d3-geo/src/projection/transverseMercator.js","../node_modules/d3-hierarchy/src/cluster.js","../node_modules/d3-hierarchy/src/hierarchy/count.js","../node_modules/d3-hierarchy/src/hierarchy/index.js","../node_modules/d3-hierarchy/src/accessors.js","../node_modules/d3-hierarchy/src/constant.js","../node_modules/d3-hierarchy/src/hierarchy/each.js","../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../node_modules/d3-hierarchy/src/hierarchy/find.js","../node_modules/d3-hierarchy/src/hierarchy/sum.js","../node_modules/d3-hierarchy/src/hierarchy/sort.js","../node_modules/d3-hierarchy/src/hierarchy/path.js","../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../node_modules/d3-hierarchy/src/hierarchy/links.js","../node_modules/d3-hierarchy/src/hierarchy/iterator.js","../node_modules/d3-hierarchy/src/lcg.js","../node_modules/d3-hierarchy/src/pack/enclose.js","../node_modules/d3-hierarchy/src/array.js","../node_modules/d3-hierarchy/src/pack/siblings.js","../node_modules/d3-hierarchy/src/pack/index.js","../node_modules/d3-hierarchy/src/treemap/round.js","../node_modules/d3-hierarchy/src/treemap/dice.js","../node_modules/d3-hierarchy/src/stratify.js","../node_modules/d3-hierarchy/src/tree.js","../node_modules/d3-hierarchy/src/treemap/slice.js","../node_modules/d3-hierarchy/src/treemap/squarify.js","../node_modules/d3-hierarchy/src/treemap/resquarify.js","../node_modules/d3-polygon/src/cross.js","../node_modules/d3-polygon/src/hull.js","../node_modules/d3-random/src/defaultSource.js","../node_modules/d3-random/src/uniform.js","../node_modules/d3-random/src/int.js","../node_modules/d3-random/src/normal.js","../node_modules/d3-random/src/logNormal.js","../node_modules/d3-random/src/irwinHall.js","../node_modules/d3-random/src/bates.js","../node_modules/d3-random/src/exponential.js","../node_modules/d3-random/src/pareto.js","../node_modules/d3-random/src/bernoulli.js","../node_modules/d3-random/src/geometric.js","../node_modules/d3-random/src/gamma.js","../node_modules/d3-random/src/beta.js","../node_modules/d3-random/src/binomial.js","../node_modules/d3-random/src/weibull.js","../node_modules/d3-random/src/cauchy.js","../node_modules/d3-random/src/logistic.js","../node_modules/d3-random/src/poisson.js","../node_modules/d3-random/src/lcg.js","../node_modules/d3-scale/src/init.js","../node_modules/d3-scale/src/ordinal.js","../node_modules/d3-scale/src/band.js","../node_modules/d3-scale/src/number.js","../node_modules/d3-scale/src/continuous.js","../node_modules/d3-scale/src/constant.js","../node_modules/d3-scale/src/tickFormat.js","../node_modules/d3-scale/src/linear.js","../node_modules/d3-scale/src/nice.js","../node_modules/d3-scale/src/log.js","../node_modules/d3-scale/src/symlog.js","../node_modules/d3-scale/src/pow.js","../node_modules/d3-scale/src/radial.js","../node_modules/d3-time/src/interval.js","../node_modules/d3-time/src/millisecond.js","../node_modules/d3-time/src/duration.js","../node_modules/d3-time/src/second.js","../node_modules/d3-time/src/minute.js","../node_modules/d3-time/src/hour.js","../node_modules/d3-time/src/day.js","../node_modules/d3-time/src/week.js","../node_modules/d3-time/src/month.js","../node_modules/d3-time/src/year.js","../node_modules/d3-time/src/ticks.js","../node_modules/d3-time-format/src/locale.js","../node_modules/d3-time-format/src/defaultLocale.js","../node_modules/d3-time-format/src/isoFormat.js","../node_modules/d3-time-format/src/isoParse.js","../node_modules/d3-scale/src/time.js","../node_modules/d3-scale/src/sequential.js","../node_modules/d3-scale/src/diverging.js","../node_modules/d3-scale-chromatic/src/colors.js","../node_modules/d3-scale-chromatic/src/categorical/category10.js","../node_modules/d3-scale-chromatic/src/categorical/Accent.js","../node_modules/d3-scale-chromatic/src/categorical/Dark2.js","../node_modules/d3-scale-chromatic/src/categorical/observable10.js","../node_modules/d3-scale-chromatic/src/categorical/Paired.js","../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","../node_modules/d3-scale-chromatic/src/categorical/Set1.js","../node_modules/d3-scale-chromatic/src/categorical/Set2.js","../node_modules/d3-scale-chromatic/src/categorical/Set3.js","../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js","../node_modules/d3-scale-chromatic/src/ramp.js","../node_modules/d3-scale-chromatic/src/diverging/BrBG.js","../node_modules/d3-scale-chromatic/src/diverging/PRGn.js","../node_modules/d3-scale-chromatic/src/diverging/PiYG.js","../node_modules/d3-scale-chromatic/src/diverging/PuOr.js","../node_modules/d3-scale-chromatic/src/diverging/RdBu.js","../node_modules/d3-scale-chromatic/src/diverging/RdGy.js","../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","../node_modules/d3-scale-chromatic/src/diverging/Spectral.js","../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","../node_modules/d3-shape/src/constant.js","../node_modules/d3-shape/src/math.js","../node_modules/d3-shape/src/path.js","../node_modules/d3-shape/src/arc.js","../node_modules/d3-shape/src/array.js","../node_modules/d3-shape/src/curve/linear.js","../node_modules/d3-shape/src/point.js","../node_modules/d3-shape/src/line.js","../node_modules/d3-shape/src/area.js","../node_modules/d3-shape/src/descending.js","../node_modules/d3-shape/src/identity.js","../node_modules/d3-shape/src/curve/radial.js","../node_modules/d3-shape/src/lineRadial.js","../node_modules/d3-shape/src/areaRadial.js","../node_modules/d3-shape/src/pointRadial.js","../node_modules/d3-shape/src/curve/bump.js","../node_modules/d3-shape/src/link.js","../node_modules/d3-shape/src/symbol/asterisk.js","../node_modules/d3-shape/src/symbol/circle.js","../node_modules/d3-shape/src/symbol/cross.js","../node_modules/d3-shape/src/symbol/diamond.js","../node_modules/d3-shape/src/symbol/diamond2.js","../node_modules/d3-shape/src/symbol/plus.js","../node_modules/d3-shape/src/symbol/square.js","../node_modules/d3-shape/src/symbol/square2.js","../node_modules/d3-shape/src/symbol/star.js","../node_modules/d3-shape/src/symbol/triangle.js","../node_modules/d3-shape/src/symbol/triangle2.js","../node_modules/d3-shape/src/symbol/wye.js","../node_modules/d3-shape/src/symbol/times.js","../node_modules/d3-shape/src/symbol.js","../node_modules/d3-shape/src/noop.js","../node_modules/d3-shape/src/curve/basis.js","../node_modules/d3-shape/src/curve/basisClosed.js","../node_modules/d3-shape/src/curve/basisOpen.js","../node_modules/d3-shape/src/curve/bundle.js","../node_modules/d3-shape/src/curve/cardinal.js","../node_modules/d3-shape/src/curve/cardinalClosed.js","../node_modules/d3-shape/src/curve/cardinalOpen.js","../node_modules/d3-shape/src/curve/catmullRom.js","../node_modules/d3-shape/src/curve/catmullRomClosed.js","../node_modules/d3-shape/src/curve/catmullRomOpen.js","../node_modules/d3-shape/src/curve/linearClosed.js","../node_modules/d3-shape/src/curve/monotone.js","../node_modules/d3-shape/src/curve/natural.js","../node_modules/d3-shape/src/curve/step.js","../node_modules/d3-shape/src/offset/none.js","../node_modules/d3-shape/src/order/none.js","../node_modules/d3-shape/src/stack.js","../node_modules/d3-shape/src/order/appearance.js","../node_modules/d3-shape/src/order/ascending.js","../node_modules/d3-zoom/src/constant.js","../node_modules/d3-zoom/src/event.js","../node_modules/d3-zoom/src/transform.js","../node_modules/d3-zoom/src/noevent.js","../node_modules/d3-zoom/src/zoom.js","../node_modules/d3-array/src/cumsum.js","../node_modules/d3-array/src/difference.js","../node_modules/d3-array/src/disjoint.js","../node_modules/d3-ease/src/linear.js","../node_modules/d3-array/src/every.js","../node_modules/d3-array/src/filter.js","../node_modules/d3-force/src/center.js","../node_modules/d3-force/src/manyBody.js","../node_modules/d3-force/src/radial.js","../node_modules/d3-force/src/x.js","../node_modules/d3-force/src/y.js","../node_modules/d3-geo/src/projection/albersUsa.js","../node_modules/d3-geo/src/clip/extent.js","../node_modules/d3-geo/src/projection/identity.js","../node_modules/d3-geo/src/interpolate.js","../node_modules/d3-geo/src/path/index.js","../node_modules/d3-array/src/greatestIndex.js","../node_modules/d3-array/src/groupSort.js","../node_modules/d3-fetch/src/image.js","../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js","../node_modules/d3-interpolate/src/discrete.js","../node_modules/d3-interpolate/src/hue.js","../node_modules/d3-interpolate/src/lab.js","../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js","../node_modules/d3-timer/src/interval.js","../node_modules/d3-array/src/least.js","../node_modules/d3-array/src/map.js","../node_modules/d3-array/src/median.js","../node_modules/d3-array/src/mode.js","../node_modules/d3-hierarchy/src/partition.js","../node_modules/d3-shape/src/pie.js","../node_modules/d3-selection/src/pointers.js","../node_modules/d3-polygon/src/area.js","../node_modules/d3-polygon/src/centroid.js","../node_modules/d3-polygon/src/contains.js","../node_modules/d3-polygon/src/length.js","../node_modules/d3-interpolate/src/quantize.js","../node_modules/d3-array/src/rank.js","../node_modules/d3-array/src/reduce.js","../node_modules/d3-array/src/reverse.js","../node_modules/d3-scale/src/identity.js","../node_modules/d3-scale/src/quantile.js","../node_modules/d3-scale/src/quantize.js","../node_modules/d3-scale/src/sequentialQuantile.js","../node_modules/d3-scale/src/threshold.js","../node_modules/d3-scale/src/utcTime.js","../node_modules/d3-array/src/scan.js","../node_modules/d3-array/src/some.js","../node_modules/d3-shape/src/offset/diverging.js","../node_modules/d3-shape/src/offset/expand.js","../node_modules/d3-shape/src/offset/silhouette.js","../node_modules/d3-shape/src/offset/wiggle.js","../node_modules/d3-shape/src/order/descending.js","../node_modules/d3-shape/src/order/insideOut.js","../node_modules/d3-shape/src/order/reverse.js","../node_modules/d3-array/src/subset.js","../node_modules/d3-array/src/sum.js","../node_modules/d3-array/src/threshold/freedmanDiaconis.js","../node_modules/d3-array/src/threshold/scott.js","../node_modules/d3-hierarchy/src/treemap/index.js","../node_modules/d3-hierarchy/src/treemap/binary.js","../node_modules/d3-hierarchy/src/treemap/sliceDice.js","../node_modules/d3-array/src/union.js","../node_modules/d3-array/src/zip.js","../node_modules/d3-collection/src/map.js","../node_modules/d3-collection/src/set.js","../node_modules/d3-tip/node_modules/d3-selection/src/namespaces.js","../node_modules/d3-tip/node_modules/d3-selection/src/namespace.js","../node_modules/d3-tip/node_modules/d3-selection/src/creator.js","../node_modules/d3-tip/node_modules/d3-selection/src/selector.js","../node_modules/d3-tip/node_modules/d3-selection/src/selectorAll.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/sparse.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/enter.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/data.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/sort.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/attr.js","../node_modules/d3-tip/node_modules/d3-selection/src/window.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/style.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/property.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/classed.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/text.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/html.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/raise.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/lower.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/insert.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/remove.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/clone.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/on.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/dispatch.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/index.js","../node_modules/d3-tip/node_modules/d3-selection/src/select.js","../node_modules/d3-tip/index.js","../node_modules/ml-distance-euclidean/lib-es6/euclidean.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/select.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/selectAll.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/filter.js","../node_modules/d3-tip/node_modules/d3-selection/src/matcher.js","../node_modules/d3-tip/node_modules/d3-selection/src/constant.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/exit.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/join.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/merge.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/order.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/call.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/nodes.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/node.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/size.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/empty.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/each.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/append.js","../node_modules/d3-tip/node_modules/d3-selection/src/selection/datum.js","../node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-matrix/matrix.js","../node_modules/ml-matrix/matrix.mjs","../node_modules/heap/lib/heap.js","../node_modules/heap/index.js","../node_modules/ml-hclust/src/Cluster.js","../node_modules/ml-hclust/src/agnes.js","../node_modules/ml-distance-matrix/src/index.js","../src/plotTitle.mjs","../src/plotZoom.mjs","../src/heatmap.mjs","../src/otherFunctions.js","../src/hclust.mjs","../node_modules/ml-pca/lib-esm/pca.js","../src/pca.mjs","../node_modules/@keckelt/tsne/lib/index.js","../node_modules/@keckelt/tsne/lib/tsne.js","../src/tsne.mjs","../node_modules/umap-js/dist/utils.js","../node_modules/umap-js/dist/heap.js","../node_modules/umap-js/dist/matrix.js","../node_modules/umap-js/dist/tree.js","../node_modules/ml-levenberg-marquardt/node_modules/is-any-array/src/index.js","../node_modules/ml-levenberg-marquardt/src/errorCalculation.js","../node_modules/ml-levenberg-marquardt/src/step.js","../node_modules/ml-levenberg-marquardt/src/index.js","../node_modules/umap-js/dist/umap.js","../node_modules/umap-js/dist/nn_descent.js","../node_modules/umap-js/dist/index.js","../src/umap.mjs","../src/scatter.mjs","../src/pairs.mjs","../src/distance.mjs","../src/sdk.mjs"],"sourcesContent":["const irisData = [{\"sepal_length\":5.1,\"sepal_width\":3.5,\"petal_length\":1.4,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.9,\"sepal_width\":3.0,\"petal_length\":1.4,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.7,\"sepal_width\":3.2,\"petal_length\":1.3,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.6,\"sepal_width\":3.1,\"petal_length\":1.5,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.0,\"sepal_width\":3.6,\"petal_length\":1.4,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.4,\"sepal_width\":3.9,\"petal_length\":1.7,\"petal_width\":0.4,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.6,\"sepal_width\":3.4,\"petal_length\":1.4,\"petal_width\":0.3,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.0,\"sepal_width\":3.4,\"petal_length\":1.5,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.4,\"sepal_width\":2.9,\"petal_length\":1.4,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.9,\"sepal_width\":3.1,\"petal_length\":1.5,\"petal_width\":0.1,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.4,\"sepal_width\":3.7,\"petal_length\":1.5,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.8,\"sepal_width\":3.4,\"petal_length\":1.6,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.8,\"sepal_width\":3.0,\"petal_length\":1.4,\"petal_width\":0.1,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.3,\"sepal_width\":3.0,\"petal_length\":1.1,\"petal_width\":0.1,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.8,\"sepal_width\":4.0,\"petal_length\":1.2,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.7,\"sepal_width\":4.4,\"petal_length\":1.5,\"petal_width\":0.4,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.4,\"sepal_width\":3.9,\"petal_length\":1.3,\"petal_width\":0.4,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.1,\"sepal_width\":3.5,\"petal_length\":1.4,\"petal_width\":0.3,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.7,\"sepal_width\":3.8,\"petal_length\":1.7,\"petal_width\":0.3,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.1,\"sepal_width\":3.8,\"petal_length\":1.5,\"petal_width\":0.3,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.4,\"sepal_width\":3.4,\"petal_length\":1.7,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.1,\"sepal_width\":3.7,\"petal_length\":1.5,\"petal_width\":0.4,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.6,\"sepal_width\":3.6,\"petal_length\":1.0,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.1,\"sepal_width\":3.3,\"petal_length\":1.7,\"petal_width\":0.5,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.8,\"sepal_width\":3.4,\"petal_length\":1.9,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.0,\"sepal_width\":3.0,\"petal_length\":1.6,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.0,\"sepal_width\":3.4,\"petal_length\":1.6,\"petal_width\":0.4,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.2,\"sepal_width\":3.5,\"petal_length\":1.5,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.2,\"sepal_width\":3.4,\"petal_length\":1.4,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.7,\"sepal_width\":3.2,\"petal_length\":1.6,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.8,\"sepal_width\":3.1,\"petal_length\":1.6,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.4,\"sepal_width\":3.4,\"petal_length\":1.5,\"petal_width\":0.4,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.2,\"sepal_width\":4.1,\"petal_length\":1.5,\"petal_width\":0.1,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.5,\"sepal_width\":4.2,\"petal_length\":1.4,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.9,\"sepal_width\":3.1,\"petal_length\":1.5,\"petal_width\":0.1,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.0,\"sepal_width\":3.2,\"petal_length\":1.2,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.5,\"sepal_width\":3.5,\"petal_length\":1.3,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.9,\"sepal_width\":3.6,\"petal_length\":1.4,\"petal_width\":0.1,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.4,\"sepal_width\":3.0,\"petal_length\":1.3,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.1,\"sepal_width\":3.4,\"petal_length\":1.5,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.0,\"sepal_width\":3.5,\"petal_length\":1.3,\"petal_width\":0.3,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.5,\"sepal_width\":2.3,\"petal_length\":1.3,\"petal_width\":0.3,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.4,\"sepal_width\":3.2,\"petal_length\":1.3,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.0,\"sepal_width\":3.5,\"petal_length\":1.6,\"petal_width\":0.6,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.1,\"sepal_width\":3.8,\"petal_length\":1.9,\"petal_width\":0.4,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.8,\"sepal_width\":3.0,\"petal_length\":1.4,\"petal_width\":0.3,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.1,\"sepal_width\":3.8,\"petal_length\":1.6,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":4.6,\"sepal_width\":3.2,\"petal_length\":1.4,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":5.3,\"sepal_width\":3.7,\"petal_length\":1.5,\"petal_width\":0.2,\"species\":\"setosa\"},\r\n  {\"sepal_length\":7.0,\"sepal_width\":3.2,\"petal_length\":4.7,\"petal_width\":1.4,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.4,\"sepal_width\":3.2,\"petal_length\":4.5,\"petal_width\":1.5,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.9,\"sepal_width\":3.1,\"petal_length\":4.9,\"petal_width\":1.5,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.5,\"sepal_width\":2.3,\"petal_length\":4.0,\"petal_width\":1.3,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.5,\"sepal_width\":2.8,\"petal_length\":4.6,\"petal_width\":1.5,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.7,\"sepal_width\":2.8,\"petal_length\":4.5,\"petal_width\":1.3,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.3,\"sepal_width\":3.3,\"petal_length\":4.7,\"petal_width\":1.6,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":4.9,\"sepal_width\":2.4,\"petal_length\":3.3,\"petal_width\":1.0,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.6,\"sepal_width\":2.9,\"petal_length\":4.6,\"petal_width\":1.3,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.2,\"sepal_width\":2.7,\"petal_length\":3.9,\"petal_width\":1.4,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.0,\"sepal_width\":2.0,\"petal_length\":3.5,\"petal_width\":1.0,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.9,\"sepal_width\":3.0,\"petal_length\":4.2,\"petal_width\":1.5,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.0,\"sepal_width\":2.2,\"petal_length\":4.0,\"petal_width\":1.0,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.1,\"sepal_width\":2.9,\"petal_length\":4.7,\"petal_width\":1.4,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.6,\"sepal_width\":2.9,\"petal_length\":3.6,\"petal_width\":1.3,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.7,\"sepal_width\":3.1,\"petal_length\":4.4,\"petal_width\":1.4,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.6,\"sepal_width\":3.0,\"petal_length\":4.5,\"petal_width\":1.5,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.8,\"sepal_width\":2.7,\"petal_length\":4.1,\"petal_width\":1.0,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.2,\"sepal_width\":2.2,\"petal_length\":4.5,\"petal_width\":1.5,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.6,\"sepal_width\":2.5,\"petal_length\":3.9,\"petal_width\":1.1,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.9,\"sepal_width\":3.2,\"petal_length\":4.8,\"petal_width\":1.8,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.1,\"sepal_width\":2.8,\"petal_length\":4.0,\"petal_width\":1.3,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.3,\"sepal_width\":2.5,\"petal_length\":4.9,\"petal_width\":1.5,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.1,\"sepal_width\":2.8,\"petal_length\":4.7,\"petal_width\":1.2,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.4,\"sepal_width\":2.9,\"petal_length\":4.3,\"petal_width\":1.3,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.6,\"sepal_width\":3.0,\"petal_length\":4.4,\"petal_width\":1.4,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.8,\"sepal_width\":2.8,\"petal_length\":4.8,\"petal_width\":1.4,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.7,\"sepal_width\":3.0,\"petal_length\":5.0,\"petal_width\":1.7,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.0,\"sepal_width\":2.9,\"petal_length\":4.5,\"petal_width\":1.5,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.7,\"sepal_width\":2.6,\"petal_length\":3.5,\"petal_width\":1.0,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.5,\"sepal_width\":2.4,\"petal_length\":3.8,\"petal_width\":1.1,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.5,\"sepal_width\":2.4,\"petal_length\":3.7,\"petal_width\":1.0,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.8,\"sepal_width\":2.7,\"petal_length\":3.9,\"petal_width\":1.2,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.0,\"sepal_width\":2.7,\"petal_length\":5.1,\"petal_width\":1.6,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.4,\"sepal_width\":3.0,\"petal_length\":4.5,\"petal_width\":1.5,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.0,\"sepal_width\":3.4,\"petal_length\":4.5,\"petal_width\":1.6,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.7,\"sepal_width\":3.1,\"petal_length\":4.7,\"petal_width\":1.5,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.3,\"sepal_width\":2.3,\"petal_length\":4.4,\"petal_width\":1.3,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.6,\"sepal_width\":3.0,\"petal_length\":4.1,\"petal_width\":1.3,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.5,\"sepal_width\":2.5,\"petal_length\":4.0,\"petal_width\":1.3,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.5,\"sepal_width\":2.6,\"petal_length\":4.4,\"petal_width\":1.2,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.1,\"sepal_width\":3.0,\"petal_length\":4.6,\"petal_width\":1.4,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.8,\"sepal_width\":2.6,\"petal_length\":4.0,\"petal_width\":1.2,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.0,\"sepal_width\":2.3,\"petal_length\":3.3,\"petal_width\":1.0,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.6,\"sepal_width\":2.7,\"petal_length\":4.2,\"petal_width\":1.3,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.7,\"sepal_width\":3.0,\"petal_length\":4.2,\"petal_width\":1.2,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.7,\"sepal_width\":2.9,\"petal_length\":4.2,\"petal_width\":1.3,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.2,\"sepal_width\":2.9,\"petal_length\":4.3,\"petal_width\":1.3,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":5.1,\"sepal_width\":2.5,\"petal_length\":3.0,\"petal_width\":1.1,\"species\":\"versicolor\"},\r\n  {\"sepal_length\":6.3,\"sepal_width\":3.3,\"petal_length\":6.0,\"petal_width\":2.5,\"species\":\"virginica\"},\r\n  {\"sepal_length\":5.8,\"sepal_width\":2.7,\"petal_length\":5.1,\"petal_width\":1.9,\"species\":\"virginica\"},\r\n  {\"sepal_length\":7.1,\"sepal_width\":3.0,\"petal_length\":5.9,\"petal_width\":2.1,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.3,\"sepal_width\":2.9,\"petal_length\":5.6,\"petal_width\":1.8,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.5,\"sepal_width\":3.0,\"petal_length\":5.8,\"petal_width\":2.2,\"species\":\"virginica\"},\r\n  {\"sepal_length\":7.6,\"sepal_width\":3.0,\"petal_length\":6.6,\"petal_width\":2.1,\"species\":\"virginica\"},\r\n  {\"sepal_length\":4.9,\"sepal_width\":2.5,\"petal_length\":4.5,\"petal_width\":1.7,\"species\":\"virginica\"},\r\n  {\"sepal_length\":7.3,\"sepal_width\":2.9,\"petal_length\":6.3,\"petal_width\":1.8,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.7,\"sepal_width\":2.5,\"petal_length\":5.8,\"petal_width\":1.8,\"species\":\"virginica\"},\r\n  {\"sepal_length\":7.2,\"sepal_width\":3.6,\"petal_length\":6.1,\"petal_width\":2.5,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.5,\"sepal_width\":3.2,\"petal_length\":5.1,\"petal_width\":2.0,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.4,\"sepal_width\":2.7,\"petal_length\":5.3,\"petal_width\":1.9,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.8,\"sepal_width\":3.0,\"petal_length\":5.5,\"petal_width\":2.1,\"species\":\"virginica\"},\r\n  {\"sepal_length\":5.7,\"sepal_width\":2.5,\"petal_length\":5.0,\"petal_width\":2.0,\"species\":\"virginica\"},\r\n  {\"sepal_length\":5.8,\"sepal_width\":2.8,\"petal_length\":5.1,\"petal_width\":2.4,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.4,\"sepal_width\":3.2,\"petal_length\":5.3,\"petal_width\":2.3,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.5,\"sepal_width\":3.0,\"petal_length\":5.5,\"petal_width\":1.8,\"species\":\"virginica\"},\r\n  {\"sepal_length\":7.7,\"sepal_width\":3.8,\"petal_length\":6.7,\"petal_width\":2.2,\"species\":\"virginica\"},\r\n  {\"sepal_length\":7.7,\"sepal_width\":2.6,\"petal_length\":6.9,\"petal_width\":2.3,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.0,\"sepal_width\":2.2,\"petal_length\":5.0,\"petal_width\":1.5,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.9,\"sepal_width\":3.2,\"petal_length\":5.7,\"petal_width\":2.3,\"species\":\"virginica\"},\r\n  {\"sepal_length\":5.6,\"sepal_width\":2.8,\"petal_length\":4.9,\"petal_width\":2.0,\"species\":\"virginica\"},\r\n  {\"sepal_length\":7.7,\"sepal_width\":2.8,\"petal_length\":6.7,\"petal_width\":2.0,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.3,\"sepal_width\":2.7,\"petal_length\":4.9,\"petal_width\":1.8,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.7,\"sepal_width\":3.3,\"petal_length\":5.7,\"petal_width\":2.1,\"species\":\"virginica\"},\r\n  {\"sepal_length\":7.2,\"sepal_width\":3.2,\"petal_length\":6.0,\"petal_width\":1.8,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.2,\"sepal_width\":2.8,\"petal_length\":4.8,\"petal_width\":1.8,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.1,\"sepal_width\":3.0,\"petal_length\":4.9,\"petal_width\":1.8,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.4,\"sepal_width\":2.8,\"petal_length\":5.6,\"petal_width\":2.1,\"species\":\"virginica\"},\r\n  {\"sepal_length\":7.2,\"sepal_width\":3.0,\"petal_length\":5.8,\"petal_width\":1.6,\"species\":\"virginica\"},\r\n  {\"sepal_length\":7.4,\"sepal_width\":2.8,\"petal_length\":6.1,\"petal_width\":1.9,\"species\":\"virginica\"},\r\n  {\"sepal_length\":7.9,\"sepal_width\":3.8,\"petal_length\":6.4,\"petal_width\":2.0,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.4,\"sepal_width\":2.8,\"petal_length\":5.6,\"petal_width\":2.2,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.3,\"sepal_width\":2.8,\"petal_length\":5.1,\"petal_width\":1.5,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.1,\"sepal_width\":2.6,\"petal_length\":5.6,\"petal_width\":1.4,\"species\":\"virginica\"},\r\n  {\"sepal_length\":7.7,\"sepal_width\":3.0,\"petal_length\":6.1,\"petal_width\":2.3,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.3,\"sepal_width\":3.4,\"petal_length\":5.6,\"petal_width\":2.4,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.4,\"sepal_width\":3.1,\"petal_length\":5.5,\"petal_width\":1.8,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.0,\"sepal_width\":3.0,\"petal_length\":4.8,\"petal_width\":1.8,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.9,\"sepal_width\":3.1,\"petal_length\":5.4,\"petal_width\":2.1,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.7,\"sepal_width\":3.1,\"petal_length\":5.6,\"petal_width\":2.4,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.9,\"sepal_width\":3.1,\"petal_length\":5.1,\"petal_width\":2.3,\"species\":\"virginica\"},\r\n  {\"sepal_length\":5.8,\"sepal_width\":2.7,\"petal_length\":5.1,\"petal_width\":1.9,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.8,\"sepal_width\":3.2,\"petal_length\":5.9,\"petal_width\":2.3,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.7,\"sepal_width\":3.3,\"petal_length\":5.7,\"petal_width\":2.5,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.7,\"sepal_width\":3.0,\"petal_length\":5.2,\"petal_width\":2.3,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.3,\"sepal_width\":2.5,\"petal_length\":5.0,\"petal_width\":1.9,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.5,\"sepal_width\":3.0,\"petal_length\":5.2,\"petal_width\":2.0,\"species\":\"virginica\"},\r\n  {\"sepal_length\":6.2,\"sepal_width\":3.4,\"petal_length\":5.4,\"petal_width\":2.3,\"species\":\"virginica\"},\r\n  {\"sepal_length\":5.9,\"sepal_width\":3.0,\"petal_length\":5.1,\"petal_width\":1.8,\"species\":\"virginica\"}\r\n]\r\n\r\nexport default irisData;","\r\n// function makeLargeSpiralData({\r\n//   pointsPerSpiral = 300,   // 300 → total 400 points\r\n//   turns = 3,\r\n//   noise = 0.05,\r\n//   seed = 42\r\n// } = {}) {\r\n//   const data = [];\r\n//   const TWO_PI = Math.PI * 2;\r\n\r\n//   // deterministic RNG (so results are reproducible)\r\n//   let s = seed;\r\n//   function rand() {\r\n//     s = (s * 16807) % 2147483647;\r\n//     return (s - 1) / 2147483646;\r\n//   }\r\n\r\n//   function randn() {\r\n//     // Box–Muller\r\n//     let u = 0, v = 0;\r\n//     while (u === 0) u = rand();\r\n//     while (v === 0) v = rand();\r\n//     return Math.sqrt(-2 * Math.log(u)) * Math.cos(TWO_PI * v);\r\n//   }\r\n\r\n//   for (let i = 0; i < pointsPerSpiral; i++) {\r\n//     const t = (i / (pointsPerSpiral - 1)) * (turns * TWO_PI);\r\n//     const r = t / (turns * TWO_PI); // normalized radius 0..1\r\n\r\n//     // ----- Spiral A -----\r\n//     const xA = r * Math.cos(t) + noise * randn();\r\n//     const yA = r * Math.sin(t) + noise * randn();\r\n\r\n//     data.push({\r\n//       f1: +xA.toFixed(4),\r\n//       f2: +yA.toFixed(4),\r\n//       f3: +(r * Math.sin(2 * t) + noise * randn()).toFixed(4),\r\n//       f4: +(r * Math.cos(2 * t) + noise * randn()).toFixed(4),\r\n//       label: \"spiral_A\"\r\n//     });\r\n\r\n//     // ----- Spiral B (phase-shifted by π) -----\r\n//     const xB = r * Math.cos(t + Math.PI) + noise * randn();\r\n//     const yB = r * Math.sin(t + Math.PI) + noise * randn();\r\n\r\n//     data.push({\r\n//       f1: +xB.toFixed(4),\r\n//       f2: +yB.toFixed(4),\r\n//       f3: +(-r * Math.sin(2 * t) + noise * randn()).toFixed(4),\r\n//       f4: +(-r * Math.cos(2 * t) + noise * randn()).toFixed(4),\r\n//       label: \"spiral_B\"\r\n//     });\r\n//   }\r\n\r\n//   return data;\r\n// }\r\n\r\n// const spiralData = makeLargeSpiralData({\r\n//   pointsPerSpiral: 300,  // 300 total points\r\n//   turns: 3,\r\n//   noise: 0.04\r\n// });\r\n\r\n// console.log(spiralData.length); // 400\r\n// console.log(spiralData.slice(0, 5));\r\n\r\n// const json = JSON.stringify(spiralData, null, 2);\r\n// console.log(json);\r\n\r\n\r\nconst spiralData = [\r\n  {\r\n    \"f1\": -0.1583,\r\n    \"f2\": -0.0026,\r\n    \"f3\": 0.0185,\r\n    \"f4\": -0.0088,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.002,\r\n    \"f2\": 0.0338,\r\n    \"f3\": -0.0175,\r\n    \"f4\": 0.0011,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0292,\r\n    \"f2\": 0.0303,\r\n    \"f3\": 0.0255,\r\n    \"f4\": 0.0309,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0269,\r\n    \"f2\": -0.0214,\r\n    \"f3\": -0.047,\r\n    \"f4\": 0.0647,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.1164,\r\n    \"f2\": 0.0046,\r\n    \"f3\": 0.0068,\r\n    \"f4\": -0.0152,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0126,\r\n    \"f2\": -0.0374,\r\n    \"f3\": 0.0521,\r\n    \"f4\": 0.0183,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0142,\r\n    \"f2\": 0.0685,\r\n    \"f3\": -0.0026,\r\n    \"f4\": 0.0972,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0253,\r\n    \"f2\": -0.0724,\r\n    \"f3\": -0.0023,\r\n    \"f4\": -0.0374,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.012,\r\n    \"f2\": 0.031,\r\n    \"f3\": 0.028,\r\n    \"f4\": 0.0824,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0407,\r\n    \"f2\": -0.0699,\r\n    \"f3\": 0.0299,\r\n    \"f4\": -0.0159,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0131,\r\n    \"f2\": 0.0362,\r\n    \"f3\": -0.0362,\r\n    \"f4\": -0.0023,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0196,\r\n    \"f2\": 0.0128,\r\n    \"f3\": -0.0387,\r\n    \"f4\": -0.0377,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0154,\r\n    \"f2\": -0.0503,\r\n    \"f3\": -0.0107,\r\n    \"f4\": -0.0793,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0314,\r\n    \"f2\": -0.0332,\r\n    \"f3\": 0.033,\r\n    \"f4\": -0.088,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.032,\r\n    \"f2\": -0.0347,\r\n    \"f3\": 0.0485,\r\n    \"f4\": -0.0976,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0457,\r\n    \"f2\": -0.076,\r\n    \"f3\": 0.0129,\r\n    \"f4\": 0.0337,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0024,\r\n    \"f2\": -0.0372,\r\n    \"f3\": -0.0226,\r\n    \"f4\": -0.0011,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0215,\r\n    \"f2\": -0.0491,\r\n    \"f3\": -0.0032,\r\n    \"f4\": -0.0044,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0559,\r\n    \"f2\": 0.0144,\r\n    \"f3\": -0.0136,\r\n    \"f4\": -0.0191,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0736,\r\n    \"f2\": -0.0645,\r\n    \"f3\": -0.0635,\r\n    \"f4\": -0.0238,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0804,\r\n    \"f2\": -0.0366,\r\n    \"f3\": 0.0817,\r\n    \"f4\": 0.0269,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0241,\r\n    \"f2\": -0.0046,\r\n    \"f3\": -0.0238,\r\n    \"f4\": -0.0141,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0107,\r\n    \"f2\": 0.0372,\r\n    \"f3\": 0.0713,\r\n    \"f4\": 0.0128,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0264,\r\n    \"f2\": -0.0034,\r\n    \"f3\": -0.0102,\r\n    \"f4\": -0.0068,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0074,\r\n    \"f2\": 0.0012,\r\n    \"f3\": 0.0296,\r\n    \"f4\": -0.0305,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0436,\r\n    \"f2\": 0.0153,\r\n    \"f3\": -0.0226,\r\n    \"f4\": -0.0355,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0151,\r\n    \"f2\": 0.0596,\r\n    \"f3\": 0.0148,\r\n    \"f4\": 0.0406,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0472,\r\n    \"f2\": -0.0069,\r\n    \"f3\": 0.0236,\r\n    \"f4\": -0.0007,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0191,\r\n    \"f2\": -0.0249,\r\n    \"f3\": -0.0096,\r\n    \"f4\": -0.0505,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0166,\r\n    \"f2\": -0.0521,\r\n    \"f3\": -0.0563,\r\n    \"f4\": -0.04,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0783,\r\n    \"f2\": 0.0683,\r\n    \"f3\": 0.0916,\r\n    \"f4\": -0.0263,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0073,\r\n    \"f2\": 0.0651,\r\n    \"f3\": -0.0938,\r\n    \"f4\": -0.0359,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0028,\r\n    \"f2\": 0.0721,\r\n    \"f3\": 0.0581,\r\n    \"f4\": -0.032,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1109,\r\n    \"f2\": -0.0378,\r\n    \"f3\": -0.0744,\r\n    \"f4\": 0.0247,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0075,\r\n    \"f2\": 0.133,\r\n    \"f3\": 0.0818,\r\n    \"f4\": -0.0126,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1046,\r\n    \"f2\": -0.0772,\r\n    \"f3\": -0.1078,\r\n    \"f4\": 0.0253,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0353,\r\n    \"f2\": 0.0352,\r\n    \"f3\": 0.0611,\r\n    \"f4\": -0.0418,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0637,\r\n    \"f2\": -0.1045,\r\n    \"f3\": -0.0942,\r\n    \"f4\": -0.0267,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.063,\r\n    \"f2\": 0.0249,\r\n    \"f3\": 0.0929,\r\n    \"f4\": 0.041,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0451,\r\n    \"f2\": -0.082,\r\n    \"f3\": -0.0115,\r\n    \"f4\": 0.0847,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.038,\r\n    \"f2\": 0.0494,\r\n    \"f3\": 0.0498,\r\n    \"f4\": -0.084,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0041,\r\n    \"f2\": -0.0837,\r\n    \"f3\": -0.0335,\r\n    \"f4\": 0.0529,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0098,\r\n    \"f2\": 0.0451,\r\n    \"f3\": -0.024,\r\n    \"f4\": -0.0951,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0448,\r\n    \"f2\": -0.1259,\r\n    \"f3\": -0.0579,\r\n    \"f4\": 0.0673,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0055,\r\n    \"f2\": 0.0513,\r\n    \"f3\": -0.0468,\r\n    \"f4\": -0.0395,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0305,\r\n    \"f2\": -0.0264,\r\n    \"f3\": -0.0401,\r\n    \"f4\": 0.0658,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0446,\r\n    \"f2\": 0.1255,\r\n    \"f3\": 0.0728,\r\n    \"f4\": -0.0855,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0261,\r\n    \"f2\": -0.1211,\r\n    \"f3\": -0.011,\r\n    \"f4\": 0.0584,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0363,\r\n    \"f2\": 0.0645,\r\n    \"f3\": 0.0304,\r\n    \"f4\": -0.0923,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0107,\r\n    \"f2\": -0.0731,\r\n    \"f3\": 0.006,\r\n    \"f4\": 0.1316,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0342,\r\n    \"f2\": 0.0926,\r\n    \"f3\": 0.0045,\r\n    \"f4\": -0.1308,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0256,\r\n    \"f2\": -0.1183,\r\n    \"f3\": -0.0164,\r\n    \"f4\": 0.0554,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0071,\r\n    \"f2\": 0.0331,\r\n    \"f3\": 0.0624,\r\n    \"f4\": -0.0479,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0057,\r\n    \"f2\": 0.0347,\r\n    \"f3\": 0.0046,\r\n    \"f4\": 0.1197,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0623,\r\n    \"f2\": 0.115,\r\n    \"f3\": -0.0222,\r\n    \"f4\": -0.1076,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0818,\r\n    \"f2\": -0.134,\r\n    \"f3\": 0.0525,\r\n    \"f4\": 0.104,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.01,\r\n    \"f2\": 0.0807,\r\n    \"f3\": 0.0276,\r\n    \"f4\": -0.085,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.03,\r\n    \"f2\": -0.0731,\r\n    \"f3\": 0.0172,\r\n    \"f4\": 0.1475,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0482,\r\n    \"f2\": 0.1813,\r\n    \"f3\": -0.0418,\r\n    \"f4\": -0.0562,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0265,\r\n    \"f2\": -0.0461,\r\n    \"f3\": 0.0819,\r\n    \"f4\": 0.1058,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0215,\r\n    \"f2\": 0.0478,\r\n    \"f3\": -0.072,\r\n    \"f4\": -0.149,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.004,\r\n    \"f2\": -0.0976,\r\n    \"f3\": 0.0123,\r\n    \"f4\": 0.053,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0516,\r\n    \"f2\": 0.0636,\r\n    \"f3\": -0.0869,\r\n    \"f4\": -0.0543,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.09,\r\n    \"f2\": -0.1127,\r\n    \"f3\": 0.1219,\r\n    \"f4\": 0.1187,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0049,\r\n    \"f2\": 0.0978,\r\n    \"f3\": -0.0898,\r\n    \"f4\": -0.0678,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0612,\r\n    \"f2\": -0.0982,\r\n    \"f3\": 0.1226,\r\n    \"f4\": 0.0831,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0474,\r\n    \"f2\": 0.1088,\r\n    \"f3\": -0.1307,\r\n    \"f4\": -0.0696,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0575,\r\n    \"f2\": -0.1104,\r\n    \"f3\": 0.0672,\r\n    \"f4\": 0.0001,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0627,\r\n    \"f2\": 0.0972,\r\n    \"f3\": -0.0813,\r\n    \"f4\": -0.1088,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0506,\r\n    \"f2\": -0.082,\r\n    \"f3\": 0.1313,\r\n    \"f4\": 0.0641,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0825,\r\n    \"f2\": 0.1055,\r\n    \"f3\": -0.0664,\r\n    \"f4\": -0.0145,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0569,\r\n    \"f2\": -0.0431,\r\n    \"f3\": 0.1923,\r\n    \"f4\": 0.0146,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1007,\r\n    \"f2\": 0.1172,\r\n    \"f3\": -0.0541,\r\n    \"f4\": -0.0081,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0435,\r\n    \"f2\": -0.0975,\r\n    \"f3\": 0.0488,\r\n    \"f4\": -0.0083,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1381,\r\n    \"f2\": 0.1231,\r\n    \"f3\": -0.0997,\r\n    \"f4\": -0.0397,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0842,\r\n    \"f2\": -0.0789,\r\n    \"f3\": 0.1388,\r\n    \"f4\": -0.0021,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0965,\r\n    \"f2\": 0.0601,\r\n    \"f3\": -0.0981,\r\n    \"f4\": 0.0253,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0997,\r\n    \"f2\": -0.098,\r\n    \"f3\": 0.1992,\r\n    \"f4\": -0.0432,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1023,\r\n    \"f2\": 0.1041,\r\n    \"f3\": -0.1042,\r\n    \"f4\": -0.0033,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1855,\r\n    \"f2\": -0.1203,\r\n    \"f3\": 0.098,\r\n    \"f4\": -0.0168,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0971,\r\n    \"f2\": 0.1009,\r\n    \"f3\": -0.1243,\r\n    \"f4\": 0.0722,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0983,\r\n    \"f2\": -0.1244,\r\n    \"f3\": 0.0974,\r\n    \"f4\": -0.0067,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0907,\r\n    \"f2\": 0.114,\r\n    \"f3\": -0.139,\r\n    \"f4\": 0.0548,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1273,\r\n    \"f2\": -0.1453,\r\n    \"f3\": 0.1466,\r\n    \"f4\": -0.0732,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1318,\r\n    \"f2\": 0.1509,\r\n    \"f3\": -0.0106,\r\n    \"f4\": 0.0775,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1435,\r\n    \"f2\": 0.0204,\r\n    \"f3\": 0.174,\r\n    \"f4\": -0.082,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1101,\r\n    \"f2\": 0.0674,\r\n    \"f3\": -0.1069,\r\n    \"f4\": 0.0729,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1892,\r\n    \"f2\": 0.0235,\r\n    \"f3\": 0.144,\r\n    \"f4\": -0.0666,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1681,\r\n    \"f2\": 0.1007,\r\n    \"f3\": -0.1144,\r\n    \"f4\": 0.1768,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0887,\r\n    \"f2\": -0.1153,\r\n    \"f3\": 0.1382,\r\n    \"f4\": -0.154,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.2004,\r\n    \"f2\": 0.0046,\r\n    \"f3\": -0.0953,\r\n    \"f4\": 0.0449,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1848,\r\n    \"f2\": -0.0829,\r\n    \"f3\": 0.0908,\r\n    \"f4\": -0.1319,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1087,\r\n    \"f2\": 0.0839,\r\n    \"f3\": -0.083,\r\n    \"f4\": 0.0974,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1125,\r\n    \"f2\": -0.0175,\r\n    \"f3\": 0.0433,\r\n    \"f4\": -0.1623,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1158,\r\n    \"f2\": 0.0607,\r\n    \"f3\": -0.0224,\r\n    \"f4\": 0.0996,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0961,\r\n    \"f2\": -0.0025,\r\n    \"f3\": 0.0108,\r\n    \"f4\": -0.1265,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1051,\r\n    \"f2\": 0.0714,\r\n    \"f3\": -0.0923,\r\n    \"f4\": 0.1794,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.126,\r\n    \"f2\": -0.0005,\r\n    \"f3\": 0.0292,\r\n    \"f4\": -0.1624,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1274,\r\n    \"f2\": 0.0409,\r\n    \"f3\": -0.0543,\r\n    \"f4\": 0.1503,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1423,\r\n    \"f2\": 0.0147,\r\n    \"f3\": 0.0443,\r\n    \"f4\": -0.2052,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1387,\r\n    \"f2\": -0.0475,\r\n    \"f3\": -0.0238,\r\n    \"f4\": 0.2145,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.078,\r\n    \"f2\": -0.0212,\r\n    \"f3\": 0.046,\r\n    \"f4\": -0.0975,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1461,\r\n    \"f2\": 0.0022,\r\n    \"f3\": 0.0468,\r\n    \"f4\": 0.1817,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1407,\r\n    \"f2\": -0.0384,\r\n    \"f3\": -0.002,\r\n    \"f4\": -0.1764,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1923,\r\n    \"f2\": -0.041,\r\n    \"f3\": 0.0655,\r\n    \"f4\": 0.234,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1846,\r\n    \"f2\": 0.1284,\r\n    \"f3\": -0.0173,\r\n    \"f4\": -0.115,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.2149,\r\n    \"f2\": -0.0213,\r\n    \"f3\": 0.0127,\r\n    \"f4\": 0.2641,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1677,\r\n    \"f2\": 0.0502,\r\n    \"f3\": -0.033,\r\n    \"f4\": -0.1378,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.2018,\r\n    \"f2\": -0.0324,\r\n    \"f3\": -0.0219,\r\n    \"f4\": 0.1022,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.176,\r\n    \"f2\": 0.0761,\r\n    \"f3\": -0.1294,\r\n    \"f4\": -0.2284,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1479,\r\n    \"f2\": -0.0583,\r\n    \"f3\": 0.1388,\r\n    \"f4\": 0.1984,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1429,\r\n    \"f2\": 0.047,\r\n    \"f3\": -0.08,\r\n    \"f4\": -0.1328,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.2559,\r\n    \"f2\": -0.0483,\r\n    \"f3\": 0.1868,\r\n    \"f4\": 0.2027,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.2404,\r\n    \"f2\": 0.075,\r\n    \"f3\": -0.158,\r\n    \"f4\": -0.1645,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.206,\r\n    \"f2\": -0.0422,\r\n    \"f3\": 0.2189,\r\n    \"f4\": 0.0787,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.179,\r\n    \"f2\": 0.0596,\r\n    \"f3\": -0.1196,\r\n    \"f4\": -0.1541,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.138,\r\n    \"f2\": -0.1447,\r\n    \"f3\": 0.1774,\r\n    \"f4\": 0.0962,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1499,\r\n    \"f2\": 0.1641,\r\n    \"f3\": -0.1576,\r\n    \"f4\": -0.1002,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1886,\r\n    \"f2\": -0.0682,\r\n    \"f3\": 0.183,\r\n    \"f4\": 0.0349,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1371,\r\n    \"f2\": 0.1808,\r\n    \"f3\": -0.1463,\r\n    \"f4\": -0.0941,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1974,\r\n    \"f2\": -0.1063,\r\n    \"f3\": 0.1641,\r\n    \"f4\": 0.0757,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1758,\r\n    \"f2\": 0.1568,\r\n    \"f3\": -0.1885,\r\n    \"f4\": -0.0425,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1762,\r\n    \"f2\": -0.0969,\r\n    \"f3\": 0.1671,\r\n    \"f4\": 0.0167,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1145,\r\n    \"f2\": 0.1004,\r\n    \"f3\": -0.1931,\r\n    \"f4\": 0.001,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0974,\r\n    \"f2\": -0.2296,\r\n    \"f3\": 0.2609,\r\n    \"f4\": 0.0127,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1903,\r\n    \"f2\": 0.1002,\r\n    \"f3\": -0.2028,\r\n    \"f4\": 0.0101,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1145,\r\n    \"f2\": -0.138,\r\n    \"f3\": 0.1676,\r\n    \"f4\": 0.0468,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0294,\r\n    \"f2\": 0.2006,\r\n    \"f3\": -0.2602,\r\n    \"f4\": 0.0442,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1264,\r\n    \"f2\": -0.2369,\r\n    \"f3\": 0.2045,\r\n    \"f4\": -0.0804,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1252,\r\n    \"f2\": 0.2004,\r\n    \"f3\": -0.1543,\r\n    \"f4\": 0.088,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1251,\r\n    \"f2\": -0.1935,\r\n    \"f3\": 0.1409,\r\n    \"f4\": -0.0747,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.226,\r\n    \"f2\": 0.1346,\r\n    \"f3\": -0.0995,\r\n    \"f4\": 0.1139,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1521,\r\n    \"f2\": -0.1755,\r\n    \"f3\": 0.171,\r\n    \"f4\": -0.0658,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1259,\r\n    \"f2\": 0.2706,\r\n    \"f3\": -0.1842,\r\n    \"f4\": 0.1014,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0628,\r\n    \"f2\": -0.1695,\r\n    \"f3\": 0.1937,\r\n    \"f4\": -0.1562,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0932,\r\n    \"f2\": 0.2079,\r\n    \"f3\": -0.1775,\r\n    \"f4\": 0.1202,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1184,\r\n    \"f2\": -0.1552,\r\n    \"f3\": 0.1889,\r\n    \"f4\": -0.1324,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0568,\r\n    \"f2\": 0.1645,\r\n    \"f3\": -0.1795,\r\n    \"f4\": 0.1719,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0282,\r\n    \"f2\": -0.1679,\r\n    \"f3\": 0.1398,\r\n    \"f4\": -0.1041,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0597,\r\n    \"f2\": 0.2173,\r\n    \"f3\": -0.0992,\r\n    \"f4\": 0.193,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0885,\r\n    \"f2\": -0.1983,\r\n    \"f3\": 0.1536,\r\n    \"f4\": -0.1624,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1385,\r\n    \"f2\": 0.2954,\r\n    \"f3\": -0.1626,\r\n    \"f4\": 0.1971,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0494,\r\n    \"f2\": -0.2112,\r\n    \"f3\": 0.067,\r\n    \"f4\": -0.1695,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1457,\r\n    \"f2\": 0.2058,\r\n    \"f3\": -0.1138,\r\n    \"f4\": 0.244,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0615,\r\n    \"f2\": -0.285,\r\n    \"f3\": 0.0979,\r\n    \"f4\": -0.1718,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0032,\r\n    \"f2\": 0.222,\r\n    \"f3\": -0.0827,\r\n    \"f4\": 0.2127,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0467,\r\n    \"f2\": -0.2514,\r\n    \"f3\": 0.0231,\r\n    \"f4\": -0.2495,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0312,\r\n    \"f2\": 0.2322,\r\n    \"f3\": -0.0813,\r\n    \"f4\": 0.2376,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0571,\r\n    \"f2\": -0.2484,\r\n    \"f3\": 0.0544,\r\n    \"f4\": -0.2559,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0499,\r\n    \"f2\": 0.2984,\r\n    \"f3\": -0.0275,\r\n    \"f4\": 0.2295,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0247,\r\n    \"f2\": -0.2858,\r\n    \"f3\": 0.0067,\r\n    \"f4\": -0.2526,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0348,\r\n    \"f2\": 0.2214,\r\n    \"f3\": 0.0479,\r\n    \"f4\": 0.2716,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.1201,\r\n    \"f2\": -0.2441,\r\n    \"f3\": -0.0932,\r\n    \"f4\": -0.2177,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0075,\r\n    \"f2\": 0.2409,\r\n    \"f3\": 0.0608,\r\n    \"f4\": 0.2032,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0402,\r\n    \"f2\": -0.2093,\r\n    \"f3\": -0.0554,\r\n    \"f4\": -0.2549,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0447,\r\n    \"f2\": 0.277,\r\n    \"f3\": 0.0767,\r\n    \"f4\": 0.257,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.058,\r\n    \"f2\": -0.2485,\r\n    \"f3\": -0.1662,\r\n    \"f4\": -0.2722,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0526,\r\n    \"f2\": 0.1787,\r\n    \"f3\": 0.1407,\r\n    \"f4\": 0.2455,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0365,\r\n    \"f2\": -0.2015,\r\n    \"f3\": -0.1982,\r\n    \"f4\": -0.2285,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0648,\r\n    \"f2\": 0.2561,\r\n    \"f3\": 0.1968,\r\n    \"f4\": 0.2392,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0522,\r\n    \"f2\": -0.2284,\r\n    \"f3\": -0.2388,\r\n    \"f4\": -0.17,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0918,\r\n    \"f2\": 0.1942,\r\n    \"f3\": 0.2087,\r\n    \"f4\": 0.1572,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0922,\r\n    \"f2\": -0.2988,\r\n    \"f3\": -0.1622,\r\n    \"f4\": -0.1911,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1314,\r\n    \"f2\": 0.2922,\r\n    \"f3\": 0.1406,\r\n    \"f4\": 0.1911,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0926,\r\n    \"f2\": -0.2775,\r\n    \"f3\": -0.1966,\r\n    \"f4\": -0.2089,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1868,\r\n    \"f2\": 0.1936,\r\n    \"f3\": 0.1755,\r\n    \"f4\": 0.2006,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.1854,\r\n    \"f2\": -0.1826,\r\n    \"f3\": -0.3396,\r\n    \"f4\": -0.1573,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1129,\r\n    \"f2\": 0.2403,\r\n    \"f3\": 0.2626,\r\n    \"f4\": 0.1203,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.1656,\r\n    \"f2\": -0.2294,\r\n    \"f3\": -0.2729,\r\n    \"f4\": -0.1932,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1179,\r\n    \"f2\": 0.2463,\r\n    \"f3\": 0.2489,\r\n    \"f4\": 0.0898,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.154,\r\n    \"f2\": -0.271,\r\n    \"f3\": -0.2929,\r\n    \"f4\": -0.089,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1918,\r\n    \"f2\": 0.2121,\r\n    \"f3\": 0.2657,\r\n    \"f4\": 0.1095,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.1549,\r\n    \"f2\": -0.2312,\r\n    \"f3\": -0.3164,\r\n    \"f4\": 0.003,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1692,\r\n    \"f2\": 0.1515,\r\n    \"f3\": 0.2887,\r\n    \"f4\": 0.0738,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.1784,\r\n    \"f2\": -0.1897,\r\n    \"f3\": -0.2746,\r\n    \"f4\": -0.0249,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1885,\r\n    \"f2\": 0.233,\r\n    \"f3\": 0.3402,\r\n    \"f4\": -0.023,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.2761,\r\n    \"f2\": -0.1997,\r\n    \"f3\": -0.3114,\r\n    \"f4\": 0.0943,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2262,\r\n    \"f2\": 0.2034,\r\n    \"f3\": 0.2394,\r\n    \"f4\": 0.0258,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.227,\r\n    \"f2\": -0.217,\r\n    \"f3\": -0.2455,\r\n    \"f4\": 0.0521,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2864,\r\n    \"f2\": 0.2254,\r\n    \"f3\": 0.2628,\r\n    \"f4\": -0.1017,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.2354,\r\n    \"f2\": -0.2409,\r\n    \"f3\": -0.3006,\r\n    \"f4\": 0.0935,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2367,\r\n    \"f2\": 0.2297,\r\n    \"f3\": 0.2183,\r\n    \"f4\": -0.141,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3052,\r\n    \"f2\": -0.1745,\r\n    \"f3\": -0.2697,\r\n    \"f4\": 0.1837,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.281,\r\n    \"f2\": 0.1191,\r\n    \"f3\": 0.1998,\r\n    \"f4\": -0.1919,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.2707,\r\n    \"f2\": -0.1419,\r\n    \"f3\": -0.1748,\r\n    \"f4\": 0.2259,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2653,\r\n    \"f2\": 0.2174,\r\n    \"f3\": 0.2584,\r\n    \"f4\": -0.1014,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.2537,\r\n    \"f2\": -0.1042,\r\n    \"f3\": -0.2079,\r\n    \"f4\": 0.216,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2236,\r\n    \"f2\": 0.1028,\r\n    \"f3\": 0.2509,\r\n    \"f4\": -0.202,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.2714,\r\n    \"f2\": -0.0972,\r\n    \"f3\": -0.2601,\r\n    \"f4\": 0.2176,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.3105,\r\n    \"f2\": 0.0439,\r\n    \"f3\": 0.1794,\r\n    \"f4\": -0.2054,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.306,\r\n    \"f2\": -0.054,\r\n    \"f3\": -0.1425,\r\n    \"f4\": 0.3067,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.323,\r\n    \"f2\": 0.0918,\r\n    \"f3\": 0.1529,\r\n    \"f4\": -0.2492,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3319,\r\n    \"f2\": -0.062,\r\n    \"f3\": -0.2103,\r\n    \"f4\": 0.3056,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2929,\r\n    \"f2\": 0.0958,\r\n    \"f3\": 0.1433,\r\n    \"f4\": -0.3032,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3344,\r\n    \"f2\": 0.0822,\r\n    \"f3\": -0.1231,\r\n    \"f4\": 0.3036,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2561,\r\n    \"f2\": 0.0586,\r\n    \"f3\": 0.1583,\r\n    \"f4\": -0.2889,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3863,\r\n    \"f2\": -0.0272,\r\n    \"f3\": -0.0965,\r\n    \"f4\": 0.3238,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.3016,\r\n    \"f2\": 0.0708,\r\n    \"f3\": 0.1009,\r\n    \"f4\": -0.3494,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3318,\r\n    \"f2\": 0.0431,\r\n    \"f3\": -0.0079,\r\n    \"f4\": 0.3889,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.3504,\r\n    \"f2\": 0.0486,\r\n    \"f3\": 0.0503,\r\n    \"f4\": -0.2813,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3319,\r\n    \"f2\": 0.0129,\r\n    \"f3\": 0.0894,\r\n    \"f4\": 0.3587,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2997,\r\n    \"f2\": 0.0096,\r\n    \"f3\": 0.0153,\r\n    \"f4\": -0.319,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3842,\r\n    \"f2\": 0.0142,\r\n    \"f3\": 0.0573,\r\n    \"f4\": 0.3153,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2965,\r\n    \"f2\": 0.0611,\r\n    \"f3\": -0.1224,\r\n    \"f4\": -0.3321,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.2702,\r\n    \"f2\": 0.0219,\r\n    \"f3\": 0.1139,\r\n    \"f4\": 0.3543,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.3223,\r\n    \"f2\": -0.0369,\r\n    \"f3\": -0.1183,\r\n    \"f4\": -0.3367,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3119,\r\n    \"f2\": 0.0894,\r\n    \"f3\": 0.1855,\r\n    \"f4\": 0.2537,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.4125,\r\n    \"f2\": -0.1006,\r\n    \"f3\": -0.1693,\r\n    \"f4\": -0.3171,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3383,\r\n    \"f2\": 0.0817,\r\n    \"f3\": 0.1846,\r\n    \"f4\": 0.3163,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2622,\r\n    \"f2\": -0.0846,\r\n    \"f3\": -0.1184,\r\n    \"f4\": -0.2702,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3154,\r\n    \"f2\": 0.1523,\r\n    \"f3\": 0.2449,\r\n    \"f4\": 0.2442,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.3634,\r\n    \"f2\": -0.1161,\r\n    \"f3\": -0.2115,\r\n    \"f4\": -0.2011,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3909,\r\n    \"f2\": 0.1011,\r\n    \"f3\": 0.2472,\r\n    \"f4\": 0.24,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2528,\r\n    \"f2\": -0.1411,\r\n    \"f3\": -0.2478,\r\n    \"f4\": -0.2938,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3329,\r\n    \"f2\": 0.1142,\r\n    \"f3\": 0.2949,\r\n    \"f4\": 0.1785,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.3418,\r\n    \"f2\": -0.1137,\r\n    \"f3\": -0.2782,\r\n    \"f4\": -0.192,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3473,\r\n    \"f2\": 0.164,\r\n    \"f3\": 0.2923,\r\n    \"f4\": 0.168,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2857,\r\n    \"f2\": -0.1433,\r\n    \"f3\": -0.3743,\r\n    \"f4\": -0.1338,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.286,\r\n    \"f2\": 0.1915,\r\n    \"f3\": 0.3295,\r\n    \"f4\": 0.1797,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.3106,\r\n    \"f2\": -0.2479,\r\n    \"f3\": -0.3072,\r\n    \"f4\": -0.1629,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.2909,\r\n    \"f2\": 0.1748,\r\n    \"f3\": 0.3634,\r\n    \"f4\": 0.0703,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.3761,\r\n    \"f2\": -0.2047,\r\n    \"f3\": -0.3953,\r\n    \"f4\": -0.1321,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.2543,\r\n    \"f2\": 0.2762,\r\n    \"f3\": 0.4232,\r\n    \"f4\": -0.0059,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2479,\r\n    \"f2\": -0.2129,\r\n    \"f3\": -0.3842,\r\n    \"f4\": -0.1447,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.2505,\r\n    \"f2\": 0.3071,\r\n    \"f3\": 0.3236,\r\n    \"f4\": 0.0047,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2628,\r\n    \"f2\": -0.3,\r\n    \"f3\": -0.3587,\r\n    \"f4\": -0.0204,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3549,\r\n    \"f2\": 0.3183,\r\n    \"f3\": 0.3837,\r\n    \"f4\": -0.0911,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2586,\r\n    \"f2\": -0.2515,\r\n    \"f3\": -0.379,\r\n    \"f4\": 0.0715,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.2806,\r\n    \"f2\": 0.3007,\r\n    \"f3\": 0.3126,\r\n    \"f4\": -0.1253,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2004,\r\n    \"f2\": -0.3059,\r\n    \"f3\": -0.3325,\r\n    \"f4\": 0.0678,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.1929,\r\n    \"f2\": 0.4044,\r\n    \"f3\": 0.3608,\r\n    \"f4\": -0.1471,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.235,\r\n    \"f2\": -0.3277,\r\n    \"f3\": -0.3355,\r\n    \"f4\": 0.1558,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.1753,\r\n    \"f2\": 0.3381,\r\n    \"f3\": 0.363,\r\n    \"f4\": -0.2214,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2467,\r\n    \"f2\": -0.3476,\r\n    \"f3\": -0.3238,\r\n    \"f4\": 0.1935,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0951,\r\n    \"f2\": 0.2919,\r\n    \"f3\": 0.2929,\r\n    \"f4\": -0.2862,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2363,\r\n    \"f2\": -0.4077,\r\n    \"f3\": -0.33,\r\n    \"f4\": 0.124,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.204,\r\n    \"f2\": 0.2977,\r\n    \"f3\": 0.2539,\r\n    \"f4\": -0.2404,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1686,\r\n    \"f2\": -0.3469,\r\n    \"f3\": -0.2657,\r\n    \"f4\": 0.3582,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.1239,\r\n    \"f2\": 0.3838,\r\n    \"f3\": 0.2577,\r\n    \"f4\": -0.224,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0688,\r\n    \"f2\": -0.3729,\r\n    \"f3\": -0.2526,\r\n    \"f4\": 0.278,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.1554,\r\n    \"f2\": 0.4296,\r\n    \"f3\": 0.2255,\r\n    \"f4\": -0.3753,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.131,\r\n    \"f2\": -0.3959,\r\n    \"f3\": -0.2253,\r\n    \"f4\": 0.3666,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0689,\r\n    \"f2\": 0.4142,\r\n    \"f3\": 0.1516,\r\n    \"f4\": -0.2617,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0899,\r\n    \"f2\": -0.3791,\r\n    \"f3\": -0.1455,\r\n    \"f4\": 0.3327,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0009,\r\n    \"f2\": 0.3716,\r\n    \"f3\": 0.0939,\r\n    \"f4\": -0.4058,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0963,\r\n    \"f2\": -0.3841,\r\n    \"f3\": -0.1138,\r\n    \"f4\": 0.3514,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0187,\r\n    \"f2\": 0.3651,\r\n    \"f3\": 0.049,\r\n    \"f4\": -0.328,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0075,\r\n    \"f2\": -0.3926,\r\n    \"f3\": -0.1016,\r\n    \"f4\": 0.4797,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0243,\r\n    \"f2\": 0.432,\r\n    \"f3\": 0.0461,\r\n    \"f4\": -0.4745,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0281,\r\n    \"f2\": -0.396,\r\n    \"f3\": -0.1122,\r\n    \"f4\": 0.389,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0128,\r\n    \"f2\": 0.3896,\r\n    \"f3\": -0.028,\r\n    \"f4\": -0.4314,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0178,\r\n    \"f2\": -0.461,\r\n    \"f3\": 0.0218,\r\n    \"f4\": 0.4791,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0397,\r\n    \"f2\": 0.4244,\r\n    \"f3\": -0.1035,\r\n    \"f4\": -0.392,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0011,\r\n    \"f2\": -0.4085,\r\n    \"f3\": 0.0352,\r\n    \"f4\": 0.3803,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.031,\r\n    \"f2\": 0.4027,\r\n    \"f3\": -0.1946,\r\n    \"f4\": -0.4976,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0386,\r\n    \"f2\": -0.3889,\r\n    \"f3\": 0.1513,\r\n    \"f4\": 0.4284,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1711,\r\n    \"f2\": 0.4384,\r\n    \"f3\": -0.1716,\r\n    \"f4\": -0.4539,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1716,\r\n    \"f2\": -0.3778,\r\n    \"f3\": 0.1544,\r\n    \"f4\": 0.3073,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0374,\r\n    \"f2\": 0.4192,\r\n    \"f3\": -0.2226,\r\n    \"f4\": -0.4033,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1472,\r\n    \"f2\": -0.3868,\r\n    \"f3\": 0.208,\r\n    \"f4\": 0.3704,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1079,\r\n    \"f2\": 0.3901,\r\n    \"f3\": -0.2831,\r\n    \"f4\": -0.3434,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1742,\r\n    \"f2\": -0.4119,\r\n    \"f3\": 0.2812,\r\n    \"f4\": 0.3178,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.2022,\r\n    \"f2\": 0.3644,\r\n    \"f3\": -0.308,\r\n    \"f4\": -0.2989,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1761,\r\n    \"f2\": -0.4354,\r\n    \"f3\": 0.3356,\r\n    \"f4\": 0.1526,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1865,\r\n    \"f2\": 0.4157,\r\n    \"f3\": -0.3302,\r\n    \"f4\": -0.2155,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1871,\r\n    \"f2\": -0.3853,\r\n    \"f3\": 0.3702,\r\n    \"f4\": 0.2164,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.2338,\r\n    \"f2\": 0.3801,\r\n    \"f3\": -0.3329,\r\n    \"f4\": -0.2834,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.2425,\r\n    \"f2\": -0.3657,\r\n    \"f3\": 0.3655,\r\n    \"f4\": 0.2105,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.3062,\r\n    \"f2\": 0.3838,\r\n    \"f3\": -0.4021,\r\n    \"f4\": -0.106,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.2666,\r\n    \"f2\": -0.3706,\r\n    \"f3\": 0.4294,\r\n    \"f4\": 0.1401,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.23,\r\n    \"f2\": 0.4049,\r\n    \"f3\": -0.4995,\r\n    \"f4\": -0.1255,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.3176,\r\n    \"f2\": -0.3221,\r\n    \"f3\": 0.4623,\r\n    \"f4\": 0.1463,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.2704,\r\n    \"f2\": 0.2862,\r\n    \"f3\": -0.4699,\r\n    \"f4\": -0.0534,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.3153,\r\n    \"f2\": -0.2794,\r\n    \"f3\": 0.4914,\r\n    \"f4\": 0.01,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.3832,\r\n    \"f2\": 0.3519,\r\n    \"f3\": -0.4051,\r\n    \"f4\": -0.0116,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.2821,\r\n    \"f2\": -0.3114,\r\n    \"f3\": 0.4124,\r\n    \"f4\": 0.0625,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4303,\r\n    \"f2\": 0.2742,\r\n    \"f3\": -0.4243,\r\n    \"f4\": 0.0198,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.2566,\r\n    \"f2\": -0.3081,\r\n    \"f3\": 0.4618,\r\n    \"f4\": -0.0313,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.3475,\r\n    \"f2\": 0.2863,\r\n    \"f3\": -0.4023,\r\n    \"f4\": 0.1116,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.3986,\r\n    \"f2\": -0.3263,\r\n    \"f3\": 0.4754,\r\n    \"f4\": -0.1044,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4141,\r\n    \"f2\": 0.2706,\r\n    \"f3\": -0.4954,\r\n    \"f4\": 0.0998,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.3884,\r\n    \"f2\": -0.2997,\r\n    \"f3\": 0.4533,\r\n    \"f4\": -0.1821,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.3915,\r\n    \"f2\": 0.3205,\r\n    \"f3\": -0.3574,\r\n    \"f4\": 0.2278,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.4439,\r\n    \"f2\": -0.2763,\r\n    \"f3\": 0.4191,\r\n    \"f4\": -0.2424,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4579,\r\n    \"f2\": 0.244,\r\n    \"f3\": -0.4428,\r\n    \"f4\": 0.2576,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.422,\r\n    \"f2\": -0.2272,\r\n    \"f3\": 0.368,\r\n    \"f4\": -0.3011,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4429,\r\n    \"f2\": 0.2526,\r\n    \"f3\": -0.3632,\r\n    \"f4\": 0.2997,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.4237,\r\n    \"f2\": -0.1056,\r\n    \"f3\": 0.3555,\r\n    \"f4\": -0.3996,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4617,\r\n    \"f2\": 0.1742,\r\n    \"f3\": -0.3394,\r\n    \"f4\": 0.3669,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.4815,\r\n    \"f2\": -0.1422,\r\n    \"f3\": 0.371,\r\n    \"f4\": -0.2745,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4241,\r\n    \"f2\": 0.1184,\r\n    \"f3\": -0.2962,\r\n    \"f4\": 0.4187,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.45,\r\n    \"f2\": -0.1242,\r\n    \"f3\": 0.2884,\r\n    \"f4\": -0.4287,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.5065,\r\n    \"f2\": 0.1265,\r\n    \"f3\": -0.2682,\r\n    \"f4\": 0.4403,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.5119,\r\n    \"f2\": -0.0891,\r\n    \"f3\": 0.1992,\r\n    \"f4\": -0.3685,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4439,\r\n    \"f2\": 0.1428,\r\n    \"f3\": -0.1771,\r\n    \"f4\": 0.4597,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.5155,\r\n    \"f2\": -0.0588,\r\n    \"f3\": 0.1701,\r\n    \"f4\": -0.4952,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4868,\r\n    \"f2\": 0.0944,\r\n    \"f3\": -0.1469,\r\n    \"f4\": 0.4761,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.5362,\r\n    \"f2\": -0.0742,\r\n    \"f3\": 0.0236,\r\n    \"f4\": -0.4931,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4828,\r\n    \"f2\": 0.0004,\r\n    \"f3\": -0.0511,\r\n    \"f4\": 0.5582,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.5149,\r\n    \"f2\": -0.0723,\r\n    \"f3\": -0.0701,\r\n    \"f4\": -0.4582,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.448,\r\n    \"f2\": 0.0351,\r\n    \"f3\": 0.1059,\r\n    \"f4\": 0.4914,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.5057,\r\n    \"f2\": -0.0244,\r\n    \"f3\": -0.0587,\r\n    \"f4\": -0.599,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.5114,\r\n    \"f2\": -0.0205,\r\n    \"f3\": 0.0217,\r\n    \"f4\": 0.5626,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.491,\r\n    \"f2\": 0.0582,\r\n    \"f3\": -0.1315,\r\n    \"f4\": -0.5318,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.5248,\r\n    \"f2\": -0.0666,\r\n    \"f3\": 0.1988,\r\n    \"f4\": 0.4134,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.422,\r\n    \"f2\": 0.0935,\r\n    \"f3\": -0.1356,\r\n    \"f4\": -0.5239,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4282,\r\n    \"f2\": -0.1217,\r\n    \"f3\": 0.2347,\r\n    \"f4\": 0.4589,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.4915,\r\n    \"f2\": 0.1383,\r\n    \"f3\": -0.3024,\r\n    \"f4\": -0.4873,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4722,\r\n    \"f2\": -0.1998,\r\n    \"f3\": 0.305,\r\n    \"f4\": 0.4084,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.4444,\r\n    \"f2\": 0.059,\r\n    \"f3\": -0.2992,\r\n    \"f4\": -0.4414,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.5601,\r\n    \"f2\": -0.2286,\r\n    \"f3\": 0.2695,\r\n    \"f4\": 0.3311,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.4504,\r\n    \"f2\": 0.1299,\r\n    \"f3\": -0.32,\r\n    \"f4\": -0.3926,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.5034,\r\n    \"f2\": -0.1415,\r\n    \"f3\": 0.3684,\r\n    \"f4\": 0.3605,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.4618,\r\n    \"f2\": 0.2526,\r\n    \"f3\": -0.3783,\r\n    \"f4\": -0.4011,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4859,\r\n    \"f2\": -0.2042,\r\n    \"f3\": 0.442,\r\n    \"f4\": 0.2453,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.5165,\r\n    \"f2\": 0.2221,\r\n    \"f3\": -0.4689,\r\n    \"f4\": -0.2621,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4064,\r\n    \"f2\": -0.2667,\r\n    \"f3\": 0.4347,\r\n    \"f4\": 0.2047,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.4047,\r\n    \"f2\": 0.2427,\r\n    \"f3\": -0.4655,\r\n    \"f4\": -0.2871,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4504,\r\n    \"f2\": -0.3406,\r\n    \"f3\": 0.5352,\r\n    \"f4\": 0.1743,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.3637,\r\n    \"f2\": 0.3037,\r\n    \"f3\": -0.3978,\r\n    \"f4\": -0.154,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4693,\r\n    \"f2\": -0.2971,\r\n    \"f3\": 0.4661,\r\n    \"f4\": 0.1188,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.4117,\r\n    \"f2\": 0.2998,\r\n    \"f3\": -0.5245,\r\n    \"f4\": -0.1837,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4178,\r\n    \"f2\": -0.3317,\r\n    \"f3\": 0.5404,\r\n    \"f4\": 0.0204,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.4307,\r\n    \"f2\": 0.3488,\r\n    \"f3\": -0.5634,\r\n    \"f4\": -0.0616,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.3803,\r\n    \"f2\": -0.351,\r\n    \"f3\": 0.5633,\r\n    \"f4\": 0.0505,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.3767,\r\n    \"f2\": 0.3875,\r\n    \"f3\": -0.5691,\r\n    \"f4\": 0.0578,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.3631,\r\n    \"f2\": -0.3715,\r\n    \"f3\": 0.5139,\r\n    \"f4\": -0.0654,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.3992,\r\n    \"f2\": 0.4681,\r\n    \"f3\": -0.4949,\r\n    \"f4\": 0.1006,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.3135,\r\n    \"f2\": -0.4258,\r\n    \"f3\": 0.5313,\r\n    \"f4\": -0.1697,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.338,\r\n    \"f2\": 0.4025,\r\n    \"f3\": -0.5213,\r\n    \"f4\": 0.1073,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.2276,\r\n    \"f2\": -0.3548,\r\n    \"f3\": 0.569,\r\n    \"f4\": -0.1961,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.2476,\r\n    \"f2\": 0.4552,\r\n    \"f3\": -0.5126,\r\n    \"f4\": 0.1942,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.2709,\r\n    \"f2\": -0.4687,\r\n    \"f3\": 0.5063,\r\n    \"f4\": -0.2735,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.2718,\r\n    \"f2\": 0.3815,\r\n    \"f3\": -0.4458,\r\n    \"f4\": 0.2783,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1632,\r\n    \"f2\": -0.4787,\r\n    \"f3\": 0.4927,\r\n    \"f4\": -0.3298,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.2787,\r\n    \"f2\": 0.5321,\r\n    \"f3\": -0.4087,\r\n    \"f4\": 0.3566,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1598,\r\n    \"f2\": -0.5367,\r\n    \"f3\": 0.3952,\r\n    \"f4\": -0.386,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1944,\r\n    \"f2\": 0.5475,\r\n    \"f3\": -0.4457,\r\n    \"f4\": 0.3476,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1613,\r\n    \"f2\": -0.5397,\r\n    \"f3\": 0.3855,\r\n    \"f4\": -0.4641,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1547,\r\n    \"f2\": 0.5272,\r\n    \"f3\": -0.3043,\r\n    \"f4\": 0.3817,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0972,\r\n    \"f2\": -0.5955,\r\n    \"f3\": 0.2985,\r\n    \"f4\": -0.4333,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0996,\r\n    \"f2\": 0.5997,\r\n    \"f3\": -0.2156,\r\n    \"f4\": 0.5509,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1393,\r\n    \"f2\": -0.5449,\r\n    \"f3\": 0.2428,\r\n    \"f4\": -0.4652,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0878,\r\n    \"f2\": 0.6296,\r\n    \"f3\": -0.1984,\r\n    \"f4\": 0.5473,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0929,\r\n    \"f2\": -0.534,\r\n    \"f3\": 0.1726,\r\n    \"f4\": -0.5825,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0927,\r\n    \"f2\": 0.5926,\r\n    \"f3\": -0.1231,\r\n    \"f4\": 0.5395,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.075,\r\n    \"f2\": -0.5458,\r\n    \"f3\": 0.118,\r\n    \"f4\": -0.5513,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0445,\r\n    \"f2\": 0.5528,\r\n    \"f3\": -0.1149,\r\n    \"f4\": 0.5201,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0328,\r\n    \"f2\": -0.6366,\r\n    \"f3\": 0.0095,\r\n    \"f4\": -0.5705,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0625,\r\n    \"f2\": 0.6249,\r\n    \"f3\": -0.0022,\r\n    \"f4\": 0.5712,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0398,\r\n    \"f2\": -0.6214,\r\n    \"f3\": -0.0647,\r\n    \"f4\": -0.4972,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0148,\r\n    \"f2\": 0.5805,\r\n    \"f3\": 0.0657,\r\n    \"f4\": 0.5515,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0367,\r\n    \"f2\": -0.6532,\r\n    \"f3\": -0.1551,\r\n    \"f4\": -0.5909,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1248,\r\n    \"f2\": 0.5653,\r\n    \"f3\": 0.1297,\r\n    \"f4\": 0.5959,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.1252,\r\n    \"f2\": -0.6046,\r\n    \"f3\": -0.2155,\r\n    \"f4\": -0.5294,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0426,\r\n    \"f2\": 0.5569,\r\n    \"f3\": 0.162,\r\n    \"f4\": 0.5884,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0652,\r\n    \"f2\": -0.6093,\r\n    \"f3\": -0.2287,\r\n    \"f4\": -0.5597,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1232,\r\n    \"f2\": 0.6385,\r\n    \"f3\": 0.2714,\r\n    \"f4\": 0.5406,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.1884,\r\n    \"f2\": -0.5907,\r\n    \"f3\": -0.3064,\r\n    \"f4\": -0.5224,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1632,\r\n    \"f2\": 0.597,\r\n    \"f3\": 0.3093,\r\n    \"f4\": 0.5092,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.156,\r\n    \"f2\": -0.5475,\r\n    \"f3\": -0.3661,\r\n    \"f4\": -0.4546,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.213,\r\n    \"f2\": 0.5694,\r\n    \"f3\": 0.4036,\r\n    \"f4\": 0.4589,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.2784,\r\n    \"f2\": -0.4897,\r\n    \"f3\": -0.3297,\r\n    \"f4\": -0.4733,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2611,\r\n    \"f2\": 0.5706,\r\n    \"f3\": 0.4386,\r\n    \"f4\": 0.3829,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3303,\r\n    \"f2\": -0.5713,\r\n    \"f3\": -0.5862,\r\n    \"f4\": -0.3235,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2801,\r\n    \"f2\": 0.5619,\r\n    \"f3\": 0.5039,\r\n    \"f4\": 0.3304,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3358,\r\n    \"f2\": -0.5293,\r\n    \"f3\": -0.5811,\r\n    \"f4\": -0.2219,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.288,\r\n    \"f2\": 0.5656,\r\n    \"f3\": 0.5338,\r\n    \"f4\": 0.3063,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3725,\r\n    \"f2\": -0.4569,\r\n    \"f3\": -0.5864,\r\n    \"f4\": -0.2271,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.3154,\r\n    \"f2\": 0.521,\r\n    \"f3\": 0.5469,\r\n    \"f4\": 0.1339,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3624,\r\n    \"f2\": -0.5319,\r\n    \"f3\": -0.676,\r\n    \"f4\": -0.0919,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2822,\r\n    \"f2\": 0.4698,\r\n    \"f3\": 0.5772,\r\n    \"f4\": 0.1092,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.4051,\r\n    \"f2\": -0.4422,\r\n    \"f3\": -0.5995,\r\n    \"f4\": -0.0779,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.3905,\r\n    \"f2\": 0.3918,\r\n    \"f3\": 0.5318,\r\n    \"f4\": 0.0471,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.4652,\r\n    \"f2\": -0.4691,\r\n    \"f3\": -0.6069,\r\n    \"f4\": 0.052,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.4942,\r\n    \"f2\": 0.4187,\r\n    \"f3\": 0.6633,\r\n    \"f4\": 0.0533,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.4852,\r\n    \"f2\": -0.4527,\r\n    \"f3\": -0.6117,\r\n    \"f4\": 0.112,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.4478,\r\n    \"f2\": 0.3488,\r\n    \"f3\": 0.5784,\r\n    \"f4\": -0.0343,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.4423,\r\n    \"f2\": -0.3569,\r\n    \"f3\": -0.6436,\r\n    \"f4\": 0.1401,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.5014,\r\n    \"f2\": 0.3668,\r\n    \"f3\": 0.6418,\r\n    \"f4\": -0.1313,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.4993,\r\n    \"f2\": -0.2822,\r\n    \"f3\": -0.598,\r\n    \"f4\": 0.2758,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.5165,\r\n    \"f2\": 0.3514,\r\n    \"f3\": 0.6056,\r\n    \"f4\": -0.1924,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.5376,\r\n    \"f2\": -0.3238,\r\n    \"f3\": -0.5907,\r\n    \"f4\": 0.3794,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.5516,\r\n    \"f2\": 0.3699,\r\n    \"f3\": 0.536,\r\n    \"f4\": -0.3222,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.5844,\r\n    \"f2\": -0.2266,\r\n    \"f3\": -0.5038,\r\n    \"f4\": 0.3586,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.5816,\r\n    \"f2\": 0.3191,\r\n    \"f3\": 0.4717,\r\n    \"f4\": -0.4199,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.5587,\r\n    \"f2\": -0.3046,\r\n    \"f3\": -0.3695,\r\n    \"f4\": 0.4587,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.5545,\r\n    \"f2\": 0.2364,\r\n    \"f3\": 0.4873,\r\n    \"f4\": -0.4669,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.5982,\r\n    \"f2\": -0.1614,\r\n    \"f3\": -0.4031,\r\n    \"f4\": 0.4738,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.5839,\r\n    \"f2\": 0.2215,\r\n    \"f3\": 0.4123,\r\n    \"f4\": -0.5182,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.5971,\r\n    \"f2\": -0.2063,\r\n    \"f3\": -0.3342,\r\n    \"f4\": 0.5525,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.6316,\r\n    \"f2\": 0.2698,\r\n    \"f3\": 0.3587,\r\n    \"f4\": -0.5398,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.5689,\r\n    \"f2\": -0.1222,\r\n    \"f3\": -0.3285,\r\n    \"f4\": 0.5884,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.6368,\r\n    \"f2\": 0.1232,\r\n    \"f3\": 0.2652,\r\n    \"f4\": -0.5929,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.5828,\r\n    \"f2\": -0.1193,\r\n    \"f3\": -0.1963,\r\n    \"f4\": 0.5648,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.6602,\r\n    \"f2\": 0.0394,\r\n    \"f3\": 0.1533,\r\n    \"f4\": -0.6462,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.7246,\r\n    \"f2\": 0.0079,\r\n    \"f3\": -0.1185,\r\n    \"f4\": 0.6129,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.6704,\r\n    \"f2\": 0.1261,\r\n    \"f3\": 0.042,\r\n    \"f4\": -0.5577,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.7056,\r\n    \"f2\": 0.0279,\r\n    \"f3\": -0.0304,\r\n    \"f4\": 0.5957,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.6579,\r\n    \"f2\": -0.0062,\r\n    \"f3\": 0.0581,\r\n    \"f4\": -0.6155,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.6689,\r\n    \"f2\": 0.033,\r\n    \"f3\": 0.0271,\r\n    \"f4\": 0.5888,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.6157,\r\n    \"f2\": -0.0099,\r\n    \"f3\": -0.0796,\r\n    \"f4\": -0.6804,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.7418,\r\n    \"f2\": 0.0438,\r\n    \"f3\": 0.133,\r\n    \"f4\": 0.6877,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.6962,\r\n    \"f2\": -0.0708,\r\n    \"f3\": -0.1342,\r\n    \"f4\": -0.7155,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.6955,\r\n    \"f2\": 0.0919,\r\n    \"f3\": 0.2097,\r\n    \"f4\": 0.6173,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.6298,\r\n    \"f2\": -0.1038,\r\n    \"f3\": -0.2386,\r\n    \"f4\": -0.6433,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.6598,\r\n    \"f2\": 0.1808,\r\n    \"f3\": 0.3564,\r\n    \"f4\": 0.5954,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.6221,\r\n    \"f2\": -0.2323,\r\n    \"f3\": -0.2619,\r\n    \"f4\": -0.5913,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.5973,\r\n    \"f2\": 0.2022,\r\n    \"f3\": 0.3792,\r\n    \"f4\": 0.6211,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.7072,\r\n    \"f2\": -0.1868,\r\n    \"f3\": -0.3685,\r\n    \"f4\": -0.568,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.642,\r\n    \"f2\": 0.2769,\r\n    \"f3\": 0.4488,\r\n    \"f4\": 0.5886,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.6286,\r\n    \"f2\": -0.206,\r\n    \"f3\": -0.4952,\r\n    \"f4\": -0.4725,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.6968,\r\n    \"f2\": 0.3033,\r\n    \"f3\": 0.572,\r\n    \"f4\": 0.4722,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.667,\r\n    \"f2\": -0.2502,\r\n    \"f3\": -0.5301,\r\n    \"f4\": -0.4343,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.5427,\r\n    \"f2\": 0.345,\r\n    \"f3\": 0.5865,\r\n    \"f4\": 0.3958,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.6737,\r\n    \"f2\": -0.2822,\r\n    \"f3\": -0.4841,\r\n    \"f4\": -0.3299,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.5532,\r\n    \"f2\": 0.3639,\r\n    \"f3\": 0.633,\r\n    \"f4\": 0.3564,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.6019,\r\n    \"f2\": -0.414,\r\n    \"f3\": -0.6231,\r\n    \"f4\": -0.3843,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.5819,\r\n    \"f2\": 0.3962,\r\n    \"f3\": 0.6847,\r\n    \"f4\": 0.231,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.6176,\r\n    \"f2\": -0.3656,\r\n    \"f3\": -0.6546,\r\n    \"f4\": -0.2736,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.6159,\r\n    \"f2\": 0.3799,\r\n    \"f3\": 0.7773,\r\n    \"f4\": 0.1182,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.5194,\r\n    \"f2\": -0.4389,\r\n    \"f3\": -0.6448,\r\n    \"f4\": -0.1688,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.5226,\r\n    \"f2\": 0.4553,\r\n    \"f3\": 0.7151,\r\n    \"f4\": 0.077,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.5223,\r\n    \"f2\": -0.46,\r\n    \"f3\": -0.6597,\r\n    \"f4\": -0.0726,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.4818,\r\n    \"f2\": 0.555,\r\n    \"f3\": 0.6818,\r\n    \"f4\": -0.0134,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.4865,\r\n    \"f2\": -0.4936,\r\n    \"f3\": -0.7212,\r\n    \"f4\": -0.0298,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.5069,\r\n    \"f2\": 0.5123,\r\n    \"f3\": 0.6918,\r\n    \"f4\": -0.1804,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.4408,\r\n    \"f2\": -0.5078,\r\n    \"f3\": -0.6758,\r\n    \"f4\": 0.0779,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.4844,\r\n    \"f2\": 0.5838,\r\n    \"f3\": 0.6688,\r\n    \"f4\": -0.1965,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.4862,\r\n    \"f2\": -0.5525,\r\n    \"f3\": -0.6823,\r\n    \"f4\": 0.2035,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.4749,\r\n    \"f2\": 0.5212,\r\n    \"f3\": 0.6591,\r\n    \"f4\": -0.287,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.3685,\r\n    \"f2\": -0.5111,\r\n    \"f3\": -0.6798,\r\n    \"f4\": 0.2661,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3774,\r\n    \"f2\": 0.6847,\r\n    \"f3\": 0.6908,\r\n    \"f4\": -0.3091,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.391,\r\n    \"f2\": -0.6129,\r\n    \"f3\": -0.5803,\r\n    \"f4\": 0.3885,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3519,\r\n    \"f2\": 0.6513,\r\n    \"f3\": 0.6012,\r\n    \"f4\": -0.4722,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.3394,\r\n    \"f2\": -0.6874,\r\n    \"f3\": -0.5732,\r\n    \"f4\": 0.4845,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.2737,\r\n    \"f2\": 0.7466,\r\n    \"f3\": 0.5106,\r\n    \"f4\": -0.5433,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2799,\r\n    \"f2\": -0.6459,\r\n    \"f3\": -0.5667,\r\n    \"f4\": 0.5518,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.1834,\r\n    \"f2\": 0.6888,\r\n    \"f3\": 0.4496,\r\n    \"f4\": -0.6334,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2253,\r\n    \"f2\": -0.6838,\r\n    \"f3\": -0.4299,\r\n    \"f4\": 0.6258,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.28,\r\n    \"f2\": 0.7167,\r\n    \"f3\": 0.4672,\r\n    \"f4\": -0.6035,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2168,\r\n    \"f2\": -0.7613,\r\n    \"f3\": -0.4184,\r\n    \"f4\": 0.644,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.1205,\r\n    \"f2\": 0.7952,\r\n    \"f3\": 0.2606,\r\n    \"f4\": -0.7265,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1221,\r\n    \"f2\": -0.6726,\r\n    \"f3\": -0.3365,\r\n    \"f4\": 0.6672,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.1281,\r\n    \"f2\": 0.7661,\r\n    \"f3\": 0.2279,\r\n    \"f4\": -0.7094,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1125,\r\n    \"f2\": -0.7345,\r\n    \"f3\": -0.2468,\r\n    \"f4\": 0.7492,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0124,\r\n    \"f2\": 0.6767,\r\n    \"f3\": 0.1058,\r\n    \"f4\": -0.6949,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0547,\r\n    \"f2\": -0.7574,\r\n    \"f3\": -0.1237,\r\n    \"f4\": 0.7379,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0532,\r\n    \"f2\": 0.6983,\r\n    \"f3\": -0.013,\r\n    \"f4\": -0.7095,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0451,\r\n    \"f2\": -0.7594,\r\n    \"f3\": -0.0472,\r\n    \"f4\": 0.7573,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.0085,\r\n    \"f2\": 0.6937,\r\n    \"f3\": -0.1461,\r\n    \"f4\": -0.8081,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0489,\r\n    \"f2\": -0.7267,\r\n    \"f3\": 0.0644,\r\n    \"f4\": 0.7692,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.073,\r\n    \"f2\": 0.7513,\r\n    \"f3\": -0.1118,\r\n    \"f4\": -0.7478,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0466,\r\n    \"f2\": -0.7731,\r\n    \"f3\": 0.0893,\r\n    \"f4\": 0.7561,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1399,\r\n    \"f2\": 0.7667,\r\n    \"f3\": -0.2603,\r\n    \"f4\": -0.7354,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.134,\r\n    \"f2\": -0.724,\r\n    \"f3\": 0.1932,\r\n    \"f4\": 0.7529,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.212,\r\n    \"f2\": 0.7574,\r\n    \"f3\": -0.3251,\r\n    \"f4\": -0.7056,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1803,\r\n    \"f2\": -0.813,\r\n    \"f3\": 0.3207,\r\n    \"f4\": 0.7251,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.2505,\r\n    \"f2\": 0.6789,\r\n    \"f3\": -0.4338,\r\n    \"f4\": -0.5972,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.202,\r\n    \"f2\": -0.7813,\r\n    \"f3\": 0.4702,\r\n    \"f4\": 0.6499,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.2756,\r\n    \"f2\": 0.7467,\r\n    \"f3\": -0.54,\r\n    \"f4\": -0.5225,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.2423,\r\n    \"f2\": -0.7421,\r\n    \"f3\": 0.4442,\r\n    \"f4\": 0.6352,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.31,\r\n    \"f2\": 0.7215,\r\n    \"f3\": -0.4966,\r\n    \"f4\": -0.497,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.2818,\r\n    \"f2\": -0.707,\r\n    \"f3\": 0.5869,\r\n    \"f4\": 0.5287,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.3954,\r\n    \"f2\": 0.6634,\r\n    \"f3\": -0.6203,\r\n    \"f4\": -0.4039,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.3069,\r\n    \"f2\": -0.723,\r\n    \"f3\": 0.6994,\r\n    \"f4\": 0.4422,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.3787,\r\n    \"f2\": 0.6198,\r\n    \"f3\": -0.684,\r\n    \"f4\": -0.2723,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.3464,\r\n    \"f2\": -0.6362,\r\n    \"f3\": 0.6464,\r\n    \"f4\": 0.3369,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4072,\r\n    \"f2\": 0.5856,\r\n    \"f3\": -0.7387,\r\n    \"f4\": -0.2,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.51,\r\n    \"f2\": -0.6373,\r\n    \"f3\": 0.7106,\r\n    \"f4\": 0.2593,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.5692,\r\n    \"f2\": 0.6162,\r\n    \"f3\": -0.7984,\r\n    \"f4\": -0.129,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.5554,\r\n    \"f2\": -0.6268,\r\n    \"f3\": 0.759,\r\n    \"f4\": 0.2081,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.5966,\r\n    \"f2\": 0.5574,\r\n    \"f3\": -0.8369,\r\n    \"f4\": -0.0253,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.5373,\r\n    \"f2\": -0.5719,\r\n    \"f3\": 0.7956,\r\n    \"f4\": 0.0579,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.5168,\r\n    \"f2\": 0.6357,\r\n    \"f3\": -0.8515,\r\n    \"f4\": 0.0626,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.5928,\r\n    \"f2\": -0.5162,\r\n    \"f3\": 0.7565,\r\n    \"f4\": -0.0594,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.5673,\r\n    \"f2\": 0.4131,\r\n    \"f3\": -0.8219,\r\n    \"f4\": 0.1052,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.6862,\r\n    \"f2\": -0.5229,\r\n    \"f3\": 0.7712,\r\n    \"f4\": -0.1119,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.6764,\r\n    \"f2\": 0.4772,\r\n    \"f3\": -0.7399,\r\n    \"f4\": 0.2778,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.5821,\r\n    \"f2\": -0.4637,\r\n    \"f3\": 0.8486,\r\n    \"f4\": -0.166,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.7019,\r\n    \"f2\": 0.4267,\r\n    \"f3\": -0.6761,\r\n    \"f4\": 0.3351,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.7339,\r\n    \"f2\": -0.4037,\r\n    \"f3\": 0.7608,\r\n    \"f4\": -0.3279,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.6853,\r\n    \"f2\": 0.466,\r\n    \"f3\": -0.6499,\r\n    \"f4\": 0.3742,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.6752,\r\n    \"f2\": -0.3936,\r\n    \"f3\": 0.6443,\r\n    \"f4\": -0.4687,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.7023,\r\n    \"f2\": 0.361,\r\n    \"f3\": -0.5756,\r\n    \"f4\": 0.4781,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.744,\r\n    \"f2\": -0.3253,\r\n    \"f3\": 0.6242,\r\n    \"f4\": -0.5851,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.8002,\r\n    \"f2\": 0.3342,\r\n    \"f3\": -0.5481,\r\n    \"f4\": 0.5762,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.7154,\r\n    \"f2\": -0.3528,\r\n    \"f3\": 0.4709,\r\n    \"f4\": -0.5643,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.8233,\r\n    \"f2\": 0.2278,\r\n    \"f3\": -0.4047,\r\n    \"f4\": 0.6395,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.6918,\r\n    \"f2\": -0.3389,\r\n    \"f3\": 0.4595,\r\n    \"f4\": -0.6115,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.7869,\r\n    \"f2\": 0.2366,\r\n    \"f3\": -0.4595,\r\n    \"f4\": 0.6751,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.8249,\r\n    \"f2\": -0.2727,\r\n    \"f3\": 0.4197,\r\n    \"f4\": -0.7605,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.858,\r\n    \"f2\": 0.1192,\r\n    \"f3\": -0.3111,\r\n    \"f4\": 0.8372,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.7807,\r\n    \"f2\": -0.1427,\r\n    \"f3\": 0.3004,\r\n    \"f4\": -0.7058,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.7657,\r\n    \"f2\": 0.1785,\r\n    \"f3\": -0.2487,\r\n    \"f4\": 0.7132,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.8179,\r\n    \"f2\": -0.0139,\r\n    \"f3\": 0.2316,\r\n    \"f4\": -0.8032,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.8755,\r\n    \"f2\": 0.0672,\r\n    \"f3\": -0.1342,\r\n    \"f4\": 0.8078,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.8797,\r\n    \"f2\": -0.0929,\r\n    \"f3\": 0.0981,\r\n    \"f4\": -0.8522,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.8196,\r\n    \"f2\": -0.0062,\r\n    \"f3\": -0.0817,\r\n    \"f4\": 0.8627,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.7477,\r\n    \"f2\": -0.0384,\r\n    \"f3\": -0.0055,\r\n    \"f4\": -0.8662,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.7777,\r\n    \"f2\": -0.1069,\r\n    \"f3\": 0.0706,\r\n    \"f4\": 0.8118,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.7904,\r\n    \"f2\": 0.0471,\r\n    \"f3\": -0.0606,\r\n    \"f4\": -0.8108,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.8029,\r\n    \"f2\": -0.0855,\r\n    \"f3\": 0.2296,\r\n    \"f4\": 0.8427,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.755,\r\n    \"f2\": 0.0863,\r\n    \"f3\": -0.2636,\r\n    \"f4\": -0.87,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.8413,\r\n    \"f2\": -0.0939,\r\n    \"f3\": 0.2491,\r\n    \"f4\": 0.7472,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.9095,\r\n    \"f2\": 0.1684,\r\n    \"f3\": -0.2795,\r\n    \"f4\": -0.7847,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.8333,\r\n    \"f2\": -0.1565,\r\n    \"f3\": 0.4361,\r\n    \"f4\": 0.7433,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.8548,\r\n    \"f2\": 0.2608,\r\n    \"f3\": -0.42,\r\n    \"f4\": -0.7636,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.8492,\r\n    \"f2\": -0.2795,\r\n    \"f3\": 0.4557,\r\n    \"f4\": 0.6625,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.8827,\r\n    \"f2\": 0.2788,\r\n    \"f3\": -0.5033,\r\n    \"f4\": -0.7309,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.7626,\r\n    \"f2\": -0.3152,\r\n    \"f3\": 0.5869,\r\n    \"f4\": 0.565,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.8575,\r\n    \"f2\": 0.3011,\r\n    \"f3\": -0.5519,\r\n    \"f4\": -0.5656,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.7961,\r\n    \"f2\": -0.3982,\r\n    \"f3\": 0.6207,\r\n    \"f4\": 0.4391,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.8915,\r\n    \"f2\": 0.4662,\r\n    \"f3\": -0.7041,\r\n    \"f4\": -0.5551,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.7579,\r\n    \"f2\": -0.4196,\r\n    \"f3\": 0.7101,\r\n    \"f4\": 0.4524,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.7305,\r\n    \"f2\": 0.3943,\r\n    \"f3\": -0.7167,\r\n    \"f4\": -0.4216,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.7249,\r\n    \"f2\": -0.5327,\r\n    \"f3\": 0.8139,\r\n    \"f4\": 0.3685,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.672,\r\n    \"f2\": 0.4807,\r\n    \"f3\": -0.8123,\r\n    \"f4\": -0.3764,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.78,\r\n    \"f2\": -0.497,\r\n    \"f3\": 0.7458,\r\n    \"f4\": 0.3192,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.7673,\r\n    \"f2\": 0.4959,\r\n    \"f3\": -0.7302,\r\n    \"f4\": -0.3415,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.687,\r\n    \"f2\": -0.5867,\r\n    \"f3\": 0.8655,\r\n    \"f4\": 0.1286,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.6345,\r\n    \"f2\": 0.5237,\r\n    \"f3\": -0.8757,\r\n    \"f4\": -0.2317,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.6445,\r\n    \"f2\": -0.4969,\r\n    \"f3\": 0.9652,\r\n    \"f4\": 0.0297,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.6579,\r\n    \"f2\": 0.6292,\r\n    \"f3\": -0.8803,\r\n    \"f4\": -0.0631,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.6642,\r\n    \"f2\": -0.6893,\r\n    \"f3\": 0.8962,\r\n    \"f4\": -0.0822,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.6477,\r\n    \"f2\": 0.6764,\r\n    \"f3\": -0.8383,\r\n    \"f4\": 0.0585,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.5902,\r\n    \"f2\": -0.6772,\r\n    \"f3\": 0.8838,\r\n    \"f4\": -0.1616,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.5114,\r\n    \"f2\": 0.6333,\r\n    \"f3\": -0.9168,\r\n    \"f4\": 0.1472,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.5492,\r\n    \"f2\": -0.6934,\r\n    \"f3\": 0.8006,\r\n    \"f4\": -0.2605,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.6077,\r\n    \"f2\": 0.7419,\r\n    \"f3\": -0.8202,\r\n    \"f4\": 0.2522,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.5166,\r\n    \"f2\": -0.7421,\r\n    \"f3\": 0.8188,\r\n    \"f4\": -0.356,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.4567,\r\n    \"f2\": 0.7427,\r\n    \"f3\": -0.8302,\r\n    \"f4\": 0.364,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.4929,\r\n    \"f2\": -0.7615,\r\n    \"f3\": 0.823,\r\n    \"f4\": -0.4661,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.3451,\r\n    \"f2\": 0.7698,\r\n    \"f3\": -0.732,\r\n    \"f4\": 0.4123,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.3708,\r\n    \"f2\": -0.8322,\r\n    \"f3\": 0.5865,\r\n    \"f4\": -0.6405,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.4594,\r\n    \"f2\": 0.7913,\r\n    \"f3\": -0.6992,\r\n    \"f4\": 0.6255,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.3526,\r\n    \"f2\": -0.7299,\r\n    \"f3\": 0.6824,\r\n    \"f4\": -0.644,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.329,\r\n    \"f2\": 0.96,\r\n    \"f3\": -0.6219,\r\n    \"f4\": 0.6952,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.3255,\r\n    \"f2\": -0.837,\r\n    \"f3\": 0.5755,\r\n    \"f4\": -0.7186,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.2549,\r\n    \"f2\": 0.9315,\r\n    \"f3\": -0.5264,\r\n    \"f4\": 0.7337,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1999,\r\n    \"f2\": -0.827,\r\n    \"f3\": 0.4939,\r\n    \"f4\": -0.7636,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1885,\r\n    \"f2\": 0.8096,\r\n    \"f3\": -0.4853,\r\n    \"f4\": 0.7815,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.2153,\r\n    \"f2\": -0.8982,\r\n    \"f3\": 0.3064,\r\n    \"f4\": -0.8542,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.1501,\r\n    \"f2\": 0.8852,\r\n    \"f3\": -0.3062,\r\n    \"f4\": 0.817,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.1212,\r\n    \"f2\": -0.9344,\r\n    \"f3\": 0.1938,\r\n    \"f4\": -0.8839,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0883,\r\n    \"f2\": 0.8875,\r\n    \"f3\": -0.2704,\r\n    \"f4\": 0.8071,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": -0.078,\r\n    \"f2\": -0.9772,\r\n    \"f3\": 0.1468,\r\n    \"f4\": -0.9155,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0161,\r\n    \"f2\": 0.9857,\r\n    \"f3\": -0.0891,\r\n    \"f4\": 0.9792,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0202,\r\n    \"f2\": -0.9219,\r\n    \"f3\": 0.0628,\r\n    \"f4\": -0.9225,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": 0.0012,\r\n    \"f2\": 0.8951,\r\n    \"f3\": -0.066,\r\n    \"f4\": 0.9383,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0378,\r\n    \"f2\": -0.9338,\r\n    \"f3\": -0.0959,\r\n    \"f4\": -0.8549,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.0745,\r\n    \"f2\": 0.9316,\r\n    \"f3\": 0.0263,\r\n    \"f4\": 0.89,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.0745,\r\n    \"f2\": -0.8662,\r\n    \"f3\": -0.2521,\r\n    \"f4\": -0.9215,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1601,\r\n    \"f2\": 0.9244,\r\n    \"f3\": 0.2359,\r\n    \"f4\": 0.9369,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.1113,\r\n    \"f2\": -0.8502,\r\n    \"f3\": -0.3037,\r\n    \"f4\": -0.84,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.1289,\r\n    \"f2\": 0.9092,\r\n    \"f3\": 0.2434,\r\n    \"f4\": 0.851,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.2384,\r\n    \"f2\": -0.8912,\r\n    \"f3\": -0.4434,\r\n    \"f4\": -0.8647,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2083,\r\n    \"f2\": 0.9427,\r\n    \"f3\": 0.5104,\r\n    \"f4\": 0.8542,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3005,\r\n    \"f2\": -0.8781,\r\n    \"f3\": -0.5532,\r\n    \"f4\": -0.7929,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.2794,\r\n    \"f2\": 0.805,\r\n    \"f3\": 0.5526,\r\n    \"f4\": 0.7755,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.2885,\r\n    \"f2\": -0.7936,\r\n    \"f3\": -0.6233,\r\n    \"f4\": -0.6715,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.3226,\r\n    \"f2\": 0.913,\r\n    \"f3\": 0.61,\r\n    \"f4\": 0.6857,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.3685,\r\n    \"f2\": -0.9032,\r\n    \"f3\": -0.8025,\r\n    \"f4\": -0.6732,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.3851,\r\n    \"f2\": 0.8807,\r\n    \"f3\": 0.7468,\r\n    \"f4\": 0.6485,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.4651,\r\n    \"f2\": -0.8545,\r\n    \"f3\": -0.8481,\r\n    \"f4\": -0.5505,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.4493,\r\n    \"f2\": 0.8176,\r\n    \"f3\": 0.71,\r\n    \"f4\": 0.4618,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.4649,\r\n    \"f2\": -0.724,\r\n    \"f3\": -0.8264,\r\n    \"f4\": -0.4744,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.4918,\r\n    \"f2\": 0.8214,\r\n    \"f3\": 0.8359,\r\n    \"f4\": 0.3825,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.5286,\r\n    \"f2\": -0.8349,\r\n    \"f3\": -0.8921,\r\n    \"f4\": -0.2952,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.5098,\r\n    \"f2\": 0.7514,\r\n    \"f3\": 0.9492,\r\n    \"f4\": 0.3308,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.5549,\r\n    \"f2\": -0.7451,\r\n    \"f3\": -0.8797,\r\n    \"f4\": -0.146,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.5803,\r\n    \"f2\": 0.7421,\r\n    \"f3\": 0.9006,\r\n    \"f4\": 0.1749,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.6831,\r\n    \"f2\": -0.6394,\r\n    \"f3\": -0.9795,\r\n    \"f4\": -0.0326,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.7436,\r\n    \"f2\": 0.7053,\r\n    \"f3\": 0.9217,\r\n    \"f4\": 0.0946,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.6842,\r\n    \"f2\": -0.6833,\r\n    \"f3\": -0.9714,\r\n    \"f4\": 0.0175,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.7048,\r\n    \"f2\": 0.6351,\r\n    \"f3\": 0.9768,\r\n    \"f4\": -0.0792,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.7722,\r\n    \"f2\": -0.7109,\r\n    \"f3\": -0.964,\r\n    \"f4\": 0.1617,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.7921,\r\n    \"f2\": 0.6625,\r\n    \"f3\": 0.9609,\r\n    \"f4\": -0.2352,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.7875,\r\n    \"f2\": -0.539,\r\n    \"f3\": -0.9038,\r\n    \"f4\": 0.2916,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.7696,\r\n    \"f2\": 0.5842,\r\n    \"f3\": 0.8899,\r\n    \"f4\": -0.2934,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.881,\r\n    \"f2\": -0.5445,\r\n    \"f3\": -0.9139,\r\n    \"f4\": 0.4227,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.7162,\r\n    \"f2\": 0.514,\r\n    \"f3\": 0.921,\r\n    \"f4\": -0.3387,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.7834,\r\n    \"f2\": -0.523,\r\n    \"f3\": -0.8009,\r\n    \"f4\": 0.5131,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.8117,\r\n    \"f2\": 0.488,\r\n    \"f3\": 0.8445,\r\n    \"f4\": -0.5716,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.9569,\r\n    \"f2\": -0.4132,\r\n    \"f3\": -0.7615,\r\n    \"f4\": 0.599,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.9157,\r\n    \"f2\": 0.441,\r\n    \"f3\": 0.8235,\r\n    \"f4\": -0.6571,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.93,\r\n    \"f2\": -0.3891,\r\n    \"f3\": -0.6423,\r\n    \"f4\": 0.6881,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.8445,\r\n    \"f2\": 0.4251,\r\n    \"f3\": 0.5873,\r\n    \"f4\": -0.6841,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.8979,\r\n    \"f2\": -0.317,\r\n    \"f3\": -0.6222,\r\n    \"f4\": 0.8376,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.9355,\r\n    \"f2\": 0.2205,\r\n    \"f3\": 0.5965,\r\n    \"f4\": -0.8734,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.8854,\r\n    \"f2\": -0.2265,\r\n    \"f3\": -0.524,\r\n    \"f4\": 0.9149,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.9475,\r\n    \"f2\": 0.2706,\r\n    \"f3\": 0.5041,\r\n    \"f4\": -0.9089,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.9644,\r\n    \"f2\": -0.1977,\r\n    \"f3\": -0.3747,\r\n    \"f4\": 0.8949,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.9608,\r\n    \"f2\": 0.1518,\r\n    \"f3\": 0.3703,\r\n    \"f4\": -0.9403,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.9905,\r\n    \"f2\": -0.1339,\r\n    \"f3\": -0.25,\r\n    \"f4\": 0.9289,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -0.9811,\r\n    \"f2\": 0.1617,\r\n    \"f3\": 0.221,\r\n    \"f4\": -0.9002,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 0.9708,\r\n    \"f2\": -0.0555,\r\n    \"f3\": -0.1919,\r\n    \"f4\": 0.9458,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -1.0326,\r\n    \"f2\": -0.0324,\r\n    \"f3\": 0.2273,\r\n    \"f4\": -0.9779,\r\n    \"label\": \"spiral_B\"\r\n  },\r\n  {\r\n    \"f1\": 1.0271,\r\n    \"f2\": 0.0064,\r\n    \"f3\": 0.0238,\r\n    \"f4\": 0.9834,\r\n    \"label\": \"spiral_A\"\r\n  },\r\n  {\r\n    \"f1\": -1.0322,\r\n    \"f2\": 0.0547,\r\n    \"f3\": 0.0505,\r\n    \"f4\": -1.0499,\r\n    \"label\": \"spiral_B\"\r\n  }\r\n]\r\n\r\nexport default spiralData;","export default function ascending(a, b) {\r\n  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\r\n}\r\n","export default function descending(a, b) {\r\n  return a == null || b == null ? NaN\r\n    : b < a ? -1\r\n    : b > a ? 1\r\n    : b >= a ? 0\r\n    : NaN;\r\n}\r\n","import ascending from \"./ascending.js\";\r\nimport descending from \"./descending.js\";\r\n\r\nexport default function bisector(f) {\r\n  let compare1, compare2, delta;\r\n\r\n  // If an accessor is specified, promote it to a comparator. In this case we\r\n  // can test whether the search value is (self-) comparable. We can’t do this\r\n  // for a comparator (except for specific, known comparators) because we can’t\r\n  // tell if the comparator is symmetric, and an asymmetric comparator can’t be\r\n  // used to test whether a single value is comparable.\r\n  if (f.length !== 2) {\r\n    compare1 = ascending;\r\n    compare2 = (d, x) => ascending(f(d), x);\r\n    delta = (d, x) => f(d) - x;\r\n  } else {\r\n    compare1 = f === ascending || f === descending ? f : zero;\r\n    compare2 = f;\r\n    delta = f;\r\n  }\r\n\r\n  function left(a, x, lo = 0, hi = a.length) {\r\n    if (lo < hi) {\r\n      if (compare1(x, x) !== 0) return hi;\r\n      do {\r\n        const mid = (lo + hi) >>> 1;\r\n        if (compare2(a[mid], x) < 0) lo = mid + 1;\r\n        else hi = mid;\r\n      } while (lo < hi);\r\n    }\r\n    return lo;\r\n  }\r\n\r\n  function right(a, x, lo = 0, hi = a.length) {\r\n    if (lo < hi) {\r\n      if (compare1(x, x) !== 0) return hi;\r\n      do {\r\n        const mid = (lo + hi) >>> 1;\r\n        if (compare2(a[mid], x) <= 0) lo = mid + 1;\r\n        else hi = mid;\r\n      } while (lo < hi);\r\n    }\r\n    return lo;\r\n  }\r\n\r\n  function center(a, x, lo = 0, hi = a.length) {\r\n    const i = left(a, x, lo, hi - 1);\r\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\r\n  }\r\n\r\n  return {left, center, right};\r\n}\r\n\r\nfunction zero() {\r\n  return 0;\r\n}\r\n","export default function number(x) {\r\n  return x === null ? NaN : +x;\r\n}\r\n\r\nexport function* numbers(values, valueof) {\r\n  if (valueof === undefined) {\r\n    for (let value of values) {\r\n      if (value != null && (value = +value) >= value) {\r\n        yield value;\r\n      }\r\n    }\r\n  } else {\r\n    let index = -1;\r\n    for (let value of values) {\r\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\r\n        yield value;\r\n      }\r\n    }\r\n  }\r\n}\r\n","import ascending from \"./ascending.js\";\r\nimport bisector from \"./bisector.js\";\r\nimport number from \"./number.js\";\r\n\r\nconst ascendingBisect = bisector(ascending);\r\nexport const bisectRight = ascendingBisect.right;\r\nexport const bisectLeft = ascendingBisect.left;\r\nexport const bisectCenter = bisector(number).center;\r\nexport default bisectRight;\r\n","export function blur(values, r) {\r\n  if (!((r = +r) >= 0)) throw new RangeError(\"invalid r\");\r\n  let length = values.length;\r\n  if (!((length = Math.floor(length)) >= 0)) throw new RangeError(\"invalid length\");\r\n  if (!length || !r) return values;\r\n  const blur = blurf(r);\r\n  const temp = values.slice();\r\n  blur(values, temp, 0, length, 1);\r\n  blur(temp, values, 0, length, 1);\r\n  blur(values, temp, 0, length, 1);\r\n  return values;\r\n}\r\n\r\nexport const blur2 = Blur2(blurf);\r\n\r\nexport const blurImage = Blur2(blurfImage);\r\n\r\nfunction Blur2(blur) {\r\n  return function(data, rx, ry = rx) {\r\n    if (!((rx = +rx) >= 0)) throw new RangeError(\"invalid rx\");\r\n    if (!((ry = +ry) >= 0)) throw new RangeError(\"invalid ry\");\r\n    let {data: values, width, height} = data;\r\n    if (!((width = Math.floor(width)) >= 0)) throw new RangeError(\"invalid width\");\r\n    if (!((height = Math.floor(height !== undefined ? height : values.length / width)) >= 0)) throw new RangeError(\"invalid height\");\r\n    if (!width || !height || (!rx && !ry)) return data;\r\n    const blurx = rx && blur(rx);\r\n    const blury = ry && blur(ry);\r\n    const temp = values.slice();\r\n    if (blurx && blury) {\r\n      blurh(blurx, temp, values, width, height);\r\n      blurh(blurx, values, temp, width, height);\r\n      blurh(blurx, temp, values, width, height);\r\n      blurv(blury, values, temp, width, height);\r\n      blurv(blury, temp, values, width, height);\r\n      blurv(blury, values, temp, width, height);\r\n    } else if (blurx) {\r\n      blurh(blurx, values, temp, width, height);\r\n      blurh(blurx, temp, values, width, height);\r\n      blurh(blurx, values, temp, width, height);\r\n    } else if (blury) {\r\n      blurv(blury, values, temp, width, height);\r\n      blurv(blury, temp, values, width, height);\r\n      blurv(blury, values, temp, width, height);\r\n    }\r\n    return data;\r\n  };\r\n}\r\n\r\nfunction blurh(blur, T, S, w, h) {\r\n  for (let y = 0, n = w * h; y < n;) {\r\n    blur(T, S, y, y += w, 1);\r\n  }\r\n}\r\n\r\nfunction blurv(blur, T, S, w, h) {\r\n  for (let x = 0, n = w * h; x < w; ++x) {\r\n    blur(T, S, x, x + n, w);\r\n  }\r\n}\r\n\r\nfunction blurfImage(radius) {\r\n  const blur = blurf(radius);\r\n  return (T, S, start, stop, step) => {\r\n    start <<= 2, stop <<= 2, step <<= 2;\r\n    blur(T, S, start + 0, stop + 0, step);\r\n    blur(T, S, start + 1, stop + 1, step);\r\n    blur(T, S, start + 2, stop + 2, step);\r\n    blur(T, S, start + 3, stop + 3, step);\r\n  };\r\n}\r\n\r\n// Given a target array T, a source array S, sets each value T[i] to the average\r\n// of {S[i - r], …, S[i], …, S[i + r]}, where r = ⌊radius⌋, start <= i < stop,\r\n// for each i, i + step, i + 2 * step, etc., and where S[j] is clamped between\r\n// S[start] (inclusive) and S[stop] (exclusive). If the given radius is not an\r\n// integer, S[i - r - 1] and S[i + r + 1] are added to the sum, each weighted\r\n// according to r - ⌊radius⌋.\r\nfunction blurf(radius) {\r\n  const radius0 = Math.floor(radius);\r\n  if (radius0 === radius) return bluri(radius);\r\n  const t = radius - radius0;\r\n  const w = 2 * radius + 1;\r\n  return (T, S, start, stop, step) => { // stop must be aligned!\r\n    if (!((stop -= step) >= start)) return; // inclusive stop\r\n    let sum = radius0 * S[start];\r\n    const s0 = step * radius0;\r\n    const s1 = s0 + step;\r\n    for (let i = start, j = start + s0; i < j; i += step) {\r\n      sum += S[Math.min(stop, i)];\r\n    }\r\n    for (let i = start, j = stop; i <= j; i += step) {\r\n      sum += S[Math.min(stop, i + s0)];\r\n      T[i] = (sum + t * (S[Math.max(start, i - s1)] + S[Math.min(stop, i + s1)])) / w;\r\n      sum -= S[Math.max(start, i - s0)];\r\n    }\r\n  };\r\n}\r\n\r\n// Like blurf, but optimized for integer radius.\r\nfunction bluri(radius) {\r\n  const w = 2 * radius + 1;\r\n  return (T, S, start, stop, step) => { // stop must be aligned!\r\n    if (!((stop -= step) >= start)) return; // inclusive stop\r\n    let sum = radius * S[start];\r\n    const s = step * radius;\r\n    for (let i = start, j = start + s; i < j; i += step) {\r\n      sum += S[Math.min(stop, i)];\r\n    }\r\n    for (let i = start, j = stop; i <= j; i += step) {\r\n      sum += S[Math.min(stop, i + s)];\r\n      T[i] = sum / w;\r\n      sum -= S[Math.max(start, i - s)];\r\n    }\r\n  };\r\n}\r\n","export default function count(values, valueof) {\r\n  let count = 0;\r\n  if (valueof === undefined) {\r\n    for (let value of values) {\r\n      if (value != null && (value = +value) >= value) {\r\n        ++count;\r\n      }\r\n    }\r\n  } else {\r\n    let index = -1;\r\n    for (let value of values) {\r\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\r\n        ++count;\r\n      }\r\n    }\r\n  }\r\n  return count;\r\n}\r\n","function length(array) {\r\n  return array.length | 0;\r\n}\r\n\r\nfunction empty(length) {\r\n  return !(length > 0);\r\n}\r\n\r\nfunction arrayify(values) {\r\n  return typeof values !== \"object\" || \"length\" in values ? values : Array.from(values);\r\n}\r\n\r\nfunction reducer(reduce) {\r\n  return values => reduce(...values);\r\n}\r\n\r\nexport default function cross(...values) {\r\n  const reduce = typeof values[values.length - 1] === \"function\" && reducer(values.pop());\r\n  values = values.map(arrayify);\r\n  const lengths = values.map(length);\r\n  const j = values.length - 1;\r\n  const index = new Array(j + 1).fill(0);\r\n  const product = [];\r\n  if (j < 0 || lengths.some(empty)) return product;\r\n  while (true) {\r\n    product.push(index.map((j, i) => values[i][j]));\r\n    let i = j;\r\n    while (++index[i] === lengths[i]) {\r\n      if (i === 0) return reduce ? product.map(reduce) : product;\r\n      index[i--] = 0;\r\n    }\r\n  }\r\n}\r\n","export default function variance(values, valueof) {\r\n  let count = 0;\r\n  let delta;\r\n  let mean = 0;\r\n  let sum = 0;\r\n  if (valueof === undefined) {\r\n    for (let value of values) {\r\n      if (value != null && (value = +value) >= value) {\r\n        delta = value - mean;\r\n        mean += delta / ++count;\r\n        sum += delta * (value - mean);\r\n      }\r\n    }\r\n  } else {\r\n    let index = -1;\r\n    for (let value of values) {\r\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\r\n        delta = value - mean;\r\n        mean += delta / ++count;\r\n        sum += delta * (value - mean);\r\n      }\r\n    }\r\n  }\r\n  if (count > 1) return sum / (count - 1);\r\n}\r\n","import variance from \"./variance.js\";\r\n\r\nexport default function deviation(values, valueof) {\r\n  const v = variance(values, valueof);\r\n  return v ? Math.sqrt(v) : v;\r\n}\r\n","export default function extent(values, valueof) {\r\n  let min;\r\n  let max;\r\n  if (valueof === undefined) {\r\n    for (const value of values) {\r\n      if (value != null) {\r\n        if (min === undefined) {\r\n          if (value >= value) min = max = value;\r\n        } else {\r\n          if (min > value) min = value;\r\n          if (max < value) max = value;\r\n        }\r\n      }\r\n    }\r\n  } else {\r\n    let index = -1;\r\n    for (let value of values) {\r\n      if ((value = valueof(value, ++index, values)) != null) {\r\n        if (min === undefined) {\r\n          if (value >= value) min = max = value;\r\n        } else {\r\n          if (min > value) min = value;\r\n          if (max < value) max = value;\r\n        }\r\n      }\r\n    }\r\n  }\r\n  return [min, max];\r\n}\r\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\r\nexport class Adder {\r\n  constructor() {\r\n    this._partials = new Float64Array(32);\r\n    this._n = 0;\r\n  }\r\n  add(x) {\r\n    const p = this._partials;\r\n    let i = 0;\r\n    for (let j = 0; j < this._n && j < 32; j++) {\r\n      const y = p[j],\r\n        hi = x + y,\r\n        lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\r\n      if (lo) p[i++] = lo;\r\n      x = hi;\r\n    }\r\n    p[i] = x;\r\n    this._n = i + 1;\r\n    return this;\r\n  }\r\n  valueOf() {\r\n    const p = this._partials;\r\n    let n = this._n, x, y, lo, hi = 0;\r\n    if (n > 0) {\r\n      hi = p[--n];\r\n      while (n > 0) {\r\n        x = hi;\r\n        y = p[--n];\r\n        hi = x + y;\r\n        lo = y - (hi - x);\r\n        if (lo) break;\r\n      }\r\n      if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\r\n        y = lo * 2;\r\n        x = hi + y;\r\n        if (y == x - hi) hi = x;\r\n      }\r\n    }\r\n    return hi;\r\n  }\r\n}\r\n\r\nexport function fsum(values, valueof) {\r\n  const adder = new Adder();\r\n  if (valueof === undefined) {\r\n    for (let value of values) {\r\n      if (value = +value) {\r\n        adder.add(value);\r\n      }\r\n    }\r\n  } else {\r\n    let index = -1;\r\n    for (let value of values) {\r\n      if (value = +valueof(value, ++index, values)) {\r\n        adder.add(value);\r\n      }\r\n    }\r\n  }\r\n  return +adder;\r\n}\r\n\r\nexport function fcumsum(values, valueof) {\r\n  const adder = new Adder();\r\n  let index = -1;\r\n  return Float64Array.from(values, valueof === undefined\r\n      ? v => adder.add(+v || 0)\r\n      : v => adder.add(+valueof(v, ++index, values) || 0)\r\n  );\r\n}\r\n","export class InternMap extends Map {\r\n  constructor(entries, key = keyof) {\r\n    super();\r\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\r\n    if (entries != null) for (const [key, value] of entries) this.set(key, value);\r\n  }\r\n  get(key) {\r\n    return super.get(intern_get(this, key));\r\n  }\r\n  has(key) {\r\n    return super.has(intern_get(this, key));\r\n  }\r\n  set(key, value) {\r\n    return super.set(intern_set(this, key), value);\r\n  }\r\n  delete(key) {\r\n    return super.delete(intern_delete(this, key));\r\n  }\r\n}\r\n\r\nexport class InternSet extends Set {\r\n  constructor(values, key = keyof) {\r\n    super();\r\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\r\n    if (values != null) for (const value of values) this.add(value);\r\n  }\r\n  has(value) {\r\n    return super.has(intern_get(this, value));\r\n  }\r\n  add(value) {\r\n    return super.add(intern_set(this, value));\r\n  }\r\n  delete(value) {\r\n    return super.delete(intern_delete(this, value));\r\n  }\r\n}\r\n\r\nfunction intern_get({_intern, _key}, value) {\r\n  const key = _key(value);\r\n  return _intern.has(key) ? _intern.get(key) : value;\r\n}\r\n\r\nfunction intern_set({_intern, _key}, value) {\r\n  const key = _key(value);\r\n  if (_intern.has(key)) return _intern.get(key);\r\n  _intern.set(key, value);\r\n  return value;\r\n}\r\n\r\nfunction intern_delete({_intern, _key}, value) {\r\n  const key = _key(value);\r\n  if (_intern.has(key)) {\r\n    value = _intern.get(key);\r\n    _intern.delete(key);\r\n  }\r\n  return value;\r\n}\r\n\r\nfunction keyof(value) {\r\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\r\n}\r\n","export default function identity(x) {\r\n  return x;\r\n}\r\n","import {InternMap} from \"internmap\";\r\nimport identity from \"./identity.js\";\r\n\r\nexport default function group(values, ...keys) {\r\n  return nest(values, identity, identity, keys);\r\n}\r\n\r\nexport function groups(values, ...keys) {\r\n  return nest(values, Array.from, identity, keys);\r\n}\r\n\r\nfunction flatten(groups, keys) {\r\n  for (let i = 1, n = keys.length; i < n; ++i) {\r\n    groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value]));\r\n  }\r\n  return groups;\r\n}\r\n\r\nexport function flatGroup(values, ...keys) {\r\n  return flatten(groups(values, ...keys), keys);\r\n}\r\n\r\nexport function flatRollup(values, reduce, ...keys) {\r\n  return flatten(rollups(values, reduce, ...keys), keys);\r\n}\r\n\r\nexport function rollup(values, reduce, ...keys) {\r\n  return nest(values, identity, reduce, keys);\r\n}\r\n\r\nexport function rollups(values, reduce, ...keys) {\r\n  return nest(values, Array.from, reduce, keys);\r\n}\r\n\r\nexport function index(values, ...keys) {\r\n  return nest(values, identity, unique, keys);\r\n}\r\n\r\nexport function indexes(values, ...keys) {\r\n  return nest(values, Array.from, unique, keys);\r\n}\r\n\r\nfunction unique(values) {\r\n  if (values.length !== 1) throw new Error(\"duplicate key\");\r\n  return values[0];\r\n}\r\n\r\nfunction nest(values, map, reduce, keys) {\r\n  return (function regroup(values, i) {\r\n    if (i >= keys.length) return reduce(values);\r\n    const groups = new InternMap();\r\n    const keyof = keys[i++];\r\n    let index = -1;\r\n    for (const value of values) {\r\n      const key = keyof(value, ++index, values);\r\n      const group = groups.get(key);\r\n      if (group) group.push(value);\r\n      else groups.set(key, [value]);\r\n    }\r\n    for (const [key, values] of groups) {\r\n      groups.set(key, regroup(values, i));\r\n    }\r\n    return map(groups);\r\n  })(values, 0);\r\n}\r\n","export default function permute(source, keys) {\r\n  return Array.from(keys, key => source[key]);\r\n}\r\n","import ascending from \"./ascending.js\";\r\nimport permute from \"./permute.js\";\r\n\r\nexport default function sort(values, ...F) {\r\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\r\n  values = Array.from(values);\r\n  let [f] = F;\r\n  if ((f && f.length !== 2) || F.length > 1) {\r\n    const index = Uint32Array.from(values, (d, i) => i);\r\n    if (F.length > 1) {\r\n      F = F.map(f => values.map(f));\r\n      index.sort((i, j) => {\r\n        for (const f of F) {\r\n          const c = ascendingDefined(f[i], f[j]);\r\n          if (c) return c;\r\n        }\r\n      });\r\n    } else {\r\n      f = values.map(f);\r\n      index.sort((i, j) => ascendingDefined(f[i], f[j]));\r\n    }\r\n    return permute(values, index);\r\n  }\r\n  return values.sort(compareDefined(f));\r\n}\r\n\r\nexport function compareDefined(compare = ascending) {\r\n  if (compare === ascending) return ascendingDefined;\r\n  if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\r\n  return (a, b) => {\r\n    const x = compare(a, b);\r\n    if (x || x === 0) return x;\r\n    return (compare(b, b) === 0) - (compare(a, a) === 0);\r\n  };\r\n}\r\n\r\nexport function ascendingDefined(a, b) {\r\n  return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\r\n}\r\n","var array = Array.prototype;\r\n\r\nexport var slice = array.slice;\r\nexport var map = array.map;\r\n","export default function constant(x) {\r\n  return () => x;\r\n}\r\n","const e10 = Math.sqrt(50),\r\n    e5 = Math.sqrt(10),\r\n    e2 = Math.sqrt(2);\r\n\r\nfunction tickSpec(start, stop, count) {\r\n  const step = (stop - start) / Math.max(0, count),\r\n      power = Math.floor(Math.log10(step)),\r\n      error = step / Math.pow(10, power),\r\n      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\r\n  let i1, i2, inc;\r\n  if (power < 0) {\r\n    inc = Math.pow(10, -power) / factor;\r\n    i1 = Math.round(start * inc);\r\n    i2 = Math.round(stop * inc);\r\n    if (i1 / inc < start) ++i1;\r\n    if (i2 / inc > stop) --i2;\r\n    inc = -inc;\r\n  } else {\r\n    inc = Math.pow(10, power) * factor;\r\n    i1 = Math.round(start / inc);\r\n    i2 = Math.round(stop / inc);\r\n    if (i1 * inc < start) ++i1;\r\n    if (i2 * inc > stop) --i2;\r\n  }\r\n  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\r\n  return [i1, i2, inc];\r\n}\r\n\r\nexport default function ticks(start, stop, count) {\r\n  stop = +stop, start = +start, count = +count;\r\n  if (!(count > 0)) return [];\r\n  if (start === stop) return [start];\r\n  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\r\n  if (!(i2 >= i1)) return [];\r\n  const n = i2 - i1 + 1, ticks = new Array(n);\r\n  if (reverse) {\r\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\r\n    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\r\n  } else {\r\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\r\n    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\r\n  }\r\n  return ticks;\r\n}\r\n\r\nexport function tickIncrement(start, stop, count) {\r\n  stop = +stop, start = +start, count = +count;\r\n  return tickSpec(start, stop, count)[2];\r\n}\r\n\r\nexport function tickStep(start, stop, count) {\r\n  stop = +stop, start = +start, count = +count;\r\n  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\r\n  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\r\n}\r\n","import {tickIncrement} from \"./ticks.js\";\r\n\r\nexport default function nice(start, stop, count) {\r\n  let prestep;\r\n  while (true) {\r\n    const step = tickIncrement(start, stop, count);\r\n    if (step === prestep || step === 0 || !isFinite(step)) {\r\n      return [start, stop];\r\n    } else if (step > 0) {\r\n      start = Math.floor(start / step) * step;\r\n      stop = Math.ceil(stop / step) * step;\r\n    } else if (step < 0) {\r\n      start = Math.ceil(start * step) / step;\r\n      stop = Math.floor(stop * step) / step;\r\n    }\r\n    prestep = step;\r\n  }\r\n}\r\n","import count from \"../count.js\";\r\n\r\nexport default function thresholdSturges(values) {\r\n  return Math.max(1, Math.ceil(Math.log(count(values)) / Math.LN2) + 1);\r\n}\r\n","import {slice} from \"./array.js\";\r\nimport bisect from \"./bisect.js\";\r\nimport constant from \"./constant.js\";\r\nimport extent from \"./extent.js\";\r\nimport identity from \"./identity.js\";\r\nimport nice from \"./nice.js\";\r\nimport ticks, {tickIncrement} from \"./ticks.js\";\r\nimport sturges from \"./threshold/sturges.js\";\r\n\r\nexport default function bin() {\r\n  var value = identity,\r\n      domain = extent,\r\n      threshold = sturges;\r\n\r\n  function histogram(data) {\r\n    if (!Array.isArray(data)) data = Array.from(data);\r\n\r\n    var i,\r\n        n = data.length,\r\n        x,\r\n        step,\r\n        values = new Array(n);\r\n\r\n    for (i = 0; i < n; ++i) {\r\n      values[i] = value(data[i], i, data);\r\n    }\r\n\r\n    var xz = domain(values),\r\n        x0 = xz[0],\r\n        x1 = xz[1],\r\n        tz = threshold(values, x0, x1);\r\n\r\n    // Convert number of thresholds into uniform thresholds, and nice the\r\n    // default domain accordingly.\r\n    if (!Array.isArray(tz)) {\r\n      const max = x1, tn = +tz;\r\n      if (domain === extent) [x0, x1] = nice(x0, x1, tn);\r\n      tz = ticks(x0, x1, tn);\r\n\r\n      // If the domain is aligned with the first tick (which it will by\r\n      // default), then we can use quantization rather than bisection to bin\r\n      // values, which is substantially faster.\r\n      if (tz[0] <= x0) step = tickIncrement(x0, x1, tn);\r\n\r\n      // If the last threshold is coincident with the domain’s upper bound, the\r\n      // last bin will be zero-width. If the default domain is used, and this\r\n      // last threshold is coincident with the maximum input value, we can\r\n      // extend the niced upper bound by one tick to ensure uniform bin widths;\r\n      // otherwise, we simply remove the last threshold. Note that we don’t\r\n      // coerce values or the domain to numbers, and thus must be careful to\r\n      // compare order (>=) rather than strict equality (===)!\r\n      if (tz[tz.length - 1] >= x1) {\r\n        if (max >= x1 && domain === extent) {\r\n          const step = tickIncrement(x0, x1, tn);\r\n          if (isFinite(step)) {\r\n            if (step > 0) {\r\n              x1 = (Math.floor(x1 / step) + 1) * step;\r\n            } else if (step < 0) {\r\n              x1 = (Math.ceil(x1 * -step) + 1) / -step;\r\n            }\r\n          }\r\n        } else {\r\n          tz.pop();\r\n        }\r\n      }\r\n    }\r\n\r\n    // Remove any thresholds outside the domain.\r\n    // Be careful not to mutate an array owned by the user!\r\n    var m = tz.length, a = 0, b = m;\r\n    while (tz[a] <= x0) ++a;\r\n    while (tz[b - 1] > x1) --b;\r\n    if (a || b < m) tz = tz.slice(a, b), m = b - a;\r\n\r\n    var bins = new Array(m + 1),\r\n        bin;\r\n\r\n    // Initialize bins.\r\n    for (i = 0; i <= m; ++i) {\r\n      bin = bins[i] = [];\r\n      bin.x0 = i > 0 ? tz[i - 1] : x0;\r\n      bin.x1 = i < m ? tz[i] : x1;\r\n    }\r\n\r\n    // Assign data to bins by value, ignoring any outside the domain.\r\n    if (isFinite(step)) {\r\n      if (step > 0) {\r\n        for (i = 0; i < n; ++i) {\r\n          if ((x = values[i]) != null && x0 <= x && x <= x1) {\r\n            bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]);\r\n          }\r\n        }\r\n      } else if (step < 0) {\r\n        for (i = 0; i < n; ++i) {\r\n          if ((x = values[i]) != null && x0 <= x && x <= x1) {\r\n            const j = Math.floor((x0 - x) * step);\r\n            bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      for (i = 0; i < n; ++i) {\r\n        if ((x = values[i]) != null && x0 <= x && x <= x1) {\r\n          bins[bisect(tz, x, 0, m)].push(data[i]);\r\n        }\r\n      }\r\n    }\r\n\r\n    return bins;\r\n  }\r\n\r\n  histogram.value = function(_) {\r\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\r\n  };\r\n\r\n  histogram.domain = function(_) {\r\n    return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\r\n  };\r\n\r\n  histogram.thresholds = function(_) {\r\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : constant(Array.isArray(_) ? slice.call(_) : _), histogram) : threshold;\r\n  };\r\n\r\n  return histogram;\r\n}\r\n","export default function max(values, valueof) {\r\n  let max;\r\n  if (valueof === undefined) {\r\n    for (const value of values) {\r\n      if (value != null\r\n          && (max < value || (max === undefined && value >= value))) {\r\n        max = value;\r\n      }\r\n    }\r\n  } else {\r\n    let index = -1;\r\n    for (let value of values) {\r\n      if ((value = valueof(value, ++index, values)) != null\r\n          && (max < value || (max === undefined && value >= value))) {\r\n        max = value;\r\n      }\r\n    }\r\n  }\r\n  return max;\r\n}\r\n","export default function maxIndex(values, valueof) {\r\n  let max;\r\n  let maxIndex = -1;\r\n  let index = -1;\r\n  if (valueof === undefined) {\r\n    for (const value of values) {\r\n      ++index;\r\n      if (value != null\r\n          && (max < value || (max === undefined && value >= value))) {\r\n        max = value, maxIndex = index;\r\n      }\r\n    }\r\n  } else {\r\n    for (let value of values) {\r\n      if ((value = valueof(value, ++index, values)) != null\r\n          && (max < value || (max === undefined && value >= value))) {\r\n        max = value, maxIndex = index;\r\n      }\r\n    }\r\n  }\r\n  return maxIndex;\r\n}\r\n","export default function min(values, valueof) {\r\n  let min;\r\n  if (valueof === undefined) {\r\n    for (const value of values) {\r\n      if (value != null\r\n          && (min > value || (min === undefined && value >= value))) {\r\n        min = value;\r\n      }\r\n    }\r\n  } else {\r\n    let index = -1;\r\n    for (let value of values) {\r\n      if ((value = valueof(value, ++index, values)) != null\r\n          && (min > value || (min === undefined && value >= value))) {\r\n        min = value;\r\n      }\r\n    }\r\n  }\r\n  return min;\r\n}\r\n","export default function minIndex(values, valueof) {\r\n  let min;\r\n  let minIndex = -1;\r\n  let index = -1;\r\n  if (valueof === undefined) {\r\n    for (const value of values) {\r\n      ++index;\r\n      if (value != null\r\n          && (min > value || (min === undefined && value >= value))) {\r\n        min = value, minIndex = index;\r\n      }\r\n    }\r\n  } else {\r\n    for (let value of values) {\r\n      if ((value = valueof(value, ++index, values)) != null\r\n          && (min > value || (min === undefined && value >= value))) {\r\n        min = value, minIndex = index;\r\n      }\r\n    }\r\n  }\r\n  return minIndex;\r\n}\r\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\r\n\r\n// Based on https://github.com/mourner/quickselect\r\n// ISC license, Copyright 2018 Vladimir Agafonkin.\r\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\r\n  k = Math.floor(k);\r\n  left = Math.floor(Math.max(0, left));\r\n  right = Math.floor(Math.min(array.length - 1, right));\r\n\r\n  if (!(left <= k && k <= right)) return array;\r\n\r\n  compare = compare === undefined ? ascendingDefined : compareDefined(compare);\r\n\r\n  while (right > left) {\r\n    if (right - left > 600) {\r\n      const n = right - left + 1;\r\n      const m = k - left + 1;\r\n      const z = Math.log(n);\r\n      const s = 0.5 * Math.exp(2 * z / 3);\r\n      const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\r\n      const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\r\n      const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\r\n      quickselect(array, k, newLeft, newRight, compare);\r\n    }\r\n\r\n    const t = array[k];\r\n    let i = left;\r\n    let j = right;\r\n\r\n    swap(array, left, k);\r\n    if (compare(array[right], t) > 0) swap(array, left, right);\r\n\r\n    while (i < j) {\r\n      swap(array, i, j), ++i, --j;\r\n      while (compare(array[i], t) < 0) ++i;\r\n      while (compare(array[j], t) > 0) --j;\r\n    }\r\n\r\n    if (compare(array[left], t) === 0) swap(array, left, j);\r\n    else ++j, swap(array, j, right);\r\n\r\n    if (j <= k) left = j + 1;\r\n    if (k <= j) right = j - 1;\r\n  }\r\n\r\n  return array;\r\n}\r\n\r\nfunction swap(array, i, j) {\r\n  const t = array[i];\r\n  array[i] = array[j];\r\n  array[j] = t;\r\n}\r\n","import ascending from \"./ascending.js\";\r\n\r\nexport default function greatest(values, compare = ascending) {\r\n  let max;\r\n  let defined = false;\r\n  if (compare.length === 1) {\r\n    let maxValue;\r\n    for (const element of values) {\r\n      const value = compare(element);\r\n      if (defined\r\n          ? ascending(value, maxValue) > 0\r\n          : ascending(value, value) === 0) {\r\n        max = element;\r\n        maxValue = value;\r\n        defined = true;\r\n      }\r\n    }\r\n  } else {\r\n    for (const value of values) {\r\n      if (defined\r\n          ? compare(value, max) > 0\r\n          : compare(value, value) === 0) {\r\n        max = value;\r\n        defined = true;\r\n      }\r\n    }\r\n  }\r\n  return max;\r\n}\r\n","import max from \"./max.js\";\r\nimport maxIndex from \"./maxIndex.js\";\r\nimport min from \"./min.js\";\r\nimport minIndex from \"./minIndex.js\";\r\nimport quickselect from \"./quickselect.js\";\r\nimport number, {numbers} from \"./number.js\";\r\nimport {ascendingDefined} from \"./sort.js\";\r\nimport greatest from \"./greatest.js\";\r\n\r\nexport default function quantile(values, p, valueof) {\r\n  values = Float64Array.from(numbers(values, valueof));\r\n  if (!(n = values.length) || isNaN(p = +p)) return;\r\n  if (p <= 0 || n < 2) return min(values);\r\n  if (p >= 1) return max(values);\r\n  var n,\r\n      i = (n - 1) * p,\r\n      i0 = Math.floor(i),\r\n      value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\r\n      value1 = min(values.subarray(i0 + 1));\r\n  return value0 + (value1 - value0) * (i - i0);\r\n}\r\n\r\nexport function quantileSorted(values, p, valueof = number) {\r\n  if (!(n = values.length) || isNaN(p = +p)) return;\r\n  if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\r\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\r\n  var n,\r\n      i = (n - 1) * p,\r\n      i0 = Math.floor(i),\r\n      value0 = +valueof(values[i0], i0, values),\r\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\r\n  return value0 + (value1 - value0) * (i - i0);\r\n}\r\n\r\nexport function quantileIndex(values, p, valueof = number) {\r\n  if (isNaN(p = +p)) return;\r\n  numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\r\n  if (p <= 0) return minIndex(numbers);\r\n  if (p >= 1) return maxIndex(numbers);\r\n  var numbers,\r\n      index = Uint32Array.from(values, (_, i) => i),\r\n      j = numbers.length - 1,\r\n      i = Math.floor(j * p);\r\n  quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\r\n  i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\r\n  return i >= 0 ? i : -1;\r\n}\r\n","export default function mean(values, valueof) {\r\n  let count = 0;\r\n  let sum = 0;\r\n  if (valueof === undefined) {\r\n    for (let value of values) {\r\n      if (value != null && (value = +value) >= value) {\r\n        ++count, sum += value;\r\n      }\r\n    }\r\n  } else {\r\n    let index = -1;\r\n    for (let value of values) {\r\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\r\n        ++count, sum += value;\r\n      }\r\n    }\r\n  }\r\n  if (count) return sum / count;\r\n}\r\n","function* flatten(arrays) {\r\n  for (const array of arrays) {\r\n    yield* array;\r\n  }\r\n}\r\n\r\nexport default function merge(arrays) {\r\n  return Array.from(flatten(arrays));\r\n}\r\n","export default function pairs(values, pairof = pair) {\r\n  const pairs = [];\r\n  let previous;\r\n  let first = false;\r\n  for (const value of values) {\r\n    if (first) pairs.push(pairof(previous, value));\r\n    previous = value;\r\n    first = true;\r\n  }\r\n  return pairs;\r\n}\r\n\r\nexport function pair(a, b) {\r\n  return [a, b];\r\n}\r\n","export default function range(start, stop, step) {\r\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\r\n\r\n  var i = -1,\r\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\r\n      range = new Array(n);\r\n\r\n  while (++i < n) {\r\n    range[i] = start + i * step;\r\n  }\r\n\r\n  return range;\r\n}\r\n","import ascending from \"./ascending.js\";\r\nimport minIndex from \"./minIndex.js\";\r\n\r\nexport default function leastIndex(values, compare = ascending) {\r\n  if (compare.length === 1) return minIndex(values, compare);\r\n  let minValue;\r\n  let min = -1;\r\n  let index = -1;\r\n  for (const value of values) {\r\n    ++index;\r\n    if (min < 0\r\n        ? compare(value, value) === 0\r\n        : compare(value, minValue) < 0) {\r\n      minValue = value;\r\n      min = index;\r\n    }\r\n  }\r\n  return min;\r\n}\r\n","export default shuffler(Math.random);\r\n\r\nexport function shuffler(random) {\r\n  return function shuffle(array, i0 = 0, i1 = array.length) {\r\n    let m = i1 - (i0 = +i0);\r\n    while (m) {\r\n      const i = random() * m-- | 0, t = array[m + i0];\r\n      array[m + i0] = array[i + i0];\r\n      array[i + i0] = t;\r\n    }\r\n    return array;\r\n  };\r\n}\r\n","import min from \"./min.js\";\r\n\r\nexport default function transpose(matrix) {\r\n  if (!(n = matrix.length)) return [];\r\n  for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\r\n    for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\r\n      row[j] = matrix[j][i];\r\n    }\r\n  }\r\n  return transpose;\r\n}\r\n\r\nfunction length(d) {\r\n  return d.length;\r\n}\r\n","import {InternSet} from \"internmap\";\r\n\r\nexport default function intersection(values, ...others) {\r\n  values = new InternSet(values);\r\n  others = others.map(set);\r\n  out: for (const value of values) {\r\n    for (const other of others) {\r\n      if (!other.has(value)) {\r\n        values.delete(value);\r\n        continue out;\r\n      }\r\n    }\r\n  }\r\n  return values;\r\n}\r\n\r\nfunction set(values) {\r\n  return values instanceof InternSet ? values : new InternSet(values);\r\n}\r\n","export default function superset(values, other) {\r\n  const iterator = values[Symbol.iterator](), set = new Set();\r\n  for (const o of other) {\r\n    const io = intern(o);\r\n    if (set.has(io)) continue;\r\n    let value, done;\r\n    while (({value, done} = iterator.next())) {\r\n      if (done) return false;\r\n      const ivalue = intern(value);\r\n      set.add(ivalue);\r\n      if (Object.is(io, ivalue)) break;\r\n    }\r\n  }\r\n  return true;\r\n}\r\n\r\nfunction intern(value) {\r\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\r\n}\r\n","export default function(x) {\r\n  return x;\r\n}\r\n","import identity from \"./identity.js\";\r\n\r\nvar top = 1,\r\n    right = 2,\r\n    bottom = 3,\r\n    left = 4,\r\n    epsilon = 1e-6;\r\n\r\nfunction translateX(x) {\r\n  return \"translate(\" + x + \",0)\";\r\n}\r\n\r\nfunction translateY(y) {\r\n  return \"translate(0,\" + y + \")\";\r\n}\r\n\r\nfunction number(scale) {\r\n  return d => +scale(d);\r\n}\r\n\r\nfunction center(scale, offset) {\r\n  offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\r\n  if (scale.round()) offset = Math.round(offset);\r\n  return d => +scale(d) + offset;\r\n}\r\n\r\nfunction entering() {\r\n  return !this.__axis;\r\n}\r\n\r\nfunction axis(orient, scale) {\r\n  var tickArguments = [],\r\n      tickValues = null,\r\n      tickFormat = null,\r\n      tickSizeInner = 6,\r\n      tickSizeOuter = 6,\r\n      tickPadding = 3,\r\n      offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\r\n      k = orient === top || orient === left ? -1 : 1,\r\n      x = orient === left || orient === right ? \"x\" : \"y\",\r\n      transform = orient === top || orient === bottom ? translateX : translateY;\r\n\r\n  function axis(context) {\r\n    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\r\n        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\r\n        spacing = Math.max(tickSizeInner, 0) + tickPadding,\r\n        range = scale.range(),\r\n        range0 = +range[0] + offset,\r\n        range1 = +range[range.length - 1] + offset,\r\n        position = (scale.bandwidth ? center : number)(scale.copy(), offset),\r\n        selection = context.selection ? context.selection() : context,\r\n        path = selection.selectAll(\".domain\").data([null]),\r\n        tick = selection.selectAll(\".tick\").data(values, scale).order(),\r\n        tickExit = tick.exit(),\r\n        tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\r\n        line = tick.select(\"line\"),\r\n        text = tick.select(\"text\");\r\n\r\n    path = path.merge(path.enter().insert(\"path\", \".tick\")\r\n        .attr(\"class\", \"domain\")\r\n        .attr(\"stroke\", \"currentColor\"));\r\n\r\n    tick = tick.merge(tickEnter);\r\n\r\n    line = line.merge(tickEnter.append(\"line\")\r\n        .attr(\"stroke\", \"currentColor\")\r\n        .attr(x + \"2\", k * tickSizeInner));\r\n\r\n    text = text.merge(tickEnter.append(\"text\")\r\n        .attr(\"fill\", \"currentColor\")\r\n        .attr(x, k * spacing)\r\n        .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\r\n\r\n    if (context !== selection) {\r\n      path = path.transition(context);\r\n      tick = tick.transition(context);\r\n      line = line.transition(context);\r\n      text = text.transition(context);\r\n\r\n      tickExit = tickExit.transition(context)\r\n          .attr(\"opacity\", epsilon)\r\n          .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\r\n\r\n      tickEnter\r\n          .attr(\"opacity\", epsilon)\r\n          .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\r\n    }\r\n\r\n    tickExit.remove();\r\n\r\n    path\r\n        .attr(\"d\", orient === left || orient === right\r\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\r\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\r\n\r\n    tick\r\n        .attr(\"opacity\", 1)\r\n        .attr(\"transform\", function(d) { return transform(position(d) + offset); });\r\n\r\n    line\r\n        .attr(x + \"2\", k * tickSizeInner);\r\n\r\n    text\r\n        .attr(x, k * spacing)\r\n        .text(format);\r\n\r\n    selection.filter(entering)\r\n        .attr(\"fill\", \"none\")\r\n        .attr(\"font-size\", 10)\r\n        .attr(\"font-family\", \"sans-serif\")\r\n        .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\r\n\r\n    selection\r\n        .each(function() { this.__axis = position; });\r\n  }\r\n\r\n  axis.scale = function(_) {\r\n    return arguments.length ? (scale = _, axis) : scale;\r\n  };\r\n\r\n  axis.ticks = function() {\r\n    return tickArguments = Array.from(arguments), axis;\r\n  };\r\n\r\n  axis.tickArguments = function(_) {\r\n    return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\r\n  };\r\n\r\n  axis.tickValues = function(_) {\r\n    return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\r\n  };\r\n\r\n  axis.tickFormat = function(_) {\r\n    return arguments.length ? (tickFormat = _, axis) : tickFormat;\r\n  };\r\n\r\n  axis.tickSize = function(_) {\r\n    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\r\n  };\r\n\r\n  axis.tickSizeInner = function(_) {\r\n    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\r\n  };\r\n\r\n  axis.tickSizeOuter = function(_) {\r\n    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\r\n  };\r\n\r\n  axis.tickPadding = function(_) {\r\n    return arguments.length ? (tickPadding = +_, axis) : tickPadding;\r\n  };\r\n\r\n  axis.offset = function(_) {\r\n    return arguments.length ? (offset = +_, axis) : offset;\r\n  };\r\n\r\n  return axis;\r\n}\r\n\r\nexport function axisTop(scale) {\r\n  return axis(top, scale);\r\n}\r\n\r\nexport function axisRight(scale) {\r\n  return axis(right, scale);\r\n}\r\n\r\nexport function axisBottom(scale) {\r\n  return axis(bottom, scale);\r\n}\r\n\r\nexport function axisLeft(scale) {\r\n  return axis(left, scale);\r\n}\r\n","var noop = {value: () => {}};\r\n\r\nfunction dispatch() {\r\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\r\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\r\n    _[t] = [];\r\n  }\r\n  return new Dispatch(_);\r\n}\r\n\r\nfunction Dispatch(_) {\r\n  this._ = _;\r\n}\r\n\r\nfunction parseTypenames(typenames, types) {\r\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\r\n    var name = \"\", i = t.indexOf(\".\");\r\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\r\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\r\n    return {type: t, name: name};\r\n  });\r\n}\r\n\r\nDispatch.prototype = dispatch.prototype = {\r\n  constructor: Dispatch,\r\n  on: function(typename, callback) {\r\n    var _ = this._,\r\n        T = parseTypenames(typename + \"\", _),\r\n        t,\r\n        i = -1,\r\n        n = T.length;\r\n\r\n    // If no callback was specified, return the callback of the given type and name.\r\n    if (arguments.length < 2) {\r\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\r\n      return;\r\n    }\r\n\r\n    // If a type was specified, set the callback for the given type and name.\r\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\r\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\r\n    while (++i < n) {\r\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\r\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\r\n    }\r\n\r\n    return this;\r\n  },\r\n  copy: function() {\r\n    var copy = {}, _ = this._;\r\n    for (var t in _) copy[t] = _[t].slice();\r\n    return new Dispatch(copy);\r\n  },\r\n  call: function(type, that) {\r\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\r\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\r\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\r\n  },\r\n  apply: function(type, that, args) {\r\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\r\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\r\n  }\r\n};\r\n\r\nfunction get(type, name) {\r\n  for (var i = 0, n = type.length, c; i < n; ++i) {\r\n    if ((c = type[i]).name === name) {\r\n      return c.value;\r\n    }\r\n  }\r\n}\r\n\r\nfunction set(type, name, callback) {\r\n  for (var i = 0, n = type.length; i < n; ++i) {\r\n    if (type[i].name === name) {\r\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\r\n      break;\r\n    }\r\n  }\r\n  if (callback != null) type.push({name: name, value: callback});\r\n  return type;\r\n}\r\n\r\nexport default dispatch;\r\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\r\n\r\nexport default {\r\n  svg: \"http://www.w3.org/2000/svg\",\r\n  xhtml: xhtml,\r\n  xlink: \"http://www.w3.org/1999/xlink\",\r\n  xml: \"http://www.w3.org/XML/1998/namespace\",\r\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\r\n};\r\n","import namespaces from \"./namespaces.js\";\r\n\r\nexport default function(name) {\r\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\r\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\r\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\r\n}\r\n","import namespace from \"./namespace.js\";\r\nimport {xhtml} from \"./namespaces.js\";\r\n\r\nfunction creatorInherit(name) {\r\n  return function() {\r\n    var document = this.ownerDocument,\r\n        uri = this.namespaceURI;\r\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\r\n        ? document.createElement(name)\r\n        : document.createElementNS(uri, name);\r\n  };\r\n}\r\n\r\nfunction creatorFixed(fullname) {\r\n  return function() {\r\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\r\n  };\r\n}\r\n\r\nexport default function(name) {\r\n  var fullname = namespace(name);\r\n  return (fullname.local\r\n      ? creatorFixed\r\n      : creatorInherit)(fullname);\r\n}\r\n","function none() {}\r\n\r\nexport default function(selector) {\r\n  return selector == null ? none : function() {\r\n    return this.querySelector(selector);\r\n  };\r\n}\r\n","// Given something array like (or null), returns something that is strictly an\r\n// array. This is used to ensure that array-like objects passed to d3.selectAll\r\n// or selection.selectAll are converted into proper arrays when creating a\r\n// selection; we don’t ever want to create a selection backed by a live\r\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\r\n// static NodeList as a group, since it safely derived from querySelectorAll.\r\nexport default function array(x) {\r\n  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\r\n}\r\n","function empty() {\r\n  return [];\r\n}\r\n\r\nexport default function(selector) {\r\n  return selector == null ? empty : function() {\r\n    return this.querySelectorAll(selector);\r\n  };\r\n}\r\n","export default function(selector) {\r\n  return function() {\r\n    return this.matches(selector);\r\n  };\r\n}\r\n\r\nexport function childMatcher(selector) {\r\n  return function(node) {\r\n    return node.matches(selector);\r\n  };\r\n}\r\n\r\n","import {childMatcher} from \"../matcher.js\";\r\n\r\nvar find = Array.prototype.find;\r\n\r\nfunction childFind(match) {\r\n  return function() {\r\n    return find.call(this.children, match);\r\n  };\r\n}\r\n\r\nfunction childFirst() {\r\n  return this.firstElementChild;\r\n}\r\n\r\nexport default function(match) {\r\n  return this.select(match == null ? childFirst\r\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\r\n}\r\n","import {childMatcher} from \"../matcher.js\";\r\n\r\nvar filter = Array.prototype.filter;\r\n\r\nfunction children() {\r\n  return Array.from(this.children);\r\n}\r\n\r\nfunction childrenFilter(match) {\r\n  return function() {\r\n    return filter.call(this.children, match);\r\n  };\r\n}\r\n\r\nexport default function(match) {\r\n  return this.selectAll(match == null ? children\r\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\r\n}\r\n","export default function(update) {\r\n  return new Array(update.length);\r\n}\r\n","import sparse from \"./sparse.js\";\r\nimport {Selection} from \"./index.js\";\r\n\r\nexport default function() {\r\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\r\n}\r\n\r\nexport function EnterNode(parent, datum) {\r\n  this.ownerDocument = parent.ownerDocument;\r\n  this.namespaceURI = parent.namespaceURI;\r\n  this._next = null;\r\n  this._parent = parent;\r\n  this.__data__ = datum;\r\n}\r\n\r\nEnterNode.prototype = {\r\n  constructor: EnterNode,\r\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\r\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\r\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\r\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\r\n};\r\n","import {Selection} from \"./index.js\";\r\nimport {EnterNode} from \"./enter.js\";\r\nimport constant from \"../constant.js\";\r\n\r\nfunction bindIndex(parent, group, enter, update, exit, data) {\r\n  var i = 0,\r\n      node,\r\n      groupLength = group.length,\r\n      dataLength = data.length;\r\n\r\n  // Put any non-null nodes that fit into update.\r\n  // Put any null nodes into enter.\r\n  // Put any remaining data into enter.\r\n  for (; i < dataLength; ++i) {\r\n    if (node = group[i]) {\r\n      node.__data__ = data[i];\r\n      update[i] = node;\r\n    } else {\r\n      enter[i] = new EnterNode(parent, data[i]);\r\n    }\r\n  }\r\n\r\n  // Put any non-null nodes that don’t fit into exit.\r\n  for (; i < groupLength; ++i) {\r\n    if (node = group[i]) {\r\n      exit[i] = node;\r\n    }\r\n  }\r\n}\r\n\r\nfunction bindKey(parent, group, enter, update, exit, data, key) {\r\n  var i,\r\n      node,\r\n      nodeByKeyValue = new Map,\r\n      groupLength = group.length,\r\n      dataLength = data.length,\r\n      keyValues = new Array(groupLength),\r\n      keyValue;\r\n\r\n  // Compute the key for each node.\r\n  // If multiple nodes have the same key, the duplicates are added to exit.\r\n  for (i = 0; i < groupLength; ++i) {\r\n    if (node = group[i]) {\r\n      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\r\n      if (nodeByKeyValue.has(keyValue)) {\r\n        exit[i] = node;\r\n      } else {\r\n        nodeByKeyValue.set(keyValue, node);\r\n      }\r\n    }\r\n  }\r\n\r\n  // Compute the key for each datum.\r\n  // If there a node associated with this key, join and add it to update.\r\n  // If there is not (or the key is a duplicate), add it to enter.\r\n  for (i = 0; i < dataLength; ++i) {\r\n    keyValue = key.call(parent, data[i], i, data) + \"\";\r\n    if (node = nodeByKeyValue.get(keyValue)) {\r\n      update[i] = node;\r\n      node.__data__ = data[i];\r\n      nodeByKeyValue.delete(keyValue);\r\n    } else {\r\n      enter[i] = new EnterNode(parent, data[i]);\r\n    }\r\n  }\r\n\r\n  // Add any remaining nodes that were not bound to data to exit.\r\n  for (i = 0; i < groupLength; ++i) {\r\n    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\r\n      exit[i] = node;\r\n    }\r\n  }\r\n}\r\n\r\nfunction datum(node) {\r\n  return node.__data__;\r\n}\r\n\r\nexport default function(value, key) {\r\n  if (!arguments.length) return Array.from(this, datum);\r\n\r\n  var bind = key ? bindKey : bindIndex,\r\n      parents = this._parents,\r\n      groups = this._groups;\r\n\r\n  if (typeof value !== \"function\") value = constant(value);\r\n\r\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\r\n    var parent = parents[j],\r\n        group = groups[j],\r\n        groupLength = group.length,\r\n        data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\r\n        dataLength = data.length,\r\n        enterGroup = enter[j] = new Array(dataLength),\r\n        updateGroup = update[j] = new Array(dataLength),\r\n        exitGroup = exit[j] = new Array(groupLength);\r\n\r\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\r\n\r\n    // Now connect the enter nodes to their following update node, such that\r\n    // appendChild can insert the materialized enter node before this node,\r\n    // rather than at the end of the parent node.\r\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\r\n      if (previous = enterGroup[i0]) {\r\n        if (i0 >= i1) i1 = i0 + 1;\r\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\r\n        previous._next = next || null;\r\n      }\r\n    }\r\n  }\r\n\r\n  update = new Selection(update, parents);\r\n  update._enter = enter;\r\n  update._exit = exit;\r\n  return update;\r\n}\r\n\r\n// Given some data, this returns an array-like view of it: an object that\r\n// exposes a length property and allows numeric indexing. Note that unlike\r\n// selectAll, this isn’t worried about “live” collections because the resulting\r\n// array will only be used briefly while data is being bound. (It is possible to\r\n// cause the data to change while iterating by using a key function, but please\r\n// don’t; we’d rather avoid a gratuitous copy.)\r\nfunction arraylike(data) {\r\n  return typeof data === \"object\" && \"length\" in data\r\n    ? data // Array, TypedArray, NodeList, array-like\r\n    : Array.from(data); // Map, Set, iterable, string, or anything else\r\n}\r\n","import {Selection} from \"./index.js\";\r\n\r\nexport default function(compare) {\r\n  if (!compare) compare = ascending;\r\n\r\n  function compareNode(a, b) {\r\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\r\n  }\r\n\r\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\r\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\r\n      if (node = group[i]) {\r\n        sortgroup[i] = node;\r\n      }\r\n    }\r\n    sortgroup.sort(compareNode);\r\n  }\r\n\r\n  return new Selection(sortgroups, this._parents).order();\r\n}\r\n\r\nfunction ascending(a, b) {\r\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\r\n}\r\n","import namespace from \"../namespace.js\";\r\n\r\nfunction attrRemove(name) {\r\n  return function() {\r\n    this.removeAttribute(name);\r\n  };\r\n}\r\n\r\nfunction attrRemoveNS(fullname) {\r\n  return function() {\r\n    this.removeAttributeNS(fullname.space, fullname.local);\r\n  };\r\n}\r\n\r\nfunction attrConstant(name, value) {\r\n  return function() {\r\n    this.setAttribute(name, value);\r\n  };\r\n}\r\n\r\nfunction attrConstantNS(fullname, value) {\r\n  return function() {\r\n    this.setAttributeNS(fullname.space, fullname.local, value);\r\n  };\r\n}\r\n\r\nfunction attrFunction(name, value) {\r\n  return function() {\r\n    var v = value.apply(this, arguments);\r\n    if (v == null) this.removeAttribute(name);\r\n    else this.setAttribute(name, v);\r\n  };\r\n}\r\n\r\nfunction attrFunctionNS(fullname, value) {\r\n  return function() {\r\n    var v = value.apply(this, arguments);\r\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\r\n    else this.setAttributeNS(fullname.space, fullname.local, v);\r\n  };\r\n}\r\n\r\nexport default function(name, value) {\r\n  var fullname = namespace(name);\r\n\r\n  if (arguments.length < 2) {\r\n    var node = this.node();\r\n    return fullname.local\r\n        ? node.getAttributeNS(fullname.space, fullname.local)\r\n        : node.getAttribute(fullname);\r\n  }\r\n\r\n  return this.each((value == null\r\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\r\n      ? (fullname.local ? attrFunctionNS : attrFunction)\r\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\r\n}\r\n","export default function(node) {\r\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\r\n      || (node.document && node) // node is a Window\r\n      || node.defaultView; // node is a Document\r\n}\r\n","import defaultView from \"../window.js\";\r\n\r\nfunction styleRemove(name) {\r\n  return function() {\r\n    this.style.removeProperty(name);\r\n  };\r\n}\r\n\r\nfunction styleConstant(name, value, priority) {\r\n  return function() {\r\n    this.style.setProperty(name, value, priority);\r\n  };\r\n}\r\n\r\nfunction styleFunction(name, value, priority) {\r\n  return function() {\r\n    var v = value.apply(this, arguments);\r\n    if (v == null) this.style.removeProperty(name);\r\n    else this.style.setProperty(name, v, priority);\r\n  };\r\n}\r\n\r\nexport default function(name, value, priority) {\r\n  return arguments.length > 1\r\n      ? this.each((value == null\r\n            ? styleRemove : typeof value === \"function\"\r\n            ? styleFunction\r\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\r\n      : styleValue(this.node(), name);\r\n}\r\n\r\nexport function styleValue(node, name) {\r\n  return node.style.getPropertyValue(name)\r\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\r\n}\r\n","function propertyRemove(name) {\r\n  return function() {\r\n    delete this[name];\r\n  };\r\n}\r\n\r\nfunction propertyConstant(name, value) {\r\n  return function() {\r\n    this[name] = value;\r\n  };\r\n}\r\n\r\nfunction propertyFunction(name, value) {\r\n  return function() {\r\n    var v = value.apply(this, arguments);\r\n    if (v == null) delete this[name];\r\n    else this[name] = v;\r\n  };\r\n}\r\n\r\nexport default function(name, value) {\r\n  return arguments.length > 1\r\n      ? this.each((value == null\r\n          ? propertyRemove : typeof value === \"function\"\r\n          ? propertyFunction\r\n          : propertyConstant)(name, value))\r\n      : this.node()[name];\r\n}\r\n","function classArray(string) {\r\n  return string.trim().split(/^|\\s+/);\r\n}\r\n\r\nfunction classList(node) {\r\n  return node.classList || new ClassList(node);\r\n}\r\n\r\nfunction ClassList(node) {\r\n  this._node = node;\r\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\r\n}\r\n\r\nClassList.prototype = {\r\n  add: function(name) {\r\n    var i = this._names.indexOf(name);\r\n    if (i < 0) {\r\n      this._names.push(name);\r\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\r\n    }\r\n  },\r\n  remove: function(name) {\r\n    var i = this._names.indexOf(name);\r\n    if (i >= 0) {\r\n      this._names.splice(i, 1);\r\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\r\n    }\r\n  },\r\n  contains: function(name) {\r\n    return this._names.indexOf(name) >= 0;\r\n  }\r\n};\r\n\r\nfunction classedAdd(node, names) {\r\n  var list = classList(node), i = -1, n = names.length;\r\n  while (++i < n) list.add(names[i]);\r\n}\r\n\r\nfunction classedRemove(node, names) {\r\n  var list = classList(node), i = -1, n = names.length;\r\n  while (++i < n) list.remove(names[i]);\r\n}\r\n\r\nfunction classedTrue(names) {\r\n  return function() {\r\n    classedAdd(this, names);\r\n  };\r\n}\r\n\r\nfunction classedFalse(names) {\r\n  return function() {\r\n    classedRemove(this, names);\r\n  };\r\n}\r\n\r\nfunction classedFunction(names, value) {\r\n  return function() {\r\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\r\n  };\r\n}\r\n\r\nexport default function(name, value) {\r\n  var names = classArray(name + \"\");\r\n\r\n  if (arguments.length < 2) {\r\n    var list = classList(this.node()), i = -1, n = names.length;\r\n    while (++i < n) if (!list.contains(names[i])) return false;\r\n    return true;\r\n  }\r\n\r\n  return this.each((typeof value === \"function\"\r\n      ? classedFunction : value\r\n      ? classedTrue\r\n      : classedFalse)(names, value));\r\n}\r\n","function textRemove() {\r\n  this.textContent = \"\";\r\n}\r\n\r\nfunction textConstant(value) {\r\n  return function() {\r\n    this.textContent = value;\r\n  };\r\n}\r\n\r\nfunction textFunction(value) {\r\n  return function() {\r\n    var v = value.apply(this, arguments);\r\n    this.textContent = v == null ? \"\" : v;\r\n  };\r\n}\r\n\r\nexport default function(value) {\r\n  return arguments.length\r\n      ? this.each(value == null\r\n          ? textRemove : (typeof value === \"function\"\r\n          ? textFunction\r\n          : textConstant)(value))\r\n      : this.node().textContent;\r\n}\r\n","function htmlRemove() {\r\n  this.innerHTML = \"\";\r\n}\r\n\r\nfunction htmlConstant(value) {\r\n  return function() {\r\n    this.innerHTML = value;\r\n  };\r\n}\r\n\r\nfunction htmlFunction(value) {\r\n  return function() {\r\n    var v = value.apply(this, arguments);\r\n    this.innerHTML = v == null ? \"\" : v;\r\n  };\r\n}\r\n\r\nexport default function(value) {\r\n  return arguments.length\r\n      ? this.each(value == null\r\n          ? htmlRemove : (typeof value === \"function\"\r\n          ? htmlFunction\r\n          : htmlConstant)(value))\r\n      : this.node().innerHTML;\r\n}\r\n","function raise() {\r\n  if (this.nextSibling) this.parentNode.appendChild(this);\r\n}\r\n\r\nexport default function() {\r\n  return this.each(raise);\r\n}\r\n","function lower() {\r\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\r\n}\r\n\r\nexport default function() {\r\n  return this.each(lower);\r\n}\r\n","import creator from \"../creator.js\";\r\nimport selector from \"../selector.js\";\r\n\r\nfunction constantNull() {\r\n  return null;\r\n}\r\n\r\nexport default function(name, before) {\r\n  var create = typeof name === \"function\" ? name : creator(name),\r\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\r\n  return this.select(function() {\r\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\r\n  });\r\n}\r\n","function remove() {\r\n  var parent = this.parentNode;\r\n  if (parent) parent.removeChild(this);\r\n}\r\n\r\nexport default function() {\r\n  return this.each(remove);\r\n}\r\n","function selection_cloneShallow() {\r\n  var clone = this.cloneNode(false), parent = this.parentNode;\r\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\r\n}\r\n\r\nfunction selection_cloneDeep() {\r\n  var clone = this.cloneNode(true), parent = this.parentNode;\r\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\r\n}\r\n\r\nexport default function(deep) {\r\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\r\n}\r\n","function contextListener(listener) {\r\n  return function(event) {\r\n    listener.call(this, event, this.__data__);\r\n  };\r\n}\r\n\r\nfunction parseTypenames(typenames) {\r\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\r\n    var name = \"\", i = t.indexOf(\".\");\r\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\r\n    return {type: t, name: name};\r\n  });\r\n}\r\n\r\nfunction onRemove(typename) {\r\n  return function() {\r\n    var on = this.__on;\r\n    if (!on) return;\r\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\r\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\r\n        this.removeEventListener(o.type, o.listener, o.options);\r\n      } else {\r\n        on[++i] = o;\r\n      }\r\n    }\r\n    if (++i) on.length = i;\r\n    else delete this.__on;\r\n  };\r\n}\r\n\r\nfunction onAdd(typename, value, options) {\r\n  return function() {\r\n    var on = this.__on, o, listener = contextListener(value);\r\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\r\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\r\n        this.removeEventListener(o.type, o.listener, o.options);\r\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\r\n        o.value = value;\r\n        return;\r\n      }\r\n    }\r\n    this.addEventListener(typename.type, listener, options);\r\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\r\n    if (!on) this.__on = [o];\r\n    else on.push(o);\r\n  };\r\n}\r\n\r\nexport default function(typename, value, options) {\r\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\r\n\r\n  if (arguments.length < 2) {\r\n    var on = this.node().__on;\r\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\r\n      for (i = 0, o = on[j]; i < n; ++i) {\r\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\r\n          return o.value;\r\n        }\r\n      }\r\n    }\r\n    return;\r\n  }\r\n\r\n  on = value ? onAdd : onRemove;\r\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\r\n  return this;\r\n}\r\n","import defaultView from \"../window.js\";\r\n\r\nfunction dispatchEvent(node, type, params) {\r\n  var window = defaultView(node),\r\n      event = window.CustomEvent;\r\n\r\n  if (typeof event === \"function\") {\r\n    event = new event(type, params);\r\n  } else {\r\n    event = window.document.createEvent(\"Event\");\r\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\r\n    else event.initEvent(type, false, false);\r\n  }\r\n\r\n  node.dispatchEvent(event);\r\n}\r\n\r\nfunction dispatchConstant(type, params) {\r\n  return function() {\r\n    return dispatchEvent(this, type, params);\r\n  };\r\n}\r\n\r\nfunction dispatchFunction(type, params) {\r\n  return function() {\r\n    return dispatchEvent(this, type, params.apply(this, arguments));\r\n  };\r\n}\r\n\r\nexport default function(type, params) {\r\n  return this.each((typeof params === \"function\"\r\n      ? dispatchFunction\r\n      : dispatchConstant)(type, params));\r\n}\r\n","import selection_select from \"./select.js\";\r\nimport selection_selectAll from \"./selectAll.js\";\r\nimport selection_selectChild from \"./selectChild.js\";\r\nimport selection_selectChildren from \"./selectChildren.js\";\r\nimport selection_filter from \"./filter.js\";\r\nimport selection_data from \"./data.js\";\r\nimport selection_enter from \"./enter.js\";\r\nimport selection_exit from \"./exit.js\";\r\nimport selection_join from \"./join.js\";\r\nimport selection_merge from \"./merge.js\";\r\nimport selection_order from \"./order.js\";\r\nimport selection_sort from \"./sort.js\";\r\nimport selection_call from \"./call.js\";\r\nimport selection_nodes from \"./nodes.js\";\r\nimport selection_node from \"./node.js\";\r\nimport selection_size from \"./size.js\";\r\nimport selection_empty from \"./empty.js\";\r\nimport selection_each from \"./each.js\";\r\nimport selection_attr from \"./attr.js\";\r\nimport selection_style from \"./style.js\";\r\nimport selection_property from \"./property.js\";\r\nimport selection_classed from \"./classed.js\";\r\nimport selection_text from \"./text.js\";\r\nimport selection_html from \"./html.js\";\r\nimport selection_raise from \"./raise.js\";\r\nimport selection_lower from \"./lower.js\";\r\nimport selection_append from \"./append.js\";\r\nimport selection_insert from \"./insert.js\";\r\nimport selection_remove from \"./remove.js\";\r\nimport selection_clone from \"./clone.js\";\r\nimport selection_datum from \"./datum.js\";\r\nimport selection_on from \"./on.js\";\r\nimport selection_dispatch from \"./dispatch.js\";\r\nimport selection_iterator from \"./iterator.js\";\r\n\r\nexport var root = [null];\r\n\r\nexport function Selection(groups, parents) {\r\n  this._groups = groups;\r\n  this._parents = parents;\r\n}\r\n\r\nfunction selection() {\r\n  return new Selection([[document.documentElement]], root);\r\n}\r\n\r\nfunction selection_selection() {\r\n  return this;\r\n}\r\n\r\nSelection.prototype = selection.prototype = {\r\n  constructor: Selection,\r\n  select: selection_select,\r\n  selectAll: selection_selectAll,\r\n  selectChild: selection_selectChild,\r\n  selectChildren: selection_selectChildren,\r\n  filter: selection_filter,\r\n  data: selection_data,\r\n  enter: selection_enter,\r\n  exit: selection_exit,\r\n  join: selection_join,\r\n  merge: selection_merge,\r\n  selection: selection_selection,\r\n  order: selection_order,\r\n  sort: selection_sort,\r\n  call: selection_call,\r\n  nodes: selection_nodes,\r\n  node: selection_node,\r\n  size: selection_size,\r\n  empty: selection_empty,\r\n  each: selection_each,\r\n  attr: selection_attr,\r\n  style: selection_style,\r\n  property: selection_property,\r\n  classed: selection_classed,\r\n  text: selection_text,\r\n  html: selection_html,\r\n  raise: selection_raise,\r\n  lower: selection_lower,\r\n  append: selection_append,\r\n  insert: selection_insert,\r\n  remove: selection_remove,\r\n  clone: selection_clone,\r\n  datum: selection_datum,\r\n  on: selection_on,\r\n  dispatch: selection_dispatch,\r\n  [Symbol.iterator]: selection_iterator\r\n};\r\n\r\nexport default selection;\r\n","import {Selection, root} from \"./selection/index.js\";\r\n\r\nexport default function(selector) {\r\n  return typeof selector === \"string\"\r\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\r\n      : new Selection([[selector]], root);\r\n}\r\n","import creator from \"./creator.js\";\r\nimport select from \"./select.js\";\r\n\r\nexport default function(name) {\r\n  return select(creator(name).call(document.documentElement));\r\n}\r\n","import {Selection} from \"./index.js\";\r\nimport selector from \"../selector.js\";\r\n\r\nexport default function(select) {\r\n  if (typeof select !== \"function\") select = selector(select);\r\n\r\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\r\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\r\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\r\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\r\n        subgroup[i] = subnode;\r\n      }\r\n    }\r\n  }\r\n\r\n  return new Selection(subgroups, this._parents);\r\n}\r\n","import {Selection} from \"./index.js\";\r\nimport array from \"../array.js\";\r\nimport selectorAll from \"../selectorAll.js\";\r\n\r\nfunction arrayAll(select) {\r\n  return function() {\r\n    return array(select.apply(this, arguments));\r\n  };\r\n}\r\n\r\nexport default function(select) {\r\n  if (typeof select === \"function\") select = arrayAll(select);\r\n  else select = selectorAll(select);\r\n\r\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\r\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\r\n      if (node = group[i]) {\r\n        subgroups.push(select.call(node, node.__data__, i, group));\r\n        parents.push(node);\r\n      }\r\n    }\r\n  }\r\n\r\n  return new Selection(subgroups, parents);\r\n}\r\n","import {Selection} from \"./index.js\";\r\nimport matcher from \"../matcher.js\";\r\n\r\nexport default function(match) {\r\n  if (typeof match !== \"function\") match = matcher(match);\r\n\r\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\r\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\r\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\r\n        subgroup.push(node);\r\n      }\r\n    }\r\n  }\r\n\r\n  return new Selection(subgroups, this._parents);\r\n}\r\n","export default function(x) {\r\n  return function() {\r\n    return x;\r\n  };\r\n}\r\n","import sparse from \"./sparse.js\";\r\nimport {Selection} from \"./index.js\";\r\n\r\nexport default function() {\r\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\r\n}\r\n","export default function(onenter, onupdate, onexit) {\r\n  var enter = this.enter(), update = this, exit = this.exit();\r\n  if (typeof onenter === \"function\") {\r\n    enter = onenter(enter);\r\n    if (enter) enter = enter.selection();\r\n  } else {\r\n    enter = enter.append(onenter + \"\");\r\n  }\r\n  if (onupdate != null) {\r\n    update = onupdate(update);\r\n    if (update) update = update.selection();\r\n  }\r\n  if (onexit == null) exit.remove(); else onexit(exit);\r\n  return enter && update ? enter.merge(update).order() : update;\r\n}\r\n","import {Selection} from \"./index.js\";\r\n\r\nexport default function(context) {\r\n  var selection = context.selection ? context.selection() : context;\r\n\r\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\r\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\r\n      if (node = group0[i] || group1[i]) {\r\n        merge[i] = node;\r\n      }\r\n    }\r\n  }\r\n\r\n  for (; j < m0; ++j) {\r\n    merges[j] = groups0[j];\r\n  }\r\n\r\n  return new Selection(merges, this._parents);\r\n}\r\n","export default function() {\r\n\r\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\r\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\r\n      if (node = group[i]) {\r\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\r\n        next = node;\r\n      }\r\n    }\r\n  }\r\n\r\n  return this;\r\n}\r\n","export default function() {\r\n  var callback = arguments[0];\r\n  arguments[0] = this;\r\n  callback.apply(null, arguments);\r\n  return this;\r\n}\r\n","export default function() {\r\n  return Array.from(this);\r\n}\r\n","export default function() {\r\n\r\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\r\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\r\n      var node = group[i];\r\n      if (node) return node;\r\n    }\r\n  }\r\n\r\n  return null;\r\n}\r\n","export default function() {\r\n  let size = 0;\r\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\r\n  return size;\r\n}\r\n","export default function() {\r\n  return !this.node();\r\n}\r\n","export default function(callback) {\r\n\r\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\r\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\r\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\r\n    }\r\n  }\r\n\r\n  return this;\r\n}\r\n","import creator from \"../creator.js\";\r\n\r\nexport default function(name) {\r\n  var create = typeof name === \"function\" ? name : creator(name);\r\n  return this.select(function() {\r\n    return this.appendChild(create.apply(this, arguments));\r\n  });\r\n}\r\n","export default function(value) {\r\n  return arguments.length\r\n      ? this.property(\"__data__\", value)\r\n      : this.node().__data__;\r\n}\r\n","export default function*() {\r\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\r\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\r\n      if (node = group[i]) yield node;\r\n    }\r\n  }\r\n}\r\n","var nextId = 0;\r\n\r\nexport default function local() {\r\n  return new Local;\r\n}\r\n\r\nfunction Local() {\r\n  this._ = \"@\" + (++nextId).toString(36);\r\n}\r\n\r\nLocal.prototype = local.prototype = {\r\n  constructor: Local,\r\n  get: function(node) {\r\n    var id = this._;\r\n    while (!(id in node)) if (!(node = node.parentNode)) return;\r\n    return node[id];\r\n  },\r\n  set: function(node, value) {\r\n    return node[this._] = value;\r\n  },\r\n  remove: function(node) {\r\n    return this._ in node && delete node[this._];\r\n  },\r\n  toString: function() {\r\n    return this._;\r\n  }\r\n};\r\n","export default function(event) {\r\n  let sourceEvent;\r\n  while (sourceEvent = event.sourceEvent) event = sourceEvent;\r\n  return event;\r\n}\r\n","import sourceEvent from \"./sourceEvent.js\";\r\n\r\nexport default function(event, node) {\r\n  event = sourceEvent(event);\r\n  if (node === undefined) node = event.currentTarget;\r\n  if (node) {\r\n    var svg = node.ownerSVGElement || node;\r\n    if (svg.createSVGPoint) {\r\n      var point = svg.createSVGPoint();\r\n      point.x = event.clientX, point.y = event.clientY;\r\n      point = point.matrixTransform(node.getScreenCTM().inverse());\r\n      return [point.x, point.y];\r\n    }\r\n    if (node.getBoundingClientRect) {\r\n      var rect = node.getBoundingClientRect();\r\n      return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\r\n    }\r\n  }\r\n  return [event.pageX, event.pageY];\r\n}\r\n","import array from \"./array.js\";\r\nimport {Selection, root} from \"./selection/index.js\";\r\n\r\nexport default function(selector) {\r\n  return typeof selector === \"string\"\r\n      ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\r\n      : new Selection([array(selector)], root);\r\n}\r\n","// These are typically used in conjunction with noevent to ensure that we can\r\n// preventDefault on the event.\r\nexport const nonpassive = {passive: false};\r\nexport const nonpassivecapture = {capture: true, passive: false};\r\n\r\nexport function nopropagation(event) {\r\n  event.stopImmediatePropagation();\r\n}\r\n\r\nexport default function(event) {\r\n  event.preventDefault();\r\n  event.stopImmediatePropagation();\r\n}\r\n","import {select} from \"d3-selection\";\r\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\r\n\r\nexport default function(view) {\r\n  var root = view.document.documentElement,\r\n      selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\r\n  if (\"onselectstart\" in root) {\r\n    selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\r\n  } else {\r\n    root.__noselect = root.style.MozUserSelect;\r\n    root.style.MozUserSelect = \"none\";\r\n  }\r\n}\r\n\r\nexport function yesdrag(view, noclick) {\r\n  var root = view.document.documentElement,\r\n      selection = select(view).on(\"dragstart.drag\", null);\r\n  if (noclick) {\r\n    selection.on(\"click.drag\", noevent, nonpassivecapture);\r\n    setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\r\n  }\r\n  if (\"onselectstart\" in root) {\r\n    selection.on(\"selectstart.drag\", null);\r\n  } else {\r\n    root.style.MozUserSelect = root.__noselect;\r\n    delete root.__noselect;\r\n  }\r\n}\r\n","export default x => () => x;\r\n","export default function DragEvent(type, {\r\n  sourceEvent,\r\n  subject,\r\n  target,\r\n  identifier,\r\n  active,\r\n  x, y, dx, dy,\r\n  dispatch\r\n}) {\r\n  Object.defineProperties(this, {\r\n    type: {value: type, enumerable: true, configurable: true},\r\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\r\n    subject: {value: subject, enumerable: true, configurable: true},\r\n    target: {value: target, enumerable: true, configurable: true},\r\n    identifier: {value: identifier, enumerable: true, configurable: true},\r\n    active: {value: active, enumerable: true, configurable: true},\r\n    x: {value: x, enumerable: true, configurable: true},\r\n    y: {value: y, enumerable: true, configurable: true},\r\n    dx: {value: dx, enumerable: true, configurable: true},\r\n    dy: {value: dy, enumerable: true, configurable: true},\r\n    _: {value: dispatch}\r\n  });\r\n}\r\n\r\nDragEvent.prototype.on = function() {\r\n  var value = this._.on.apply(this._, arguments);\r\n  return value === this._ ? this : value;\r\n};\r\n","import {dispatch} from \"d3-dispatch\";\r\nimport {select, pointer} from \"d3-selection\";\r\nimport nodrag, {yesdrag} from \"./nodrag.js\";\r\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\r\nimport constant from \"./constant.js\";\r\nimport DragEvent from \"./event.js\";\r\n\r\n// Ignore right-click, since that should open the context menu.\r\nfunction defaultFilter(event) {\r\n  return !event.ctrlKey && !event.button;\r\n}\r\n\r\nfunction defaultContainer() {\r\n  return this.parentNode;\r\n}\r\n\r\nfunction defaultSubject(event, d) {\r\n  return d == null ? {x: event.x, y: event.y} : d;\r\n}\r\n\r\nfunction defaultTouchable() {\r\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\r\n}\r\n\r\nexport default function() {\r\n  var filter = defaultFilter,\r\n      container = defaultContainer,\r\n      subject = defaultSubject,\r\n      touchable = defaultTouchable,\r\n      gestures = {},\r\n      listeners = dispatch(\"start\", \"drag\", \"end\"),\r\n      active = 0,\r\n      mousedownx,\r\n      mousedowny,\r\n      mousemoving,\r\n      touchending,\r\n      clickDistance2 = 0;\r\n\r\n  function drag(selection) {\r\n    selection\r\n        .on(\"mousedown.drag\", mousedowned)\r\n      .filter(touchable)\r\n        .on(\"touchstart.drag\", touchstarted)\r\n        .on(\"touchmove.drag\", touchmoved, nonpassive)\r\n        .on(\"touchend.drag touchcancel.drag\", touchended)\r\n        .style(\"touch-action\", \"none\")\r\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\r\n  }\r\n\r\n  function mousedowned(event, d) {\r\n    if (touchending || !filter.call(this, event, d)) return;\r\n    var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\r\n    if (!gesture) return;\r\n    select(event.view)\r\n      .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\r\n      .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\r\n    nodrag(event.view);\r\n    nopropagation(event);\r\n    mousemoving = false;\r\n    mousedownx = event.clientX;\r\n    mousedowny = event.clientY;\r\n    gesture(\"start\", event);\r\n  }\r\n\r\n  function mousemoved(event) {\r\n    noevent(event);\r\n    if (!mousemoving) {\r\n      var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\r\n      mousemoving = dx * dx + dy * dy > clickDistance2;\r\n    }\r\n    gestures.mouse(\"drag\", event);\r\n  }\r\n\r\n  function mouseupped(event) {\r\n    select(event.view).on(\"mousemove.drag mouseup.drag\", null);\r\n    yesdrag(event.view, mousemoving);\r\n    noevent(event);\r\n    gestures.mouse(\"end\", event);\r\n  }\r\n\r\n  function touchstarted(event, d) {\r\n    if (!filter.call(this, event, d)) return;\r\n    var touches = event.changedTouches,\r\n        c = container.call(this, event, d),\r\n        n = touches.length, i, gesture;\r\n\r\n    for (i = 0; i < n; ++i) {\r\n      if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\r\n        nopropagation(event);\r\n        gesture(\"start\", event, touches[i]);\r\n      }\r\n    }\r\n  }\r\n\r\n  function touchmoved(event) {\r\n    var touches = event.changedTouches,\r\n        n = touches.length, i, gesture;\r\n\r\n    for (i = 0; i < n; ++i) {\r\n      if (gesture = gestures[touches[i].identifier]) {\r\n        noevent(event);\r\n        gesture(\"drag\", event, touches[i]);\r\n      }\r\n    }\r\n  }\r\n\r\n  function touchended(event) {\r\n    var touches = event.changedTouches,\r\n        n = touches.length, i, gesture;\r\n\r\n    if (touchending) clearTimeout(touchending);\r\n    touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\r\n    for (i = 0; i < n; ++i) {\r\n      if (gesture = gestures[touches[i].identifier]) {\r\n        nopropagation(event);\r\n        gesture(\"end\", event, touches[i]);\r\n      }\r\n    }\r\n  }\r\n\r\n  function beforestart(that, container, event, d, identifier, touch) {\r\n    var dispatch = listeners.copy(),\r\n        p = pointer(touch || event, container), dx, dy,\r\n        s;\r\n\r\n    if ((s = subject.call(that, new DragEvent(\"beforestart\", {\r\n        sourceEvent: event,\r\n        target: drag,\r\n        identifier,\r\n        active,\r\n        x: p[0],\r\n        y: p[1],\r\n        dx: 0,\r\n        dy: 0,\r\n        dispatch\r\n      }), d)) == null) return;\r\n\r\n    dx = s.x - p[0] || 0;\r\n    dy = s.y - p[1] || 0;\r\n\r\n    return function gesture(type, event, touch) {\r\n      var p0 = p, n;\r\n      switch (type) {\r\n        case \"start\": gestures[identifier] = gesture, n = active++; break;\r\n        case \"end\": delete gestures[identifier], --active; // falls through\r\n        case \"drag\": p = pointer(touch || event, container), n = active; break;\r\n      }\r\n      dispatch.call(\r\n        type,\r\n        that,\r\n        new DragEvent(type, {\r\n          sourceEvent: event,\r\n          subject: s,\r\n          target: drag,\r\n          identifier,\r\n          active: n,\r\n          x: p[0] + dx,\r\n          y: p[1] + dy,\r\n          dx: p[0] - p0[0],\r\n          dy: p[1] - p0[1],\r\n          dispatch\r\n        }),\r\n        d\r\n      );\r\n    };\r\n  }\r\n\r\n  drag.filter = function(_) {\r\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\r\n  };\r\n\r\n  drag.container = function(_) {\r\n    return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\r\n  };\r\n\r\n  drag.subject = function(_) {\r\n    return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\r\n  };\r\n\r\n  drag.touchable = function(_) {\r\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\r\n  };\r\n\r\n  drag.on = function() {\r\n    var value = listeners.on.apply(listeners, arguments);\r\n    return value === listeners ? drag : value;\r\n  };\r\n\r\n  drag.clickDistance = function(_) {\r\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\r\n  };\r\n\r\n  return drag;\r\n}\r\n","export default function(constructor, factory, prototype) {\r\n  constructor.prototype = factory.prototype = prototype;\r\n  prototype.constructor = constructor;\r\n}\r\n\r\nexport function extend(parent, definition) {\r\n  var prototype = Object.create(parent.prototype);\r\n  for (var key in definition) prototype[key] = definition[key];\r\n  return prototype;\r\n}\r\n","import define, {extend} from \"./define.js\";\r\n\r\nexport function Color() {}\r\n\r\nexport var darker = 0.7;\r\nexport var brighter = 1 / darker;\r\n\r\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\r\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\r\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\r\n    reHex = /^#([0-9a-f]{3,8})$/,\r\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\r\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\r\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\r\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\r\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\r\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\r\n\r\nvar named = {\r\n  aliceblue: 0xf0f8ff,\r\n  antiquewhite: 0xfaebd7,\r\n  aqua: 0x00ffff,\r\n  aquamarine: 0x7fffd4,\r\n  azure: 0xf0ffff,\r\n  beige: 0xf5f5dc,\r\n  bisque: 0xffe4c4,\r\n  black: 0x000000,\r\n  blanchedalmond: 0xffebcd,\r\n  blue: 0x0000ff,\r\n  blueviolet: 0x8a2be2,\r\n  brown: 0xa52a2a,\r\n  burlywood: 0xdeb887,\r\n  cadetblue: 0x5f9ea0,\r\n  chartreuse: 0x7fff00,\r\n  chocolate: 0xd2691e,\r\n  coral: 0xff7f50,\r\n  cornflowerblue: 0x6495ed,\r\n  cornsilk: 0xfff8dc,\r\n  crimson: 0xdc143c,\r\n  cyan: 0x00ffff,\r\n  darkblue: 0x00008b,\r\n  darkcyan: 0x008b8b,\r\n  darkgoldenrod: 0xb8860b,\r\n  darkgray: 0xa9a9a9,\r\n  darkgreen: 0x006400,\r\n  darkgrey: 0xa9a9a9,\r\n  darkkhaki: 0xbdb76b,\r\n  darkmagenta: 0x8b008b,\r\n  darkolivegreen: 0x556b2f,\r\n  darkorange: 0xff8c00,\r\n  darkorchid: 0x9932cc,\r\n  darkred: 0x8b0000,\r\n  darksalmon: 0xe9967a,\r\n  darkseagreen: 0x8fbc8f,\r\n  darkslateblue: 0x483d8b,\r\n  darkslategray: 0x2f4f4f,\r\n  darkslategrey: 0x2f4f4f,\r\n  darkturquoise: 0x00ced1,\r\n  darkviolet: 0x9400d3,\r\n  deeppink: 0xff1493,\r\n  deepskyblue: 0x00bfff,\r\n  dimgray: 0x696969,\r\n  dimgrey: 0x696969,\r\n  dodgerblue: 0x1e90ff,\r\n  firebrick: 0xb22222,\r\n  floralwhite: 0xfffaf0,\r\n  forestgreen: 0x228b22,\r\n  fuchsia: 0xff00ff,\r\n  gainsboro: 0xdcdcdc,\r\n  ghostwhite: 0xf8f8ff,\r\n  gold: 0xffd700,\r\n  goldenrod: 0xdaa520,\r\n  gray: 0x808080,\r\n  green: 0x008000,\r\n  greenyellow: 0xadff2f,\r\n  grey: 0x808080,\r\n  honeydew: 0xf0fff0,\r\n  hotpink: 0xff69b4,\r\n  indianred: 0xcd5c5c,\r\n  indigo: 0x4b0082,\r\n  ivory: 0xfffff0,\r\n  khaki: 0xf0e68c,\r\n  lavender: 0xe6e6fa,\r\n  lavenderblush: 0xfff0f5,\r\n  lawngreen: 0x7cfc00,\r\n  lemonchiffon: 0xfffacd,\r\n  lightblue: 0xadd8e6,\r\n  lightcoral: 0xf08080,\r\n  lightcyan: 0xe0ffff,\r\n  lightgoldenrodyellow: 0xfafad2,\r\n  lightgray: 0xd3d3d3,\r\n  lightgreen: 0x90ee90,\r\n  lightgrey: 0xd3d3d3,\r\n  lightpink: 0xffb6c1,\r\n  lightsalmon: 0xffa07a,\r\n  lightseagreen: 0x20b2aa,\r\n  lightskyblue: 0x87cefa,\r\n  lightslategray: 0x778899,\r\n  lightslategrey: 0x778899,\r\n  lightsteelblue: 0xb0c4de,\r\n  lightyellow: 0xffffe0,\r\n  lime: 0x00ff00,\r\n  limegreen: 0x32cd32,\r\n  linen: 0xfaf0e6,\r\n  magenta: 0xff00ff,\r\n  maroon: 0x800000,\r\n  mediumaquamarine: 0x66cdaa,\r\n  mediumblue: 0x0000cd,\r\n  mediumorchid: 0xba55d3,\r\n  mediumpurple: 0x9370db,\r\n  mediumseagreen: 0x3cb371,\r\n  mediumslateblue: 0x7b68ee,\r\n  mediumspringgreen: 0x00fa9a,\r\n  mediumturquoise: 0x48d1cc,\r\n  mediumvioletred: 0xc71585,\r\n  midnightblue: 0x191970,\r\n  mintcream: 0xf5fffa,\r\n  mistyrose: 0xffe4e1,\r\n  moccasin: 0xffe4b5,\r\n  navajowhite: 0xffdead,\r\n  navy: 0x000080,\r\n  oldlace: 0xfdf5e6,\r\n  olive: 0x808000,\r\n  olivedrab: 0x6b8e23,\r\n  orange: 0xffa500,\r\n  orangered: 0xff4500,\r\n  orchid: 0xda70d6,\r\n  palegoldenrod: 0xeee8aa,\r\n  palegreen: 0x98fb98,\r\n  paleturquoise: 0xafeeee,\r\n  palevioletred: 0xdb7093,\r\n  papayawhip: 0xffefd5,\r\n  peachpuff: 0xffdab9,\r\n  peru: 0xcd853f,\r\n  pink: 0xffc0cb,\r\n  plum: 0xdda0dd,\r\n  powderblue: 0xb0e0e6,\r\n  purple: 0x800080,\r\n  rebeccapurple: 0x663399,\r\n  red: 0xff0000,\r\n  rosybrown: 0xbc8f8f,\r\n  royalblue: 0x4169e1,\r\n  saddlebrown: 0x8b4513,\r\n  salmon: 0xfa8072,\r\n  sandybrown: 0xf4a460,\r\n  seagreen: 0x2e8b57,\r\n  seashell: 0xfff5ee,\r\n  sienna: 0xa0522d,\r\n  silver: 0xc0c0c0,\r\n  skyblue: 0x87ceeb,\r\n  slateblue: 0x6a5acd,\r\n  slategray: 0x708090,\r\n  slategrey: 0x708090,\r\n  snow: 0xfffafa,\r\n  springgreen: 0x00ff7f,\r\n  steelblue: 0x4682b4,\r\n  tan: 0xd2b48c,\r\n  teal: 0x008080,\r\n  thistle: 0xd8bfd8,\r\n  tomato: 0xff6347,\r\n  turquoise: 0x40e0d0,\r\n  violet: 0xee82ee,\r\n  wheat: 0xf5deb3,\r\n  white: 0xffffff,\r\n  whitesmoke: 0xf5f5f5,\r\n  yellow: 0xffff00,\r\n  yellowgreen: 0x9acd32\r\n};\r\n\r\ndefine(Color, color, {\r\n  copy(channels) {\r\n    return Object.assign(new this.constructor, this, channels);\r\n  },\r\n  displayable() {\r\n    return this.rgb().displayable();\r\n  },\r\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\r\n  formatHex: color_formatHex,\r\n  formatHex8: color_formatHex8,\r\n  formatHsl: color_formatHsl,\r\n  formatRgb: color_formatRgb,\r\n  toString: color_formatRgb\r\n});\r\n\r\nfunction color_formatHex() {\r\n  return this.rgb().formatHex();\r\n}\r\n\r\nfunction color_formatHex8() {\r\n  return this.rgb().formatHex8();\r\n}\r\n\r\nfunction color_formatHsl() {\r\n  return hslConvert(this).formatHsl();\r\n}\r\n\r\nfunction color_formatRgb() {\r\n  return this.rgb().formatRgb();\r\n}\r\n\r\nexport default function color(format) {\r\n  var m, l;\r\n  format = (format + \"\").trim().toLowerCase();\r\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\r\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\r\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\r\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\r\n      : null) // invalid hex\r\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\r\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\r\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\r\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\r\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\r\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\r\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\r\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\r\n      : null;\r\n}\r\n\r\nfunction rgbn(n) {\r\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\r\n}\r\n\r\nfunction rgba(r, g, b, a) {\r\n  if (a <= 0) r = g = b = NaN;\r\n  return new Rgb(r, g, b, a);\r\n}\r\n\r\nexport function rgbConvert(o) {\r\n  if (!(o instanceof Color)) o = color(o);\r\n  if (!o) return new Rgb;\r\n  o = o.rgb();\r\n  return new Rgb(o.r, o.g, o.b, o.opacity);\r\n}\r\n\r\nexport function rgb(r, g, b, opacity) {\r\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\r\n}\r\n\r\nexport function Rgb(r, g, b, opacity) {\r\n  this.r = +r;\r\n  this.g = +g;\r\n  this.b = +b;\r\n  this.opacity = +opacity;\r\n}\r\n\r\ndefine(Rgb, rgb, extend(Color, {\r\n  brighter(k) {\r\n    k = k == null ? brighter : Math.pow(brighter, k);\r\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\r\n  },\r\n  darker(k) {\r\n    k = k == null ? darker : Math.pow(darker, k);\r\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\r\n  },\r\n  rgb() {\r\n    return this;\r\n  },\r\n  clamp() {\r\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\r\n  },\r\n  displayable() {\r\n    return (-0.5 <= this.r && this.r < 255.5)\r\n        && (-0.5 <= this.g && this.g < 255.5)\r\n        && (-0.5 <= this.b && this.b < 255.5)\r\n        && (0 <= this.opacity && this.opacity <= 1);\r\n  },\r\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\r\n  formatHex: rgb_formatHex,\r\n  formatHex8: rgb_formatHex8,\r\n  formatRgb: rgb_formatRgb,\r\n  toString: rgb_formatRgb\r\n}));\r\n\r\nfunction rgb_formatHex() {\r\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\r\n}\r\n\r\nfunction rgb_formatHex8() {\r\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\r\n}\r\n\r\nfunction rgb_formatRgb() {\r\n  const a = clampa(this.opacity);\r\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\r\n}\r\n\r\nfunction clampa(opacity) {\r\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\r\n}\r\n\r\nfunction clampi(value) {\r\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\r\n}\r\n\r\nfunction hex(value) {\r\n  value = clampi(value);\r\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\r\n}\r\n\r\nfunction hsla(h, s, l, a) {\r\n  if (a <= 0) h = s = l = NaN;\r\n  else if (l <= 0 || l >= 1) h = s = NaN;\r\n  else if (s <= 0) h = NaN;\r\n  return new Hsl(h, s, l, a);\r\n}\r\n\r\nexport function hslConvert(o) {\r\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\r\n  if (!(o instanceof Color)) o = color(o);\r\n  if (!o) return new Hsl;\r\n  if (o instanceof Hsl) return o;\r\n  o = o.rgb();\r\n  var r = o.r / 255,\r\n      g = o.g / 255,\r\n      b = o.b / 255,\r\n      min = Math.min(r, g, b),\r\n      max = Math.max(r, g, b),\r\n      h = NaN,\r\n      s = max - min,\r\n      l = (max + min) / 2;\r\n  if (s) {\r\n    if (r === max) h = (g - b) / s + (g < b) * 6;\r\n    else if (g === max) h = (b - r) / s + 2;\r\n    else h = (r - g) / s + 4;\r\n    s /= l < 0.5 ? max + min : 2 - max - min;\r\n    h *= 60;\r\n  } else {\r\n    s = l > 0 && l < 1 ? 0 : h;\r\n  }\r\n  return new Hsl(h, s, l, o.opacity);\r\n}\r\n\r\nexport function hsl(h, s, l, opacity) {\r\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\r\n}\r\n\r\nfunction Hsl(h, s, l, opacity) {\r\n  this.h = +h;\r\n  this.s = +s;\r\n  this.l = +l;\r\n  this.opacity = +opacity;\r\n}\r\n\r\ndefine(Hsl, hsl, extend(Color, {\r\n  brighter(k) {\r\n    k = k == null ? brighter : Math.pow(brighter, k);\r\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\r\n  },\r\n  darker(k) {\r\n    k = k == null ? darker : Math.pow(darker, k);\r\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\r\n  },\r\n  rgb() {\r\n    var h = this.h % 360 + (this.h < 0) * 360,\r\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\r\n        l = this.l,\r\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\r\n        m1 = 2 * l - m2;\r\n    return new Rgb(\r\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\r\n      hsl2rgb(h, m1, m2),\r\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\r\n      this.opacity\r\n    );\r\n  },\r\n  clamp() {\r\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\r\n  },\r\n  displayable() {\r\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\r\n        && (0 <= this.l && this.l <= 1)\r\n        && (0 <= this.opacity && this.opacity <= 1);\r\n  },\r\n  formatHsl() {\r\n    const a = clampa(this.opacity);\r\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\r\n  }\r\n}));\r\n\r\nfunction clamph(value) {\r\n  value = (value || 0) % 360;\r\n  return value < 0 ? value + 360 : value;\r\n}\r\n\r\nfunction clampt(value) {\r\n  return Math.max(0, Math.min(1, value || 0));\r\n}\r\n\r\n/* From FvD 13.37, CSS Color Module Level 3 */\r\nfunction hsl2rgb(h, m1, m2) {\r\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\r\n      : h < 180 ? m2\r\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\r\n      : m1) * 255;\r\n}\r\n","export const radians = Math.PI / 180;\r\nexport const degrees = 180 / Math.PI;\r\n","import define, {extend} from \"./define.js\";\r\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\r\nimport {degrees, radians} from \"./math.js\";\r\n\r\n// https://observablehq.com/@mbostock/lab-and-rgb\r\nconst K = 18,\r\n    Xn = 0.96422,\r\n    Yn = 1,\r\n    Zn = 0.82521,\r\n    t0 = 4 / 29,\r\n    t1 = 6 / 29,\r\n    t2 = 3 * t1 * t1,\r\n    t3 = t1 * t1 * t1;\r\n\r\nfunction labConvert(o) {\r\n  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\r\n  if (o instanceof Hcl) return hcl2lab(o);\r\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\r\n  var r = rgb2lrgb(o.r),\r\n      g = rgb2lrgb(o.g),\r\n      b = rgb2lrgb(o.b),\r\n      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\r\n  if (r === g && g === b) x = z = y; else {\r\n    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\r\n    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\r\n  }\r\n  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\r\n}\r\n\r\nexport function gray(l, opacity) {\r\n  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\r\n}\r\n\r\nexport default function lab(l, a, b, opacity) {\r\n  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\r\n}\r\n\r\nexport function Lab(l, a, b, opacity) {\r\n  this.l = +l;\r\n  this.a = +a;\r\n  this.b = +b;\r\n  this.opacity = +opacity;\r\n}\r\n\r\ndefine(Lab, lab, extend(Color, {\r\n  brighter(k) {\r\n    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\r\n  },\r\n  darker(k) {\r\n    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\r\n  },\r\n  rgb() {\r\n    var y = (this.l + 16) / 116,\r\n        x = isNaN(this.a) ? y : y + this.a / 500,\r\n        z = isNaN(this.b) ? y : y - this.b / 200;\r\n    x = Xn * lab2xyz(x);\r\n    y = Yn * lab2xyz(y);\r\n    z = Zn * lab2xyz(z);\r\n    return new Rgb(\r\n      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\r\n      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\r\n      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\r\n      this.opacity\r\n    );\r\n  }\r\n}));\r\n\r\nfunction xyz2lab(t) {\r\n  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\r\n}\r\n\r\nfunction lab2xyz(t) {\r\n  return t > t1 ? t * t * t : t2 * (t - t0);\r\n}\r\n\r\nfunction lrgb2rgb(x) {\r\n  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\r\n}\r\n\r\nfunction rgb2lrgb(x) {\r\n  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\r\n}\r\n\r\nfunction hclConvert(o) {\r\n  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\r\n  if (!(o instanceof Lab)) o = labConvert(o);\r\n  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\r\n  var h = Math.atan2(o.b, o.a) * degrees;\r\n  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\r\n}\r\n\r\nexport function lch(l, c, h, opacity) {\r\n  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\r\n}\r\n\r\nexport function hcl(h, c, l, opacity) {\r\n  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\r\n}\r\n\r\nexport function Hcl(h, c, l, opacity) {\r\n  this.h = +h;\r\n  this.c = +c;\r\n  this.l = +l;\r\n  this.opacity = +opacity;\r\n}\r\n\r\nfunction hcl2lab(o) {\r\n  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\r\n  var h = o.h * radians;\r\n  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\r\n}\r\n\r\ndefine(Hcl, hcl, extend(Color, {\r\n  brighter(k) {\r\n    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\r\n  },\r\n  darker(k) {\r\n    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\r\n  },\r\n  rgb() {\r\n    return hcl2lab(this).rgb();\r\n  }\r\n}));\r\n","import define, {extend} from \"./define.js\";\r\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\r\nimport {degrees, radians} from \"./math.js\";\r\n\r\nvar A = -0.14861,\r\n    B = +1.78277,\r\n    C = -0.29227,\r\n    D = -0.90649,\r\n    E = +1.97294,\r\n    ED = E * D,\r\n    EB = E * B,\r\n    BC_DA = B * C - D * A;\r\n\r\nfunction cubehelixConvert(o) {\r\n  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\r\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\r\n  var r = o.r / 255,\r\n      g = o.g / 255,\r\n      b = o.b / 255,\r\n      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\r\n      bl = b - l,\r\n      k = (E * (g - l) - C * bl) / D,\r\n      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\r\n      h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\r\n  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\r\n}\r\n\r\nexport default function cubehelix(h, s, l, opacity) {\r\n  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\r\n}\r\n\r\nexport function Cubehelix(h, s, l, opacity) {\r\n  this.h = +h;\r\n  this.s = +s;\r\n  this.l = +l;\r\n  this.opacity = +opacity;\r\n}\r\n\r\ndefine(Cubehelix, cubehelix, extend(Color, {\r\n  brighter(k) {\r\n    k = k == null ? brighter : Math.pow(brighter, k);\r\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\r\n  },\r\n  darker(k) {\r\n    k = k == null ? darker : Math.pow(darker, k);\r\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\r\n  },\r\n  rgb() {\r\n    var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\r\n        l = +this.l,\r\n        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\r\n        cosh = Math.cos(h),\r\n        sinh = Math.sin(h);\r\n    return new Rgb(\r\n      255 * (l + a * (A * cosh + B * sinh)),\r\n      255 * (l + a * (C * cosh + D * sinh)),\r\n      255 * (l + a * (E * cosh)),\r\n      this.opacity\r\n    );\r\n  }\r\n}));\r\n","export function basis(t1, v0, v1, v2, v3) {\r\n  var t2 = t1 * t1, t3 = t2 * t1;\r\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\r\n      + (4 - 6 * t2 + 3 * t3) * v1\r\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\r\n      + t3 * v3) / 6;\r\n}\r\n\r\nexport default function(values) {\r\n  var n = values.length - 1;\r\n  return function(t) {\r\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\r\n        v1 = values[i],\r\n        v2 = values[i + 1],\r\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\r\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\r\n    return basis((t - i / n) * n, v0, v1, v2, v3);\r\n  };\r\n}\r\n","import {basis} from \"./basis.js\";\r\n\r\nexport default function(values) {\r\n  var n = values.length;\r\n  return function(t) {\r\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\r\n        v0 = values[(i + n - 1) % n],\r\n        v1 = values[i % n],\r\n        v2 = values[(i + 1) % n],\r\n        v3 = values[(i + 2) % n];\r\n    return basis((t - i / n) * n, v0, v1, v2, v3);\r\n  };\r\n}\r\n","export default x => () => x;\r\n","import constant from \"./constant.js\";\r\n\r\nfunction linear(a, d) {\r\n  return function(t) {\r\n    return a + t * d;\r\n  };\r\n}\r\n\r\nfunction exponential(a, b, y) {\r\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\r\n    return Math.pow(a + t * b, y);\r\n  };\r\n}\r\n\r\nexport function hue(a, b) {\r\n  var d = b - a;\r\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\r\n}\r\n\r\nexport function gamma(y) {\r\n  return (y = +y) === 1 ? nogamma : function(a, b) {\r\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\r\n  };\r\n}\r\n\r\nexport default function nogamma(a, b) {\r\n  var d = b - a;\r\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\r\n}\r\n","import {rgb as colorRgb} from \"d3-color\";\r\nimport basis from \"./basis.js\";\r\nimport basisClosed from \"./basisClosed.js\";\r\nimport nogamma, {gamma} from \"./color.js\";\r\n\r\nexport default (function rgbGamma(y) {\r\n  var color = gamma(y);\r\n\r\n  function rgb(start, end) {\r\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\r\n        g = color(start.g, end.g),\r\n        b = color(start.b, end.b),\r\n        opacity = nogamma(start.opacity, end.opacity);\r\n    return function(t) {\r\n      start.r = r(t);\r\n      start.g = g(t);\r\n      start.b = b(t);\r\n      start.opacity = opacity(t);\r\n      return start + \"\";\r\n    };\r\n  }\r\n\r\n  rgb.gamma = rgbGamma;\r\n\r\n  return rgb;\r\n})(1);\r\n\r\nfunction rgbSpline(spline) {\r\n  return function(colors) {\r\n    var n = colors.length,\r\n        r = new Array(n),\r\n        g = new Array(n),\r\n        b = new Array(n),\r\n        i, color;\r\n    for (i = 0; i < n; ++i) {\r\n      color = colorRgb(colors[i]);\r\n      r[i] = color.r || 0;\r\n      g[i] = color.g || 0;\r\n      b[i] = color.b || 0;\r\n    }\r\n    r = spline(r);\r\n    g = spline(g);\r\n    b = spline(b);\r\n    color.opacity = 1;\r\n    return function(t) {\r\n      color.r = r(t);\r\n      color.g = g(t);\r\n      color.b = b(t);\r\n      return color + \"\";\r\n    };\r\n  };\r\n}\r\n\r\nexport var rgbBasis = rgbSpline(basis);\r\nexport var rgbBasisClosed = rgbSpline(basisClosed);\r\n","export default function(a, b) {\r\n  if (!b) b = [];\r\n  var n = a ? Math.min(b.length, a.length) : 0,\r\n      c = b.slice(),\r\n      i;\r\n  return function(t) {\r\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\r\n    return c;\r\n  };\r\n}\r\n\r\nexport function isNumberArray(x) {\r\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\r\n}\r\n","import value from \"./value.js\";\r\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\r\n\r\nexport default function(a, b) {\r\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\r\n}\r\n\r\nexport function genericArray(a, b) {\r\n  var nb = b ? b.length : 0,\r\n      na = a ? Math.min(nb, a.length) : 0,\r\n      x = new Array(na),\r\n      c = new Array(nb),\r\n      i;\r\n\r\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\r\n  for (; i < nb; ++i) c[i] = b[i];\r\n\r\n  return function(t) {\r\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\r\n    return c;\r\n  };\r\n}\r\n","export default function(a, b) {\r\n  var d = new Date;\r\n  return a = +a, b = +b, function(t) {\r\n    return d.setTime(a * (1 - t) + b * t), d;\r\n  };\r\n}\r\n","export default function(a, b) {\r\n  return a = +a, b = +b, function(t) {\r\n    return a * (1 - t) + b * t;\r\n  };\r\n}\r\n","import value from \"./value.js\";\r\n\r\nexport default function(a, b) {\r\n  var i = {},\r\n      c = {},\r\n      k;\r\n\r\n  if (a === null || typeof a !== \"object\") a = {};\r\n  if (b === null || typeof b !== \"object\") b = {};\r\n\r\n  for (k in b) {\r\n    if (k in a) {\r\n      i[k] = value(a[k], b[k]);\r\n    } else {\r\n      c[k] = b[k];\r\n    }\r\n  }\r\n\r\n  return function(t) {\r\n    for (k in i) c[k] = i[k](t);\r\n    return c;\r\n  };\r\n}\r\n","import number from \"./number.js\";\r\n\r\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\r\n    reB = new RegExp(reA.source, \"g\");\r\n\r\nfunction zero(b) {\r\n  return function() {\r\n    return b;\r\n  };\r\n}\r\n\r\nfunction one(b) {\r\n  return function(t) {\r\n    return b(t) + \"\";\r\n  };\r\n}\r\n\r\nexport default function(a, b) {\r\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\r\n      am, // current match in a\r\n      bm, // current match in b\r\n      bs, // string preceding current number in b, if any\r\n      i = -1, // index in s\r\n      s = [], // string constants and placeholders\r\n      q = []; // number interpolators\r\n\r\n  // Coerce inputs to strings.\r\n  a = a + \"\", b = b + \"\";\r\n\r\n  // Interpolate pairs of numbers in a & b.\r\n  while ((am = reA.exec(a))\r\n      && (bm = reB.exec(b))) {\r\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\r\n      bs = b.slice(bi, bs);\r\n      if (s[i]) s[i] += bs; // coalesce with previous string\r\n      else s[++i] = bs;\r\n    }\r\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\r\n      if (s[i]) s[i] += bm; // coalesce with previous string\r\n      else s[++i] = bm;\r\n    } else { // interpolate non-matching numbers\r\n      s[++i] = null;\r\n      q.push({i: i, x: number(am, bm)});\r\n    }\r\n    bi = reB.lastIndex;\r\n  }\r\n\r\n  // Add remains of b.\r\n  if (bi < b.length) {\r\n    bs = b.slice(bi);\r\n    if (s[i]) s[i] += bs; // coalesce with previous string\r\n    else s[++i] = bs;\r\n  }\r\n\r\n  // Special optimization for only a single match.\r\n  // Otherwise, interpolate each of the numbers and rejoin the string.\r\n  return s.length < 2 ? (q[0]\r\n      ? one(q[0].x)\r\n      : zero(b))\r\n      : (b = q.length, function(t) {\r\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\r\n          return s.join(\"\");\r\n        });\r\n}\r\n","import {color} from \"d3-color\";\r\nimport rgb from \"./rgb.js\";\r\nimport {genericArray} from \"./array.js\";\r\nimport date from \"./date.js\";\r\nimport number from \"./number.js\";\r\nimport object from \"./object.js\";\r\nimport string from \"./string.js\";\r\nimport constant from \"./constant.js\";\r\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\r\n\r\nexport default function(a, b) {\r\n  var t = typeof b, c;\r\n  return b == null || t === \"boolean\" ? constant(b)\r\n      : (t === \"number\" ? number\r\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\r\n      : b instanceof color ? rgb\r\n      : b instanceof Date ? date\r\n      : isNumberArray(b) ? numberArray\r\n      : Array.isArray(b) ? genericArray\r\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\r\n      : number)(a, b);\r\n}\r\n","export default function(a, b) {\r\n  return a = +a, b = +b, function(t) {\r\n    return Math.round(a * (1 - t) + b * t);\r\n  };\r\n}\r\n","var degrees = 180 / Math.PI;\r\n\r\nexport var identity = {\r\n  translateX: 0,\r\n  translateY: 0,\r\n  rotate: 0,\r\n  skewX: 0,\r\n  scaleX: 1,\r\n  scaleY: 1\r\n};\r\n\r\nexport default function(a, b, c, d, e, f) {\r\n  var scaleX, scaleY, skewX;\r\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\r\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\r\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\r\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\r\n  return {\r\n    translateX: e,\r\n    translateY: f,\r\n    rotate: Math.atan2(b, a) * degrees,\r\n    skewX: Math.atan(skewX) * degrees,\r\n    scaleX: scaleX,\r\n    scaleY: scaleY\r\n  };\r\n}\r\n","import decompose, {identity} from \"./decompose.js\";\r\n\r\nvar svgNode;\r\n\r\n/* eslint-disable no-undef */\r\nexport function parseCss(value) {\r\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\r\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\r\n}\r\n\r\nexport function parseSvg(value) {\r\n  if (value == null) return identity;\r\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\r\n  svgNode.setAttribute(\"transform\", value);\r\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\r\n  value = value.matrix;\r\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\r\n}\r\n","import number from \"../number.js\";\r\nimport {parseCss, parseSvg} from \"./parse.js\";\r\n\r\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\r\n\r\n  function pop(s) {\r\n    return s.length ? s.pop() + \" \" : \"\";\r\n  }\r\n\r\n  function translate(xa, ya, xb, yb, s, q) {\r\n    if (xa !== xb || ya !== yb) {\r\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\r\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\r\n    } else if (xb || yb) {\r\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\r\n    }\r\n  }\r\n\r\n  function rotate(a, b, s, q) {\r\n    if (a !== b) {\r\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\r\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\r\n    } else if (b) {\r\n      s.push(pop(s) + \"rotate(\" + b + degParen);\r\n    }\r\n  }\r\n\r\n  function skewX(a, b, s, q) {\r\n    if (a !== b) {\r\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\r\n    } else if (b) {\r\n      s.push(pop(s) + \"skewX(\" + b + degParen);\r\n    }\r\n  }\r\n\r\n  function scale(xa, ya, xb, yb, s, q) {\r\n    if (xa !== xb || ya !== yb) {\r\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\r\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\r\n    } else if (xb !== 1 || yb !== 1) {\r\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\r\n    }\r\n  }\r\n\r\n  return function(a, b) {\r\n    var s = [], // string constants and placeholders\r\n        q = []; // number interpolators\r\n    a = parse(a), b = parse(b);\r\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\r\n    rotate(a.rotate, b.rotate, s, q);\r\n    skewX(a.skewX, b.skewX, s, q);\r\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\r\n    a = b = null; // gc\r\n    return function(t) {\r\n      var i = -1, n = q.length, o;\r\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\r\n      return s.join(\"\");\r\n    };\r\n  };\r\n}\r\n\r\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\r\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\r\n","var epsilon2 = 1e-12;\r\n\r\nfunction cosh(x) {\r\n  return ((x = Math.exp(x)) + 1 / x) / 2;\r\n}\r\n\r\nfunction sinh(x) {\r\n  return ((x = Math.exp(x)) - 1 / x) / 2;\r\n}\r\n\r\nfunction tanh(x) {\r\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\r\n}\r\n\r\nexport default (function zoomRho(rho, rho2, rho4) {\r\n\r\n  // p0 = [ux0, uy0, w0]\r\n  // p1 = [ux1, uy1, w1]\r\n  function zoom(p0, p1) {\r\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\r\n        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\r\n        dx = ux1 - ux0,\r\n        dy = uy1 - uy0,\r\n        d2 = dx * dx + dy * dy,\r\n        i,\r\n        S;\r\n\r\n    // Special case for u0 ≅ u1.\r\n    if (d2 < epsilon2) {\r\n      S = Math.log(w1 / w0) / rho;\r\n      i = function(t) {\r\n        return [\r\n          ux0 + t * dx,\r\n          uy0 + t * dy,\r\n          w0 * Math.exp(rho * t * S)\r\n        ];\r\n      }\r\n    }\r\n\r\n    // General case.\r\n    else {\r\n      var d1 = Math.sqrt(d2),\r\n          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\r\n          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\r\n          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\r\n          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\r\n      S = (r1 - r0) / rho;\r\n      i = function(t) {\r\n        var s = t * S,\r\n            coshr0 = cosh(r0),\r\n            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\r\n        return [\r\n          ux0 + u * dx,\r\n          uy0 + u * dy,\r\n          w0 * coshr0 / cosh(rho * s + r0)\r\n        ];\r\n      }\r\n    }\r\n\r\n    i.duration = S * 1000 * rho / Math.SQRT2;\r\n\r\n    return i;\r\n  }\r\n\r\n  zoom.rho = function(_) {\r\n    var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\r\n    return zoomRho(_1, _2, _4);\r\n  };\r\n\r\n  return zoom;\r\n})(Math.SQRT2, 2, 4);\r\n","import {hsl as colorHsl} from \"d3-color\";\r\nimport color, {hue} from \"./color.js\";\r\n\r\nfunction hsl(hue) {\r\n  return function(start, end) {\r\n    var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\r\n        s = color(start.s, end.s),\r\n        l = color(start.l, end.l),\r\n        opacity = color(start.opacity, end.opacity);\r\n    return function(t) {\r\n      start.h = h(t);\r\n      start.s = s(t);\r\n      start.l = l(t);\r\n      start.opacity = opacity(t);\r\n      return start + \"\";\r\n    };\r\n  }\r\n}\r\n\r\nexport default hsl(hue);\r\nexport var hslLong = hsl(color);\r\n","import {hcl as colorHcl} from \"d3-color\";\r\nimport color, {hue} from \"./color.js\";\r\n\r\nfunction hcl(hue) {\r\n  return function(start, end) {\r\n    var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\r\n        c = color(start.c, end.c),\r\n        l = color(start.l, end.l),\r\n        opacity = color(start.opacity, end.opacity);\r\n    return function(t) {\r\n      start.h = h(t);\r\n      start.c = c(t);\r\n      start.l = l(t);\r\n      start.opacity = opacity(t);\r\n      return start + \"\";\r\n    };\r\n  }\r\n}\r\n\r\nexport default hcl(hue);\r\nexport var hclLong = hcl(color);\r\n","import {cubehelix as colorCubehelix} from \"d3-color\";\r\nimport color, {hue} from \"./color.js\";\r\n\r\nfunction cubehelix(hue) {\r\n  return (function cubehelixGamma(y) {\r\n    y = +y;\r\n\r\n    function cubehelix(start, end) {\r\n      var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\r\n          s = color(start.s, end.s),\r\n          l = color(start.l, end.l),\r\n          opacity = color(start.opacity, end.opacity);\r\n      return function(t) {\r\n        start.h = h(t);\r\n        start.s = s(t);\r\n        start.l = l(Math.pow(t, y));\r\n        start.opacity = opacity(t);\r\n        return start + \"\";\r\n      };\r\n    }\r\n\r\n    cubehelix.gamma = cubehelixGamma;\r\n\r\n    return cubehelix;\r\n  })(1);\r\n}\r\n\r\nexport default cubehelix(hue);\r\nexport var cubehelixLong = cubehelix(color);\r\n","import {default as value} from \"./value.js\";\r\n\r\nexport default function piecewise(interpolate, values) {\r\n  if (values === undefined) values = interpolate, interpolate = value;\r\n  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\r\n  while (i < n) I[i] = interpolate(v, v = values[++i]);\r\n  return function(t) {\r\n    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\r\n    return I[i](t - i);\r\n  };\r\n}\r\n","var frame = 0, // is an animation frame pending?\r\n    timeout = 0, // is a timeout pending?\r\n    interval = 0, // are any timers active?\r\n    pokeDelay = 1000, // how frequently we check for clock skew\r\n    taskHead,\r\n    taskTail,\r\n    clockLast = 0,\r\n    clockNow = 0,\r\n    clockSkew = 0,\r\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\r\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\r\n\r\nexport function now() {\r\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\r\n}\r\n\r\nfunction clearNow() {\r\n  clockNow = 0;\r\n}\r\n\r\nexport function Timer() {\r\n  this._call =\r\n  this._time =\r\n  this._next = null;\r\n}\r\n\r\nTimer.prototype = timer.prototype = {\r\n  constructor: Timer,\r\n  restart: function(callback, delay, time) {\r\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\r\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\r\n    if (!this._next && taskTail !== this) {\r\n      if (taskTail) taskTail._next = this;\r\n      else taskHead = this;\r\n      taskTail = this;\r\n    }\r\n    this._call = callback;\r\n    this._time = time;\r\n    sleep();\r\n  },\r\n  stop: function() {\r\n    if (this._call) {\r\n      this._call = null;\r\n      this._time = Infinity;\r\n      sleep();\r\n    }\r\n  }\r\n};\r\n\r\nexport function timer(callback, delay, time) {\r\n  var t = new Timer;\r\n  t.restart(callback, delay, time);\r\n  return t;\r\n}\r\n\r\nexport function timerFlush() {\r\n  now(); // Get the current time, if not already set.\r\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\r\n  var t = taskHead, e;\r\n  while (t) {\r\n    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\r\n    t = t._next;\r\n  }\r\n  --frame;\r\n}\r\n\r\nfunction wake() {\r\n  clockNow = (clockLast = clock.now()) + clockSkew;\r\n  frame = timeout = 0;\r\n  try {\r\n    timerFlush();\r\n  } finally {\r\n    frame = 0;\r\n    nap();\r\n    clockNow = 0;\r\n  }\r\n}\r\n\r\nfunction poke() {\r\n  var now = clock.now(), delay = now - clockLast;\r\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\r\n}\r\n\r\nfunction nap() {\r\n  var t0, t1 = taskHead, t2, time = Infinity;\r\n  while (t1) {\r\n    if (t1._call) {\r\n      if (time > t1._time) time = t1._time;\r\n      t0 = t1, t1 = t1._next;\r\n    } else {\r\n      t2 = t1._next, t1._next = null;\r\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\r\n    }\r\n  }\r\n  taskTail = t0;\r\n  sleep(time);\r\n}\r\n\r\nfunction sleep(time) {\r\n  if (frame) return; // Soonest alarm already set, or will be.\r\n  if (timeout) timeout = clearTimeout(timeout);\r\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\r\n  if (delay > 24) {\r\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\r\n    if (interval) interval = clearInterval(interval);\r\n  } else {\r\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\r\n    frame = 1, setFrame(wake);\r\n  }\r\n}\r\n","import {Timer} from \"./timer.js\";\r\n\r\nexport default function(callback, delay, time) {\r\n  var t = new Timer;\r\n  delay = delay == null ? 0 : +delay;\r\n  t.restart(elapsed => {\r\n    t.stop();\r\n    callback(elapsed + delay);\r\n  }, delay, time);\r\n  return t;\r\n}\r\n","import {dispatch} from \"d3-dispatch\";\r\nimport {timer, timeout} from \"d3-timer\";\r\n\r\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\r\nvar emptyTween = [];\r\n\r\nexport var CREATED = 0;\r\nexport var SCHEDULED = 1;\r\nexport var STARTING = 2;\r\nexport var STARTED = 3;\r\nexport var RUNNING = 4;\r\nexport var ENDING = 5;\r\nexport var ENDED = 6;\r\n\r\nexport default function(node, name, id, index, group, timing) {\r\n  var schedules = node.__transition;\r\n  if (!schedules) node.__transition = {};\r\n  else if (id in schedules) return;\r\n  create(node, id, {\r\n    name: name,\r\n    index: index, // For context during callback.\r\n    group: group, // For context during callback.\r\n    on: emptyOn,\r\n    tween: emptyTween,\r\n    time: timing.time,\r\n    delay: timing.delay,\r\n    duration: timing.duration,\r\n    ease: timing.ease,\r\n    timer: null,\r\n    state: CREATED\r\n  });\r\n}\r\n\r\nexport function init(node, id) {\r\n  var schedule = get(node, id);\r\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\r\n  return schedule;\r\n}\r\n\r\nexport function set(node, id) {\r\n  var schedule = get(node, id);\r\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\r\n  return schedule;\r\n}\r\n\r\nexport function get(node, id) {\r\n  var schedule = node.__transition;\r\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\r\n  return schedule;\r\n}\r\n\r\nfunction create(node, id, self) {\r\n  var schedules = node.__transition,\r\n      tween;\r\n\r\n  // Initialize the self timer when the transition is created.\r\n  // Note the actual delay is not known until the first callback!\r\n  schedules[id] = self;\r\n  self.timer = timer(schedule, 0, self.time);\r\n\r\n  function schedule(elapsed) {\r\n    self.state = SCHEDULED;\r\n    self.timer.restart(start, self.delay, self.time);\r\n\r\n    // If the elapsed delay is less than our first sleep, start immediately.\r\n    if (self.delay <= elapsed) start(elapsed - self.delay);\r\n  }\r\n\r\n  function start(elapsed) {\r\n    var i, j, n, o;\r\n\r\n    // If the state is not SCHEDULED, then we previously errored on start.\r\n    if (self.state !== SCHEDULED) return stop();\r\n\r\n    for (i in schedules) {\r\n      o = schedules[i];\r\n      if (o.name !== self.name) continue;\r\n\r\n      // While this element already has a starting transition during this frame,\r\n      // defer starting an interrupting transition until that transition has a\r\n      // chance to tick (and possibly end); see d3/d3-transition#54!\r\n      if (o.state === STARTED) return timeout(start);\r\n\r\n      // Interrupt the active transition, if any.\r\n      if (o.state === RUNNING) {\r\n        o.state = ENDED;\r\n        o.timer.stop();\r\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\r\n        delete schedules[i];\r\n      }\r\n\r\n      // Cancel any pre-empted transitions.\r\n      else if (+i < id) {\r\n        o.state = ENDED;\r\n        o.timer.stop();\r\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\r\n        delete schedules[i];\r\n      }\r\n    }\r\n\r\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\r\n    // Note the transition may be canceled after start and before the first tick!\r\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\r\n    // Assuming this is successful, subsequent callbacks go straight to tick.\r\n    timeout(function() {\r\n      if (self.state === STARTED) {\r\n        self.state = RUNNING;\r\n        self.timer.restart(tick, self.delay, self.time);\r\n        tick(elapsed);\r\n      }\r\n    });\r\n\r\n    // Dispatch the start event.\r\n    // Note this must be done before the tween are initialized.\r\n    self.state = STARTING;\r\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\r\n    if (self.state !== STARTING) return; // interrupted\r\n    self.state = STARTED;\r\n\r\n    // Initialize the tween, deleting null tween.\r\n    tween = new Array(n = self.tween.length);\r\n    for (i = 0, j = -1; i < n; ++i) {\r\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\r\n        tween[++j] = o;\r\n      }\r\n    }\r\n    tween.length = j + 1;\r\n  }\r\n\r\n  function tick(elapsed) {\r\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\r\n        i = -1,\r\n        n = tween.length;\r\n\r\n    while (++i < n) {\r\n      tween[i].call(node, t);\r\n    }\r\n\r\n    // Dispatch the end event.\r\n    if (self.state === ENDING) {\r\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\r\n      stop();\r\n    }\r\n  }\r\n\r\n  function stop() {\r\n    self.state = ENDED;\r\n    self.timer.stop();\r\n    delete schedules[id];\r\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\r\n    delete node.__transition;\r\n  }\r\n}\r\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\r\n\r\nexport default function(node, name) {\r\n  var schedules = node.__transition,\r\n      schedule,\r\n      active,\r\n      empty = true,\r\n      i;\r\n\r\n  if (!schedules) return;\r\n\r\n  name = name == null ? null : name + \"\";\r\n\r\n  for (i in schedules) {\r\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\r\n    active = schedule.state > STARTING && schedule.state < ENDING;\r\n    schedule.state = ENDED;\r\n    schedule.timer.stop();\r\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\r\n    delete schedules[i];\r\n  }\r\n\r\n  if (empty) delete node.__transition;\r\n}\r\n","import {get, set} from \"./schedule.js\";\r\n\r\nfunction tweenRemove(id, name) {\r\n  var tween0, tween1;\r\n  return function() {\r\n    var schedule = set(this, id),\r\n        tween = schedule.tween;\r\n\r\n    // If this node shared tween with the previous node,\r\n    // just assign the updated shared tween and we’re done!\r\n    // Otherwise, copy-on-write.\r\n    if (tween !== tween0) {\r\n      tween1 = tween0 = tween;\r\n      for (var i = 0, n = tween1.length; i < n; ++i) {\r\n        if (tween1[i].name === name) {\r\n          tween1 = tween1.slice();\r\n          tween1.splice(i, 1);\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    schedule.tween = tween1;\r\n  };\r\n}\r\n\r\nfunction tweenFunction(id, name, value) {\r\n  var tween0, tween1;\r\n  if (typeof value !== \"function\") throw new Error;\r\n  return function() {\r\n    var schedule = set(this, id),\r\n        tween = schedule.tween;\r\n\r\n    // If this node shared tween with the previous node,\r\n    // just assign the updated shared tween and we’re done!\r\n    // Otherwise, copy-on-write.\r\n    if (tween !== tween0) {\r\n      tween1 = (tween0 = tween).slice();\r\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\r\n        if (tween1[i].name === name) {\r\n          tween1[i] = t;\r\n          break;\r\n        }\r\n      }\r\n      if (i === n) tween1.push(t);\r\n    }\r\n\r\n    schedule.tween = tween1;\r\n  };\r\n}\r\n\r\nexport default function(name, value) {\r\n  var id = this._id;\r\n\r\n  name += \"\";\r\n\r\n  if (arguments.length < 2) {\r\n    var tween = get(this.node(), id).tween;\r\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\r\n      if ((t = tween[i]).name === name) {\r\n        return t.value;\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\r\n}\r\n\r\nexport function tweenValue(transition, name, value) {\r\n  var id = transition._id;\r\n\r\n  transition.each(function() {\r\n    var schedule = set(this, id);\r\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\r\n  });\r\n\r\n  return function(node) {\r\n    return get(node, id).value[name];\r\n  };\r\n}\r\n","import {color} from \"d3-color\";\r\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\r\n\r\nexport default function(a, b) {\r\n  var c;\r\n  return (typeof b === \"number\" ? interpolateNumber\r\n      : b instanceof color ? interpolateRgb\r\n      : (c = color(b)) ? (b = c, interpolateRgb)\r\n      : interpolateString)(a, b);\r\n}\r\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\r\nimport {namespace} from \"d3-selection\";\r\nimport {tweenValue} from \"./tween.js\";\r\nimport interpolate from \"./interpolate.js\";\r\n\r\nfunction attrRemove(name) {\r\n  return function() {\r\n    this.removeAttribute(name);\r\n  };\r\n}\r\n\r\nfunction attrRemoveNS(fullname) {\r\n  return function() {\r\n    this.removeAttributeNS(fullname.space, fullname.local);\r\n  };\r\n}\r\n\r\nfunction attrConstant(name, interpolate, value1) {\r\n  var string00,\r\n      string1 = value1 + \"\",\r\n      interpolate0;\r\n  return function() {\r\n    var string0 = this.getAttribute(name);\r\n    return string0 === string1 ? null\r\n        : string0 === string00 ? interpolate0\r\n        : interpolate0 = interpolate(string00 = string0, value1);\r\n  };\r\n}\r\n\r\nfunction attrConstantNS(fullname, interpolate, value1) {\r\n  var string00,\r\n      string1 = value1 + \"\",\r\n      interpolate0;\r\n  return function() {\r\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\r\n    return string0 === string1 ? null\r\n        : string0 === string00 ? interpolate0\r\n        : interpolate0 = interpolate(string00 = string0, value1);\r\n  };\r\n}\r\n\r\nfunction attrFunction(name, interpolate, value) {\r\n  var string00,\r\n      string10,\r\n      interpolate0;\r\n  return function() {\r\n    var string0, value1 = value(this), string1;\r\n    if (value1 == null) return void this.removeAttribute(name);\r\n    string0 = this.getAttribute(name);\r\n    string1 = value1 + \"\";\r\n    return string0 === string1 ? null\r\n        : string0 === string00 && string1 === string10 ? interpolate0\r\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\r\n  };\r\n}\r\n\r\nfunction attrFunctionNS(fullname, interpolate, value) {\r\n  var string00,\r\n      string10,\r\n      interpolate0;\r\n  return function() {\r\n    var string0, value1 = value(this), string1;\r\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\r\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\r\n    string1 = value1 + \"\";\r\n    return string0 === string1 ? null\r\n        : string0 === string00 && string1 === string10 ? interpolate0\r\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\r\n  };\r\n}\r\n\r\nexport default function(name, value) {\r\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\r\n  return this.attrTween(name, typeof value === \"function\"\r\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\r\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\r\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\r\n}\r\n","import {namespace} from \"d3-selection\";\r\n\r\nfunction attrInterpolate(name, i) {\r\n  return function(t) {\r\n    this.setAttribute(name, i.call(this, t));\r\n  };\r\n}\r\n\r\nfunction attrInterpolateNS(fullname, i) {\r\n  return function(t) {\r\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\r\n  };\r\n}\r\n\r\nfunction attrTweenNS(fullname, value) {\r\n  var t0, i0;\r\n  function tween() {\r\n    var i = value.apply(this, arguments);\r\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\r\n    return t0;\r\n  }\r\n  tween._value = value;\r\n  return tween;\r\n}\r\n\r\nfunction attrTween(name, value) {\r\n  var t0, i0;\r\n  function tween() {\r\n    var i = value.apply(this, arguments);\r\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\r\n    return t0;\r\n  }\r\n  tween._value = value;\r\n  return tween;\r\n}\r\n\r\nexport default function(name, value) {\r\n  var key = \"attr.\" + name;\r\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\r\n  if (value == null) return this.tween(key, null);\r\n  if (typeof value !== \"function\") throw new Error;\r\n  var fullname = namespace(name);\r\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\r\n}\r\n","import {get, init} from \"./schedule.js\";\r\n\r\nfunction delayFunction(id, value) {\r\n  return function() {\r\n    init(this, id).delay = +value.apply(this, arguments);\r\n  };\r\n}\r\n\r\nfunction delayConstant(id, value) {\r\n  return value = +value, function() {\r\n    init(this, id).delay = value;\r\n  };\r\n}\r\n\r\nexport default function(value) {\r\n  var id = this._id;\r\n\r\n  return arguments.length\r\n      ? this.each((typeof value === \"function\"\r\n          ? delayFunction\r\n          : delayConstant)(id, value))\r\n      : get(this.node(), id).delay;\r\n}\r\n","import {get, set} from \"./schedule.js\";\r\n\r\nfunction durationFunction(id, value) {\r\n  return function() {\r\n    set(this, id).duration = +value.apply(this, arguments);\r\n  };\r\n}\r\n\r\nfunction durationConstant(id, value) {\r\n  return value = +value, function() {\r\n    set(this, id).duration = value;\r\n  };\r\n}\r\n\r\nexport default function(value) {\r\n  var id = this._id;\r\n\r\n  return arguments.length\r\n      ? this.each((typeof value === \"function\"\r\n          ? durationFunction\r\n          : durationConstant)(id, value))\r\n      : get(this.node(), id).duration;\r\n}\r\n","import {selection} from \"d3-selection\";\r\n\r\nvar Selection = selection.prototype.constructor;\r\n\r\nexport default function() {\r\n  return new Selection(this._groups, this._parents);\r\n}\r\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\r\nimport {style} from \"d3-selection\";\r\nimport {set} from \"./schedule.js\";\r\nimport {tweenValue} from \"./tween.js\";\r\nimport interpolate from \"./interpolate.js\";\r\n\r\nfunction styleNull(name, interpolate) {\r\n  var string00,\r\n      string10,\r\n      interpolate0;\r\n  return function() {\r\n    var string0 = style(this, name),\r\n        string1 = (this.style.removeProperty(name), style(this, name));\r\n    return string0 === string1 ? null\r\n        : string0 === string00 && string1 === string10 ? interpolate0\r\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\r\n  };\r\n}\r\n\r\nfunction styleRemove(name) {\r\n  return function() {\r\n    this.style.removeProperty(name);\r\n  };\r\n}\r\n\r\nfunction styleConstant(name, interpolate, value1) {\r\n  var string00,\r\n      string1 = value1 + \"\",\r\n      interpolate0;\r\n  return function() {\r\n    var string0 = style(this, name);\r\n    return string0 === string1 ? null\r\n        : string0 === string00 ? interpolate0\r\n        : interpolate0 = interpolate(string00 = string0, value1);\r\n  };\r\n}\r\n\r\nfunction styleFunction(name, interpolate, value) {\r\n  var string00,\r\n      string10,\r\n      interpolate0;\r\n  return function() {\r\n    var string0 = style(this, name),\r\n        value1 = value(this),\r\n        string1 = value1 + \"\";\r\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\r\n    return string0 === string1 ? null\r\n        : string0 === string00 && string1 === string10 ? interpolate0\r\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\r\n  };\r\n}\r\n\r\nfunction styleMaybeRemove(id, name) {\r\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\r\n  return function() {\r\n    var schedule = set(this, id),\r\n        on = schedule.on,\r\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\r\n\r\n    // If this node shared a dispatch with the previous node,\r\n    // just assign the updated shared dispatch and we’re done!\r\n    // Otherwise, copy-on-write.\r\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\r\n\r\n    schedule.on = on1;\r\n  };\r\n}\r\n\r\nexport default function(name, value, priority) {\r\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\r\n  return value == null ? this\r\n      .styleTween(name, styleNull(name, i))\r\n      .on(\"end.style.\" + name, styleRemove(name))\r\n    : typeof value === \"function\" ? this\r\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\r\n      .each(styleMaybeRemove(this._id, name))\r\n    : this\r\n      .styleTween(name, styleConstant(name, i, value), priority)\r\n      .on(\"end.style.\" + name, null);\r\n}\r\n","import {selection} from \"d3-selection\";\r\nimport transition_attr from \"./attr.js\";\r\nimport transition_attrTween from \"./attrTween.js\";\r\nimport transition_delay from \"./delay.js\";\r\nimport transition_duration from \"./duration.js\";\r\nimport transition_ease from \"./ease.js\";\r\nimport transition_easeVarying from \"./easeVarying.js\";\r\nimport transition_filter from \"./filter.js\";\r\nimport transition_merge from \"./merge.js\";\r\nimport transition_on from \"./on.js\";\r\nimport transition_remove from \"./remove.js\";\r\nimport transition_select from \"./select.js\";\r\nimport transition_selectAll from \"./selectAll.js\";\r\nimport transition_selection from \"./selection.js\";\r\nimport transition_style from \"./style.js\";\r\nimport transition_styleTween from \"./styleTween.js\";\r\nimport transition_text from \"./text.js\";\r\nimport transition_textTween from \"./textTween.js\";\r\nimport transition_transition from \"./transition.js\";\r\nimport transition_tween from \"./tween.js\";\r\nimport transition_end from \"./end.js\";\r\n\r\nvar id = 0;\r\n\r\nexport function Transition(groups, parents, name, id) {\r\n  this._groups = groups;\r\n  this._parents = parents;\r\n  this._name = name;\r\n  this._id = id;\r\n}\r\n\r\nexport default function transition(name) {\r\n  return selection().transition(name);\r\n}\r\n\r\nexport function newId() {\r\n  return ++id;\r\n}\r\n\r\nvar selection_prototype = selection.prototype;\r\n\r\nTransition.prototype = transition.prototype = {\r\n  constructor: Transition,\r\n  select: transition_select,\r\n  selectAll: transition_selectAll,\r\n  selectChild: selection_prototype.selectChild,\r\n  selectChildren: selection_prototype.selectChildren,\r\n  filter: transition_filter,\r\n  merge: transition_merge,\r\n  selection: transition_selection,\r\n  transition: transition_transition,\r\n  call: selection_prototype.call,\r\n  nodes: selection_prototype.nodes,\r\n  node: selection_prototype.node,\r\n  size: selection_prototype.size,\r\n  empty: selection_prototype.empty,\r\n  each: selection_prototype.each,\r\n  on: transition_on,\r\n  attr: transition_attr,\r\n  attrTween: transition_attrTween,\r\n  style: transition_style,\r\n  styleTween: transition_styleTween,\r\n  text: transition_text,\r\n  textTween: transition_textTween,\r\n  remove: transition_remove,\r\n  tween: transition_tween,\r\n  delay: transition_delay,\r\n  duration: transition_duration,\r\n  ease: transition_ease,\r\n  easeVarying: transition_easeVarying,\r\n  end: transition_end,\r\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\r\n};\r\n","import {selector} from \"d3-selection\";\r\nimport {Transition} from \"./index.js\";\r\nimport schedule, {get} from \"./schedule.js\";\r\n\r\nexport default function(select) {\r\n  var name = this._name,\r\n      id = this._id;\r\n\r\n  if (typeof select !== \"function\") select = selector(select);\r\n\r\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\r\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\r\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\r\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\r\n        subgroup[i] = subnode;\r\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\r\n      }\r\n    }\r\n  }\r\n\r\n  return new Transition(subgroups, this._parents, name, id);\r\n}\r\n","import {selectorAll} from \"d3-selection\";\r\nimport {Transition} from \"./index.js\";\r\nimport schedule, {get} from \"./schedule.js\";\r\n\r\nexport default function(select) {\r\n  var name = this._name,\r\n      id = this._id;\r\n\r\n  if (typeof select !== \"function\") select = selectorAll(select);\r\n\r\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\r\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\r\n      if (node = group[i]) {\r\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\r\n          if (child = children[k]) {\r\n            schedule(child, name, id, k, children, inherit);\r\n          }\r\n        }\r\n        subgroups.push(children);\r\n        parents.push(node);\r\n      }\r\n    }\r\n  }\r\n\r\n  return new Transition(subgroups, parents, name, id);\r\n}\r\n","import {matcher} from \"d3-selection\";\r\nimport {Transition} from \"./index.js\";\r\n\r\nexport default function(match) {\r\n  if (typeof match !== \"function\") match = matcher(match);\r\n\r\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\r\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\r\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\r\n        subgroup.push(node);\r\n      }\r\n    }\r\n  }\r\n\r\n  return new Transition(subgroups, this._parents, this._name, this._id);\r\n}\r\n","import {Transition} from \"./index.js\";\r\n\r\nexport default function(transition) {\r\n  if (transition._id !== this._id) throw new Error;\r\n\r\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\r\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\r\n      if (node = group0[i] || group1[i]) {\r\n        merge[i] = node;\r\n      }\r\n    }\r\n  }\r\n\r\n  for (; j < m0; ++j) {\r\n    merges[j] = groups0[j];\r\n  }\r\n\r\n  return new Transition(merges, this._parents, this._name, this._id);\r\n}\r\n","import {Transition, newId} from \"./index.js\";\r\nimport schedule, {get} from \"./schedule.js\";\r\n\r\nexport default function() {\r\n  var name = this._name,\r\n      id0 = this._id,\r\n      id1 = newId();\r\n\r\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\r\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\r\n      if (node = group[i]) {\r\n        var inherit = get(node, id0);\r\n        schedule(node, name, id1, i, group, {\r\n          time: inherit.time + inherit.delay + inherit.duration,\r\n          delay: 0,\r\n          duration: inherit.duration,\r\n          ease: inherit.ease\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  return new Transition(groups, this._parents, name, id1);\r\n}\r\n","import {get, set, init} from \"./schedule.js\";\r\n\r\nfunction start(name) {\r\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\r\n    var i = t.indexOf(\".\");\r\n    if (i >= 0) t = t.slice(0, i);\r\n    return !t || t === \"start\";\r\n  });\r\n}\r\n\r\nfunction onFunction(id, name, listener) {\r\n  var on0, on1, sit = start(name) ? init : set;\r\n  return function() {\r\n    var schedule = sit(this, id),\r\n        on = schedule.on;\r\n\r\n    // If this node shared a dispatch with the previous node,\r\n    // just assign the updated shared dispatch and we’re done!\r\n    // Otherwise, copy-on-write.\r\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\r\n\r\n    schedule.on = on1;\r\n  };\r\n}\r\n\r\nexport default function(name, listener) {\r\n  var id = this._id;\r\n\r\n  return arguments.length < 2\r\n      ? get(this.node(), id).on.on(name)\r\n      : this.each(onFunction(id, name, listener));\r\n}\r\n","function styleInterpolate(name, i, priority) {\r\n  return function(t) {\r\n    this.style.setProperty(name, i.call(this, t), priority);\r\n  };\r\n}\r\n\r\nfunction styleTween(name, value, priority) {\r\n  var t, i0;\r\n  function tween() {\r\n    var i = value.apply(this, arguments);\r\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\r\n    return t;\r\n  }\r\n  tween._value = value;\r\n  return tween;\r\n}\r\n\r\nexport default function(name, value, priority) {\r\n  var key = \"style.\" + (name += \"\");\r\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\r\n  if (value == null) return this.tween(key, null);\r\n  if (typeof value !== \"function\") throw new Error;\r\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\r\n}\r\n","import {tweenValue} from \"./tween.js\";\r\n\r\nfunction textConstant(value) {\r\n  return function() {\r\n    this.textContent = value;\r\n  };\r\n}\r\n\r\nfunction textFunction(value) {\r\n  return function() {\r\n    var value1 = value(this);\r\n    this.textContent = value1 == null ? \"\" : value1;\r\n  };\r\n}\r\n\r\nexport default function(value) {\r\n  return this.tween(\"text\", typeof value === \"function\"\r\n      ? textFunction(tweenValue(this, \"text\", value))\r\n      : textConstant(value == null ? \"\" : value + \"\"));\r\n}\r\n","function textInterpolate(i) {\r\n  return function(t) {\r\n    this.textContent = i.call(this, t);\r\n  };\r\n}\r\n\r\nfunction textTween(value) {\r\n  var t0, i0;\r\n  function tween() {\r\n    var i = value.apply(this, arguments);\r\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\r\n    return t0;\r\n  }\r\n  tween._value = value;\r\n  return tween;\r\n}\r\n\r\nexport default function(value) {\r\n  var key = \"text\";\r\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\r\n  if (value == null) return this.tween(key, null);\r\n  if (typeof value !== \"function\") throw new Error;\r\n  return this.tween(key, textTween(value));\r\n}\r\n","function removeFunction(id) {\r\n  return function() {\r\n    var parent = this.parentNode;\r\n    for (var i in this.__transition) if (+i !== id) return;\r\n    if (parent) parent.removeChild(this);\r\n  };\r\n}\r\n\r\nexport default function() {\r\n  return this.on(\"end.remove\", removeFunction(this._id));\r\n}\r\n","import {get, set} from \"./schedule.js\";\r\n\r\nfunction easeConstant(id, value) {\r\n  if (typeof value !== \"function\") throw new Error;\r\n  return function() {\r\n    set(this, id).ease = value;\r\n  };\r\n}\r\n\r\nexport default function(value) {\r\n  var id = this._id;\r\n\r\n  return arguments.length\r\n      ? this.each(easeConstant(id, value))\r\n      : get(this.node(), id).ease;\r\n}\r\n","import {set} from \"./schedule.js\";\r\n\r\nfunction easeVarying(id, value) {\r\n  return function() {\r\n    var v = value.apply(this, arguments);\r\n    if (typeof v !== \"function\") throw new Error;\r\n    set(this, id).ease = v;\r\n  };\r\n}\r\n\r\nexport default function(value) {\r\n  if (typeof value !== \"function\") throw new Error;\r\n  return this.each(easeVarying(this._id, value));\r\n}\r\n","import {set} from \"./schedule.js\";\r\n\r\nexport default function() {\r\n  var on0, on1, that = this, id = that._id, size = that.size();\r\n  return new Promise(function(resolve, reject) {\r\n    var cancel = {value: reject},\r\n        end = {value: function() { if (--size === 0) resolve(); }};\r\n\r\n    that.each(function() {\r\n      var schedule = set(this, id),\r\n          on = schedule.on;\r\n\r\n      // If this node shared a dispatch with the previous node,\r\n      // just assign the updated shared dispatch and we’re done!\r\n      // Otherwise, copy-on-write.\r\n      if (on !== on0) {\r\n        on1 = (on0 = on).copy();\r\n        on1._.cancel.push(cancel);\r\n        on1._.interrupt.push(cancel);\r\n        on1._.end.push(end);\r\n      }\r\n\r\n      schedule.on = on1;\r\n    });\r\n\r\n    // The selection was empty, resolve end immediately\r\n    if (size === 0) resolve();\r\n  });\r\n}\r\n","export function quadIn(t) {\r\n  return t * t;\r\n}\r\n\r\nexport function quadOut(t) {\r\n  return t * (2 - t);\r\n}\r\n\r\nexport function quadInOut(t) {\r\n  return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\r\n}\r\n","export function cubicIn(t) {\r\n  return t * t * t;\r\n}\r\n\r\nexport function cubicOut(t) {\r\n  return --t * t * t + 1;\r\n}\r\n\r\nexport function cubicInOut(t) {\r\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\r\n}\r\n","var exponent = 3;\r\n\r\nexport var polyIn = (function custom(e) {\r\n  e = +e;\r\n\r\n  function polyIn(t) {\r\n    return Math.pow(t, e);\r\n  }\r\n\r\n  polyIn.exponent = custom;\r\n\r\n  return polyIn;\r\n})(exponent);\r\n\r\nexport var polyOut = (function custom(e) {\r\n  e = +e;\r\n\r\n  function polyOut(t) {\r\n    return 1 - Math.pow(1 - t, e);\r\n  }\r\n\r\n  polyOut.exponent = custom;\r\n\r\n  return polyOut;\r\n})(exponent);\r\n\r\nexport var polyInOut = (function custom(e) {\r\n  e = +e;\r\n\r\n  function polyInOut(t) {\r\n    return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\r\n  }\r\n\r\n  polyInOut.exponent = custom;\r\n\r\n  return polyInOut;\r\n})(exponent);\r\n","var pi = Math.PI,\r\n    halfPi = pi / 2;\r\n\r\nexport function sinIn(t) {\r\n  return (+t === 1) ? 1 : 1 - Math.cos(t * halfPi);\r\n}\r\n\r\nexport function sinOut(t) {\r\n  return Math.sin(t * halfPi);\r\n}\r\n\r\nexport function sinInOut(t) {\r\n  return (1 - Math.cos(pi * t)) / 2;\r\n}\r\n","// tpmt is two power minus ten times t scaled to [0,1]\r\nexport function tpmt(x) {\r\n  return (Math.pow(2, -10 * x) - 0.0009765625) * 1.0009775171065494;\r\n}\r\n","import {tpmt} from \"./math.js\";\r\n\r\nexport function expIn(t) {\r\n  return tpmt(1 - +t);\r\n}\r\n\r\nexport function expOut(t) {\r\n  return 1 - tpmt(t);\r\n}\r\n\r\nexport function expInOut(t) {\r\n  return ((t *= 2) <= 1 ? tpmt(1 - t) : 2 - tpmt(t - 1)) / 2;\r\n}\r\n","export function circleIn(t) {\r\n  return 1 - Math.sqrt(1 - t * t);\r\n}\r\n\r\nexport function circleOut(t) {\r\n  return Math.sqrt(1 - --t * t);\r\n}\r\n\r\nexport function circleInOut(t) {\r\n  return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\r\n}\r\n","var b1 = 4 / 11,\r\n    b2 = 6 / 11,\r\n    b3 = 8 / 11,\r\n    b4 = 3 / 4,\r\n    b5 = 9 / 11,\r\n    b6 = 10 / 11,\r\n    b7 = 15 / 16,\r\n    b8 = 21 / 22,\r\n    b9 = 63 / 64,\r\n    b0 = 1 / b1 / b1;\r\n\r\nexport function bounceIn(t) {\r\n  return 1 - bounceOut(1 - t);\r\n}\r\n\r\nexport function bounceOut(t) {\r\n  return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\r\n}\r\n\r\nexport function bounceInOut(t) {\r\n  return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\r\n}\r\n","var overshoot = 1.70158;\r\n\r\nexport var backIn = (function custom(s) {\r\n  s = +s;\r\n\r\n  function backIn(t) {\r\n    return (t = +t) * t * (s * (t - 1) + t);\r\n  }\r\n\r\n  backIn.overshoot = custom;\r\n\r\n  return backIn;\r\n})(overshoot);\r\n\r\nexport var backOut = (function custom(s) {\r\n  s = +s;\r\n\r\n  function backOut(t) {\r\n    return --t * t * ((t + 1) * s + t) + 1;\r\n  }\r\n\r\n  backOut.overshoot = custom;\r\n\r\n  return backOut;\r\n})(overshoot);\r\n\r\nexport var backInOut = (function custom(s) {\r\n  s = +s;\r\n\r\n  function backInOut(t) {\r\n    return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\r\n  }\r\n\r\n  backInOut.overshoot = custom;\r\n\r\n  return backInOut;\r\n})(overshoot);\r\n","import {tpmt} from \"./math.js\";\r\n\r\nvar tau = 2 * Math.PI,\r\n    amplitude = 1,\r\n    period = 0.3;\r\n\r\nexport var elasticIn = (function custom(a, p) {\r\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\r\n\r\n  function elasticIn(t) {\r\n    return a * tpmt(-(--t)) * Math.sin((s - t) / p);\r\n  }\r\n\r\n  elasticIn.amplitude = function(a) { return custom(a, p * tau); };\r\n  elasticIn.period = function(p) { return custom(a, p); };\r\n\r\n  return elasticIn;\r\n})(amplitude, period);\r\n\r\nexport var elasticOut = (function custom(a, p) {\r\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\r\n\r\n  function elasticOut(t) {\r\n    return 1 - a * tpmt(t = +t) * Math.sin((t + s) / p);\r\n  }\r\n\r\n  elasticOut.amplitude = function(a) { return custom(a, p * tau); };\r\n  elasticOut.period = function(p) { return custom(a, p); };\r\n\r\n  return elasticOut;\r\n})(amplitude, period);\r\n\r\nexport var elasticInOut = (function custom(a, p) {\r\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\r\n\r\n  function elasticInOut(t) {\r\n    return ((t = t * 2 - 1) < 0\r\n        ? a * tpmt(-t) * Math.sin((s - t) / p)\r\n        : 2 - a * tpmt(t) * Math.sin((s + t) / p)) / 2;\r\n  }\r\n\r\n  elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\r\n  elasticInOut.period = function(p) { return custom(a, p); };\r\n\r\n  return elasticInOut;\r\n})(amplitude, period);\r\n","import {Transition, newId} from \"../transition/index.js\";\r\nimport schedule from \"../transition/schedule.js\";\r\nimport {easeCubicInOut} from \"d3-ease\";\r\nimport {now} from \"d3-timer\";\r\n\r\nvar defaultTiming = {\r\n  time: null, // Set on use.\r\n  delay: 0,\r\n  duration: 250,\r\n  ease: easeCubicInOut\r\n};\r\n\r\nfunction inherit(node, id) {\r\n  var timing;\r\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\r\n    if (!(node = node.parentNode)) {\r\n      throw new Error(`transition ${id} not found`);\r\n    }\r\n  }\r\n  return timing;\r\n}\r\n\r\nexport default function(name) {\r\n  var id,\r\n      timing;\r\n\r\n  if (name instanceof Transition) {\r\n    id = name._id, name = name._name;\r\n  } else {\r\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\r\n  }\r\n\r\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\r\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\r\n      if (node = group[i]) {\r\n        schedule(node, name, id, i, group, timing || inherit(node, id));\r\n      }\r\n    }\r\n  }\r\n\r\n  return new Transition(groups, this._parents, name, id);\r\n}\r\n","import {selection} from \"d3-selection\";\r\nimport selection_interrupt from \"./interrupt.js\";\r\nimport selection_transition from \"./transition.js\";\r\n\r\nselection.prototype.interrupt = selection_interrupt;\r\nselection.prototype.transition = selection_transition;\r\n","import interrupt from \"../interrupt.js\";\r\n\r\nexport default function(name) {\r\n  return this.each(function() {\r\n    interrupt(this, name);\r\n  });\r\n}\r\n","import {Transition} from \"./transition/index.js\";\r\nimport {SCHEDULED} from \"./transition/schedule.js\";\r\n\r\nvar root = [null];\r\n\r\nexport default function(node, name) {\r\n  var schedules = node.__transition,\r\n      schedule,\r\n      i;\r\n\r\n  if (schedules) {\r\n    name = name == null ? null : name + \"\";\r\n    for (i in schedules) {\r\n      if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\r\n        return new Transition([[node]], root, name, +i);\r\n      }\r\n    }\r\n  }\r\n\r\n  return null;\r\n}\r\n","export default x => () => x;\r\n","export default function BrushEvent(type, {\r\n  sourceEvent,\r\n  target,\r\n  selection,\r\n  mode,\r\n  dispatch\r\n}) {\r\n  Object.defineProperties(this, {\r\n    type: {value: type, enumerable: true, configurable: true},\r\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\r\n    target: {value: target, enumerable: true, configurable: true},\r\n    selection: {value: selection, enumerable: true, configurable: true},\r\n    mode: {value: mode, enumerable: true, configurable: true},\r\n    _: {value: dispatch}\r\n  });\r\n}\r\n","export function nopropagation(event) {\r\n  event.stopImmediatePropagation();\r\n}\r\n\r\nexport default function(event) {\r\n  event.preventDefault();\r\n  event.stopImmediatePropagation();\r\n}\r\n","import {dispatch} from \"d3-dispatch\";\r\nimport {dragDisable, dragEnable} from \"d3-drag\";\r\nimport {interpolate} from \"d3-interpolate\";\r\nimport {pointer, select} from \"d3-selection\";\r\nimport {interrupt} from \"d3-transition\";\r\nimport constant from \"./constant.js\";\r\nimport BrushEvent from \"./event.js\";\r\nimport noevent, {nopropagation} from \"./noevent.js\";\r\n\r\nvar MODE_DRAG = {name: \"drag\"},\r\n    MODE_SPACE = {name: \"space\"},\r\n    MODE_HANDLE = {name: \"handle\"},\r\n    MODE_CENTER = {name: \"center\"};\r\n\r\nconst {abs, max, min} = Math;\r\n\r\nfunction number1(e) {\r\n  return [+e[0], +e[1]];\r\n}\r\n\r\nfunction number2(e) {\r\n  return [number1(e[0]), number1(e[1])];\r\n}\r\n\r\nvar X = {\r\n  name: \"x\",\r\n  handles: [\"w\", \"e\"].map(type),\r\n  input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\r\n  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\r\n};\r\n\r\nvar Y = {\r\n  name: \"y\",\r\n  handles: [\"n\", \"s\"].map(type),\r\n  input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\r\n  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\r\n};\r\n\r\nvar XY = {\r\n  name: \"xy\",\r\n  handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\r\n  input: function(xy) { return xy == null ? null : number2(xy); },\r\n  output: function(xy) { return xy; }\r\n};\r\n\r\nvar cursors = {\r\n  overlay: \"crosshair\",\r\n  selection: \"move\",\r\n  n: \"ns-resize\",\r\n  e: \"ew-resize\",\r\n  s: \"ns-resize\",\r\n  w: \"ew-resize\",\r\n  nw: \"nwse-resize\",\r\n  ne: \"nesw-resize\",\r\n  se: \"nwse-resize\",\r\n  sw: \"nesw-resize\"\r\n};\r\n\r\nvar flipX = {\r\n  e: \"w\",\r\n  w: \"e\",\r\n  nw: \"ne\",\r\n  ne: \"nw\",\r\n  se: \"sw\",\r\n  sw: \"se\"\r\n};\r\n\r\nvar flipY = {\r\n  n: \"s\",\r\n  s: \"n\",\r\n  nw: \"sw\",\r\n  ne: \"se\",\r\n  se: \"ne\",\r\n  sw: \"nw\"\r\n};\r\n\r\nvar signsX = {\r\n  overlay: +1,\r\n  selection: +1,\r\n  n: null,\r\n  e: +1,\r\n  s: null,\r\n  w: -1,\r\n  nw: -1,\r\n  ne: +1,\r\n  se: +1,\r\n  sw: -1\r\n};\r\n\r\nvar signsY = {\r\n  overlay: +1,\r\n  selection: +1,\r\n  n: -1,\r\n  e: null,\r\n  s: +1,\r\n  w: null,\r\n  nw: -1,\r\n  ne: -1,\r\n  se: +1,\r\n  sw: +1\r\n};\r\n\r\nfunction type(t) {\r\n  return {type: t};\r\n}\r\n\r\n// Ignore right-click, since that should open the context menu.\r\nfunction defaultFilter(event) {\r\n  return !event.ctrlKey && !event.button;\r\n}\r\n\r\nfunction defaultExtent() {\r\n  var svg = this.ownerSVGElement || this;\r\n  if (svg.hasAttribute(\"viewBox\")) {\r\n    svg = svg.viewBox.baseVal;\r\n    return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\r\n  }\r\n  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\r\n}\r\n\r\nfunction defaultTouchable() {\r\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\r\n}\r\n\r\n// Like d3.local, but with the name “__brush” rather than auto-generated.\r\nfunction local(node) {\r\n  while (!node.__brush) if (!(node = node.parentNode)) return;\r\n  return node.__brush;\r\n}\r\n\r\nfunction empty(extent) {\r\n  return extent[0][0] === extent[1][0]\r\n      || extent[0][1] === extent[1][1];\r\n}\r\n\r\nexport function brushSelection(node) {\r\n  var state = node.__brush;\r\n  return state ? state.dim.output(state.selection) : null;\r\n}\r\n\r\nexport function brushX() {\r\n  return brush(X);\r\n}\r\n\r\nexport function brushY() {\r\n  return brush(Y);\r\n}\r\n\r\nexport default function() {\r\n  return brush(XY);\r\n}\r\n\r\nfunction brush(dim) {\r\n  var extent = defaultExtent,\r\n      filter = defaultFilter,\r\n      touchable = defaultTouchable,\r\n      keys = true,\r\n      listeners = dispatch(\"start\", \"brush\", \"end\"),\r\n      handleSize = 6,\r\n      touchending;\r\n\r\n  function brush(group) {\r\n    var overlay = group\r\n        .property(\"__brush\", initialize)\r\n      .selectAll(\".overlay\")\r\n      .data([type(\"overlay\")]);\r\n\r\n    overlay.enter().append(\"rect\")\r\n        .attr(\"class\", \"overlay\")\r\n        .attr(\"pointer-events\", \"all\")\r\n        .attr(\"cursor\", cursors.overlay)\r\n      .merge(overlay)\r\n        .each(function() {\r\n          var extent = local(this).extent;\r\n          select(this)\r\n              .attr(\"x\", extent[0][0])\r\n              .attr(\"y\", extent[0][1])\r\n              .attr(\"width\", extent[1][0] - extent[0][0])\r\n              .attr(\"height\", extent[1][1] - extent[0][1]);\r\n        });\r\n\r\n    group.selectAll(\".selection\")\r\n      .data([type(\"selection\")])\r\n      .enter().append(\"rect\")\r\n        .attr(\"class\", \"selection\")\r\n        .attr(\"cursor\", cursors.selection)\r\n        .attr(\"fill\", \"#777\")\r\n        .attr(\"fill-opacity\", 0.3)\r\n        .attr(\"stroke\", \"#fff\")\r\n        .attr(\"shape-rendering\", \"crispEdges\");\r\n\r\n    var handle = group.selectAll(\".handle\")\r\n      .data(dim.handles, function(d) { return d.type; });\r\n\r\n    handle.exit().remove();\r\n\r\n    handle.enter().append(\"rect\")\r\n        .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\r\n        .attr(\"cursor\", function(d) { return cursors[d.type]; });\r\n\r\n    group\r\n        .each(redraw)\r\n        .attr(\"fill\", \"none\")\r\n        .attr(\"pointer-events\", \"all\")\r\n        .on(\"mousedown.brush\", started)\r\n      .filter(touchable)\r\n        .on(\"touchstart.brush\", started)\r\n        .on(\"touchmove.brush\", touchmoved)\r\n        .on(\"touchend.brush touchcancel.brush\", touchended)\r\n        .style(\"touch-action\", \"none\")\r\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\r\n  }\r\n\r\n  brush.move = function(group, selection, event) {\r\n    if (group.tween) {\r\n      group\r\n          .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\r\n          .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\r\n          .tween(\"brush\", function() {\r\n            var that = this,\r\n                state = that.__brush,\r\n                emit = emitter(that, arguments),\r\n                selection0 = state.selection,\r\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\r\n                i = interpolate(selection0, selection1);\r\n\r\n            function tween(t) {\r\n              state.selection = t === 1 && selection1 === null ? null : i(t);\r\n              redraw.call(that);\r\n              emit.brush();\r\n            }\r\n\r\n            return selection0 !== null && selection1 !== null ? tween : tween(1);\r\n          });\r\n    } else {\r\n      group\r\n          .each(function() {\r\n            var that = this,\r\n                args = arguments,\r\n                state = that.__brush,\r\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\r\n                emit = emitter(that, args).beforestart();\r\n\r\n            interrupt(that);\r\n            state.selection = selection1 === null ? null : selection1;\r\n            redraw.call(that);\r\n            emit.start(event).brush(event).end(event);\r\n          });\r\n    }\r\n  };\r\n\r\n  brush.clear = function(group, event) {\r\n    brush.move(group, null, event);\r\n  };\r\n\r\n  function redraw() {\r\n    var group = select(this),\r\n        selection = local(this).selection;\r\n\r\n    if (selection) {\r\n      group.selectAll(\".selection\")\r\n          .style(\"display\", null)\r\n          .attr(\"x\", selection[0][0])\r\n          .attr(\"y\", selection[0][1])\r\n          .attr(\"width\", selection[1][0] - selection[0][0])\r\n          .attr(\"height\", selection[1][1] - selection[0][1]);\r\n\r\n      group.selectAll(\".handle\")\r\n          .style(\"display\", null)\r\n          .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\r\n          .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\r\n          .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\r\n          .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\r\n    }\r\n\r\n    else {\r\n      group.selectAll(\".selection,.handle\")\r\n          .style(\"display\", \"none\")\r\n          .attr(\"x\", null)\r\n          .attr(\"y\", null)\r\n          .attr(\"width\", null)\r\n          .attr(\"height\", null);\r\n    }\r\n  }\r\n\r\n  function emitter(that, args, clean) {\r\n    var emit = that.__brush.emitter;\r\n    return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\r\n  }\r\n\r\n  function Emitter(that, args, clean) {\r\n    this.that = that;\r\n    this.args = args;\r\n    this.state = that.__brush;\r\n    this.active = 0;\r\n    this.clean = clean;\r\n  }\r\n\r\n  Emitter.prototype = {\r\n    beforestart: function() {\r\n      if (++this.active === 1) this.state.emitter = this, this.starting = true;\r\n      return this;\r\n    },\r\n    start: function(event, mode) {\r\n      if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\r\n      else this.emit(\"brush\", event);\r\n      return this;\r\n    },\r\n    brush: function(event, mode) {\r\n      this.emit(\"brush\", event, mode);\r\n      return this;\r\n    },\r\n    end: function(event, mode) {\r\n      if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\r\n      return this;\r\n    },\r\n    emit: function(type, event, mode) {\r\n      var d = select(this.that).datum();\r\n      listeners.call(\r\n        type,\r\n        this.that,\r\n        new BrushEvent(type, {\r\n          sourceEvent: event,\r\n          target: brush,\r\n          selection: dim.output(this.state.selection),\r\n          mode,\r\n          dispatch: listeners\r\n        }),\r\n        d\r\n      );\r\n    }\r\n  };\r\n\r\n  function started(event) {\r\n    if (touchending && !event.touches) return;\r\n    if (!filter.apply(this, arguments)) return;\r\n\r\n    var that = this,\r\n        type = event.target.__data__.type,\r\n        mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\r\n        signX = dim === Y ? null : signsX[type],\r\n        signY = dim === X ? null : signsY[type],\r\n        state = local(that),\r\n        extent = state.extent,\r\n        selection = state.selection,\r\n        W = extent[0][0], w0, w1,\r\n        N = extent[0][1], n0, n1,\r\n        E = extent[1][0], e0, e1,\r\n        S = extent[1][1], s0, s1,\r\n        dx = 0,\r\n        dy = 0,\r\n        moving,\r\n        shifting = signX && signY && keys && event.shiftKey,\r\n        lockX,\r\n        lockY,\r\n        points = Array.from(event.touches || [event], t => {\r\n          const i = t.identifier;\r\n          t = pointer(t, that);\r\n          t.point0 = t.slice();\r\n          t.identifier = i;\r\n          return t;\r\n        });\r\n\r\n    interrupt(that);\r\n    var emit = emitter(that, arguments, true).beforestart();\r\n\r\n    if (type === \"overlay\") {\r\n      if (selection) moving = true;\r\n      const pts = [points[0], points[1] || points[0]];\r\n      state.selection = selection = [[\r\n          w0 = dim === Y ? W : min(pts[0][0], pts[1][0]),\r\n          n0 = dim === X ? N : min(pts[0][1], pts[1][1])\r\n        ], [\r\n          e0 = dim === Y ? E : max(pts[0][0], pts[1][0]),\r\n          s0 = dim === X ? S : max(pts[0][1], pts[1][1])\r\n        ]];\r\n      if (points.length > 1) move(event);\r\n    } else {\r\n      w0 = selection[0][0];\r\n      n0 = selection[0][1];\r\n      e0 = selection[1][0];\r\n      s0 = selection[1][1];\r\n    }\r\n\r\n    w1 = w0;\r\n    n1 = n0;\r\n    e1 = e0;\r\n    s1 = s0;\r\n\r\n    var group = select(that)\r\n        .attr(\"pointer-events\", \"none\");\r\n\r\n    var overlay = group.selectAll(\".overlay\")\r\n        .attr(\"cursor\", cursors[type]);\r\n\r\n    if (event.touches) {\r\n      emit.moved = moved;\r\n      emit.ended = ended;\r\n    } else {\r\n      var view = select(event.view)\r\n          .on(\"mousemove.brush\", moved, true)\r\n          .on(\"mouseup.brush\", ended, true);\r\n      if (keys) view\r\n          .on(\"keydown.brush\", keydowned, true)\r\n          .on(\"keyup.brush\", keyupped, true)\r\n\r\n      dragDisable(event.view);\r\n    }\r\n\r\n    redraw.call(that);\r\n    emit.start(event, mode.name);\r\n\r\n    function moved(event) {\r\n      for (const p of event.changedTouches || [event]) {\r\n        for (const d of points)\r\n          if (d.identifier === p.identifier) d.cur = pointer(p, that);\r\n      }\r\n      if (shifting && !lockX && !lockY && points.length === 1) {\r\n        const point = points[0];\r\n        if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))\r\n          lockY = true;\r\n        else\r\n          lockX = true;\r\n      }\r\n      for (const point of points)\r\n        if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\r\n      moving = true;\r\n      noevent(event);\r\n      move(event);\r\n    }\r\n\r\n    function move(event) {\r\n      const point = points[0], point0 = point.point0;\r\n      var t;\r\n\r\n      dx = point[0] - point0[0];\r\n      dy = point[1] - point0[1];\r\n\r\n      switch (mode) {\r\n        case MODE_SPACE:\r\n        case MODE_DRAG: {\r\n          if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\r\n          if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\r\n          break;\r\n        }\r\n        case MODE_HANDLE: {\r\n          if (points[1]) {\r\n            if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\r\n            if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\r\n          } else {\r\n            if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\r\n            else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\r\n            if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\r\n            else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\r\n          }\r\n          break;\r\n        }\r\n        case MODE_CENTER: {\r\n          if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\r\n          if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (e1 < w1) {\r\n        signX *= -1;\r\n        t = w0, w0 = e0, e0 = t;\r\n        t = w1, w1 = e1, e1 = t;\r\n        if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\r\n      }\r\n\r\n      if (s1 < n1) {\r\n        signY *= -1;\r\n        t = n0, n0 = s0, s0 = t;\r\n        t = n1, n1 = s1, s1 = t;\r\n        if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\r\n      }\r\n\r\n      if (state.selection) selection = state.selection; // May be set by brush.move!\r\n      if (lockX) w1 = selection[0][0], e1 = selection[1][0];\r\n      if (lockY) n1 = selection[0][1], s1 = selection[1][1];\r\n\r\n      if (selection[0][0] !== w1\r\n          || selection[0][1] !== n1\r\n          || selection[1][0] !== e1\r\n          || selection[1][1] !== s1) {\r\n        state.selection = [[w1, n1], [e1, s1]];\r\n        redraw.call(that);\r\n        emit.brush(event, mode.name);\r\n      }\r\n    }\r\n\r\n    function ended(event) {\r\n      nopropagation(event);\r\n      if (event.touches) {\r\n        if (event.touches.length) return;\r\n        if (touchending) clearTimeout(touchending);\r\n        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\r\n      } else {\r\n        dragEnable(event.view, moving);\r\n        view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\r\n      }\r\n      group.attr(\"pointer-events\", \"all\");\r\n      overlay.attr(\"cursor\", cursors.overlay);\r\n      if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\r\n      if (empty(selection)) state.selection = null, redraw.call(that);\r\n      emit.end(event, mode.name);\r\n    }\r\n\r\n    function keydowned(event) {\r\n      switch (event.keyCode) {\r\n        case 16: { // SHIFT\r\n          shifting = signX && signY;\r\n          break;\r\n        }\r\n        case 18: { // ALT\r\n          if (mode === MODE_HANDLE) {\r\n            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\r\n            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\r\n            mode = MODE_CENTER;\r\n            move(event);\r\n          }\r\n          break;\r\n        }\r\n        case 32: { // SPACE; takes priority over ALT\r\n          if (mode === MODE_HANDLE || mode === MODE_CENTER) {\r\n            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\r\n            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\r\n            mode = MODE_SPACE;\r\n            overlay.attr(\"cursor\", cursors.selection);\r\n            move(event);\r\n          }\r\n          break;\r\n        }\r\n        default: return;\r\n      }\r\n      noevent(event);\r\n    }\r\n\r\n    function keyupped(event) {\r\n      switch (event.keyCode) {\r\n        case 16: { // SHIFT\r\n          if (shifting) {\r\n            lockX = lockY = shifting = false;\r\n            move(event);\r\n          }\r\n          break;\r\n        }\r\n        case 18: { // ALT\r\n          if (mode === MODE_CENTER) {\r\n            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\r\n            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\r\n            mode = MODE_HANDLE;\r\n            move(event);\r\n          }\r\n          break;\r\n        }\r\n        case 32: { // SPACE\r\n          if (mode === MODE_SPACE) {\r\n            if (event.altKey) {\r\n              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\r\n              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\r\n              mode = MODE_CENTER;\r\n            } else {\r\n              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\r\n              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\r\n              mode = MODE_HANDLE;\r\n            }\r\n            overlay.attr(\"cursor\", cursors[type]);\r\n            move(event);\r\n          }\r\n          break;\r\n        }\r\n        default: return;\r\n      }\r\n      noevent(event);\r\n    }\r\n  }\r\n\r\n  function touchmoved(event) {\r\n    emitter(this, arguments).moved(event);\r\n  }\r\n\r\n  function touchended(event) {\r\n    emitter(this, arguments).ended(event);\r\n  }\r\n\r\n  function initialize() {\r\n    var state = this.__brush || {selection: null};\r\n    state.extent = number2(extent.apply(this, arguments));\r\n    state.dim = dim;\r\n    return state;\r\n  }\r\n\r\n  brush.extent = function(_) {\r\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\r\n  };\r\n\r\n  brush.filter = function(_) {\r\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\r\n  };\r\n\r\n  brush.touchable = function(_) {\r\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\r\n  };\r\n\r\n  brush.handleSize = function(_) {\r\n    return arguments.length ? (handleSize = +_, brush) : handleSize;\r\n  };\r\n\r\n  brush.keyModifiers = function(_) {\r\n    return arguments.length ? (keys = !!_, brush) : keys;\r\n  };\r\n\r\n  brush.on = function() {\r\n    var value = listeners.on.apply(listeners, arguments);\r\n    return value === listeners ? brush : value;\r\n  };\r\n\r\n  return brush;\r\n}\r\n","export var abs = Math.abs;\r\nexport var cos = Math.cos;\r\nexport var sin = Math.sin;\r\nexport var pi = Math.PI;\r\nexport var halfPi = pi / 2;\r\nexport var tau = pi * 2;\r\nexport var max = Math.max;\r\nexport var epsilon = 1e-12;\r\n","import {max, tau} from \"./math.js\";\r\n\r\nfunction range(i, j) {\r\n  return Array.from({length: j - i}, (_, k) => i + k);\r\n}\r\n\r\nfunction compareValue(compare) {\r\n  return function(a, b) {\r\n    return compare(\r\n      a.source.value + a.target.value,\r\n      b.source.value + b.target.value\r\n    );\r\n  };\r\n}\r\n\r\nexport default function() {\r\n  return chord(false, false);\r\n}\r\n\r\nexport function chordTranspose() {\r\n  return chord(false, true);\r\n}\r\n\r\nexport function chordDirected() {\r\n  return chord(true, false);\r\n}\r\n\r\nfunction chord(directed, transpose) {\r\n  var padAngle = 0,\r\n      sortGroups = null,\r\n      sortSubgroups = null,\r\n      sortChords = null;\r\n\r\n  function chord(matrix) {\r\n    var n = matrix.length,\r\n        groupSums = new Array(n),\r\n        groupIndex = range(0, n),\r\n        chords = new Array(n * n),\r\n        groups = new Array(n),\r\n        k = 0, dx;\r\n\r\n    matrix = Float64Array.from({length: n * n}, transpose\r\n        ? (_, i) => matrix[i % n][i / n | 0]\r\n        : (_, i) => matrix[i / n | 0][i % n]);\r\n\r\n    // Compute the scaling factor from value to angle in [0, 2pi].\r\n    for (let i = 0; i < n; ++i) {\r\n      let x = 0;\r\n      for (let j = 0; j < n; ++j) x += matrix[i * n + j] + directed * matrix[j * n + i];\r\n      k += groupSums[i] = x;\r\n    }\r\n    k = max(0, tau - padAngle * n) / k;\r\n    dx = k ? padAngle : tau / n;\r\n\r\n    // Compute the angles for each group and constituent chord.\r\n    {\r\n      let x = 0;\r\n      if (sortGroups) groupIndex.sort((a, b) => sortGroups(groupSums[a], groupSums[b]));\r\n      for (const i of groupIndex) {\r\n        const x0 = x;\r\n        if (directed) {\r\n          const subgroupIndex = range(~n + 1, n).filter(j => j < 0 ? matrix[~j * n + i] : matrix[i * n + j]);\r\n          if (sortSubgroups) subgroupIndex.sort((a, b) => sortSubgroups(a < 0 ? -matrix[~a * n + i] : matrix[i * n + a], b < 0 ? -matrix[~b * n + i] : matrix[i * n + b]));\r\n          for (const j of subgroupIndex) {\r\n            if (j < 0) {\r\n              const chord = chords[~j * n + i] || (chords[~j * n + i] = {source: null, target: null});\r\n              chord.target = {index: i, startAngle: x, endAngle: x += matrix[~j * n + i] * k, value: matrix[~j * n + i]};\r\n            } else {\r\n              const chord = chords[i * n + j] || (chords[i * n + j] = {source: null, target: null});\r\n              chord.source = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\r\n            }\r\n          }\r\n          groups[i] = {index: i, startAngle: x0, endAngle: x, value: groupSums[i]};\r\n        } else {\r\n          const subgroupIndex = range(0, n).filter(j => matrix[i * n + j] || matrix[j * n + i]);\r\n          if (sortSubgroups) subgroupIndex.sort((a, b) => sortSubgroups(matrix[i * n + a], matrix[i * n + b]));\r\n          for (const j of subgroupIndex) {\r\n            let chord;\r\n            if (i < j) {\r\n              chord = chords[i * n + j] || (chords[i * n + j] = {source: null, target: null});\r\n              chord.source = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\r\n            } else {\r\n              chord = chords[j * n + i] || (chords[j * n + i] = {source: null, target: null});\r\n              chord.target = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\r\n              if (i === j) chord.source = chord.target;\r\n            }\r\n            if (chord.source && chord.target && chord.source.value < chord.target.value) {\r\n              const source = chord.source;\r\n              chord.source = chord.target;\r\n              chord.target = source;\r\n            }\r\n          }\r\n          groups[i] = {index: i, startAngle: x0, endAngle: x, value: groupSums[i]};\r\n        }\r\n        x += dx;\r\n      }\r\n    }\r\n\r\n    // Remove empty chords.\r\n    chords = Object.values(chords);\r\n    chords.groups = groups;\r\n    return sortChords ? chords.sort(sortChords) : chords;\r\n  }\r\n\r\n  chord.padAngle = function(_) {\r\n    return arguments.length ? (padAngle = max(0, _), chord) : padAngle;\r\n  };\r\n\r\n  chord.sortGroups = function(_) {\r\n    return arguments.length ? (sortGroups = _, chord) : sortGroups;\r\n  };\r\n\r\n  chord.sortSubgroups = function(_) {\r\n    return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\r\n  };\r\n\r\n  chord.sortChords = function(_) {\r\n    return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\r\n  };\r\n\r\n  return chord;\r\n}\r\n","const pi = Math.PI,\r\n    tau = 2 * pi,\r\n    epsilon = 1e-6,\r\n    tauEpsilon = tau - epsilon;\r\n\r\nfunction append(strings) {\r\n  this._ += strings[0];\r\n  for (let i = 1, n = strings.length; i < n; ++i) {\r\n    this._ += arguments[i] + strings[i];\r\n  }\r\n}\r\n\r\nfunction appendRound(digits) {\r\n  let d = Math.floor(digits);\r\n  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\r\n  if (d > 15) return append;\r\n  const k = 10 ** d;\r\n  return function(strings) {\r\n    this._ += strings[0];\r\n    for (let i = 1, n = strings.length; i < n; ++i) {\r\n      this._ += Math.round(arguments[i] * k) / k + strings[i];\r\n    }\r\n  };\r\n}\r\n\r\nexport class Path {\r\n  constructor(digits) {\r\n    this._x0 = this._y0 = // start of current subpath\r\n    this._x1 = this._y1 = null; // end of current subpath\r\n    this._ = \"\";\r\n    this._append = digits == null ? append : appendRound(digits);\r\n  }\r\n  moveTo(x, y) {\r\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\r\n  }\r\n  closePath() {\r\n    if (this._x1 !== null) {\r\n      this._x1 = this._x0, this._y1 = this._y0;\r\n      this._append`Z`;\r\n    }\r\n  }\r\n  lineTo(x, y) {\r\n    this._append`L${this._x1 = +x},${this._y1 = +y}`;\r\n  }\r\n  quadraticCurveTo(x1, y1, x, y) {\r\n    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\r\n  }\r\n  bezierCurveTo(x1, y1, x2, y2, x, y) {\r\n    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\r\n  }\r\n  arcTo(x1, y1, x2, y2, r) {\r\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\r\n\r\n    // Is the radius negative? Error.\r\n    if (r < 0) throw new Error(`negative radius: ${r}`);\r\n\r\n    let x0 = this._x1,\r\n        y0 = this._y1,\r\n        x21 = x2 - x1,\r\n        y21 = y2 - y1,\r\n        x01 = x0 - x1,\r\n        y01 = y0 - y1,\r\n        l01_2 = x01 * x01 + y01 * y01;\r\n\r\n    // Is this path empty? Move to (x1,y1).\r\n    if (this._x1 === null) {\r\n      this._append`M${this._x1 = x1},${this._y1 = y1}`;\r\n    }\r\n\r\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\r\n    else if (!(l01_2 > epsilon));\r\n\r\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\r\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\r\n    // Or, is the radius zero? Line to (x1,y1).\r\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\r\n      this._append`L${this._x1 = x1},${this._y1 = y1}`;\r\n    }\r\n\r\n    // Otherwise, draw an arc!\r\n    else {\r\n      let x20 = x2 - x0,\r\n          y20 = y2 - y0,\r\n          l21_2 = x21 * x21 + y21 * y21,\r\n          l20_2 = x20 * x20 + y20 * y20,\r\n          l21 = Math.sqrt(l21_2),\r\n          l01 = Math.sqrt(l01_2),\r\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\r\n          t01 = l / l01,\r\n          t21 = l / l21;\r\n\r\n      // If the start tangent is not coincident with (x0,y0), line to.\r\n      if (Math.abs(t01 - 1) > epsilon) {\r\n        this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\r\n      }\r\n\r\n      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\r\n    }\r\n  }\r\n  arc(x, y, r, a0, a1, ccw) {\r\n    x = +x, y = +y, r = +r, ccw = !!ccw;\r\n\r\n    // Is the radius negative? Error.\r\n    if (r < 0) throw new Error(`negative radius: ${r}`);\r\n\r\n    let dx = r * Math.cos(a0),\r\n        dy = r * Math.sin(a0),\r\n        x0 = x + dx,\r\n        y0 = y + dy,\r\n        cw = 1 ^ ccw,\r\n        da = ccw ? a0 - a1 : a1 - a0;\r\n\r\n    // Is this path empty? Move to (x0,y0).\r\n    if (this._x1 === null) {\r\n      this._append`M${x0},${y0}`;\r\n    }\r\n\r\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\r\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\r\n      this._append`L${x0},${y0}`;\r\n    }\r\n\r\n    // Is this arc empty? We’re done.\r\n    if (!r) return;\r\n\r\n    // Does the angle go the wrong way? Flip the direction.\r\n    if (da < 0) da = da % tau + tau;\r\n\r\n    // Is this a complete circle? Draw two arcs to complete the circle.\r\n    if (da > tauEpsilon) {\r\n      this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\r\n    }\r\n\r\n    // Is this arc non-empty? Draw an arc!\r\n    else if (da > epsilon) {\r\n      this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\r\n    }\r\n  }\r\n  rect(x, y, w, h) {\r\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\r\n  }\r\n  toString() {\r\n    return this._;\r\n  }\r\n}\r\n\r\nexport function path() {\r\n  return new Path;\r\n}\r\n\r\n// Allow instanceof d3.path\r\npath.prototype = Path.prototype;\r\n\r\nexport function pathRound(digits = 3) {\r\n  return new Path(+digits);\r\n}\r\n","export var slice = Array.prototype.slice;\r\n","export default function(x) {\r\n  return function() {\r\n    return x;\r\n  };\r\n}\r\n","import {path} from \"d3-path\";\r\nimport {slice} from \"./array.js\";\r\nimport constant from \"./constant.js\";\r\nimport {abs, cos, epsilon, halfPi, sin} from \"./math.js\";\r\n\r\nfunction defaultSource(d) {\r\n  return d.source;\r\n}\r\n\r\nfunction defaultTarget(d) {\r\n  return d.target;\r\n}\r\n\r\nfunction defaultRadius(d) {\r\n  return d.radius;\r\n}\r\n\r\nfunction defaultStartAngle(d) {\r\n  return d.startAngle;\r\n}\r\n\r\nfunction defaultEndAngle(d) {\r\n  return d.endAngle;\r\n}\r\n\r\nfunction defaultPadAngle() {\r\n  return 0;\r\n}\r\n\r\nfunction defaultArrowheadRadius() {\r\n  return 10;\r\n}\r\n\r\nfunction ribbon(headRadius) {\r\n  var source = defaultSource,\r\n      target = defaultTarget,\r\n      sourceRadius = defaultRadius,\r\n      targetRadius = defaultRadius,\r\n      startAngle = defaultStartAngle,\r\n      endAngle = defaultEndAngle,\r\n      padAngle = defaultPadAngle,\r\n      context = null;\r\n\r\n  function ribbon() {\r\n    var buffer,\r\n        s = source.apply(this, arguments),\r\n        t = target.apply(this, arguments),\r\n        ap = padAngle.apply(this, arguments) / 2,\r\n        argv = slice.call(arguments),\r\n        sr = +sourceRadius.apply(this, (argv[0] = s, argv)),\r\n        sa0 = startAngle.apply(this, argv) - halfPi,\r\n        sa1 = endAngle.apply(this, argv) - halfPi,\r\n        tr = +targetRadius.apply(this, (argv[0] = t, argv)),\r\n        ta0 = startAngle.apply(this, argv) - halfPi,\r\n        ta1 = endAngle.apply(this, argv) - halfPi;\r\n\r\n    if (!context) context = buffer = path();\r\n\r\n    if (ap > epsilon) {\r\n      if (abs(sa1 - sa0) > ap * 2 + epsilon) sa1 > sa0 ? (sa0 += ap, sa1 -= ap) : (sa0 -= ap, sa1 += ap);\r\n      else sa0 = sa1 = (sa0 + sa1) / 2;\r\n      if (abs(ta1 - ta0) > ap * 2 + epsilon) ta1 > ta0 ? (ta0 += ap, ta1 -= ap) : (ta0 -= ap, ta1 += ap);\r\n      else ta0 = ta1 = (ta0 + ta1) / 2;\r\n    }\r\n\r\n    context.moveTo(sr * cos(sa0), sr * sin(sa0));\r\n    context.arc(0, 0, sr, sa0, sa1);\r\n    if (sa0 !== ta0 || sa1 !== ta1) {\r\n      if (headRadius) {\r\n        var hr = +headRadius.apply(this, arguments), tr2 = tr - hr, ta2 = (ta0 + ta1) / 2;\r\n        context.quadraticCurveTo(0, 0, tr2 * cos(ta0), tr2 * sin(ta0));\r\n        context.lineTo(tr * cos(ta2), tr * sin(ta2));\r\n        context.lineTo(tr2 * cos(ta1), tr2 * sin(ta1));\r\n      } else {\r\n        context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\r\n        context.arc(0, 0, tr, ta0, ta1);\r\n      }\r\n    }\r\n    context.quadraticCurveTo(0, 0, sr * cos(sa0), sr * sin(sa0));\r\n    context.closePath();\r\n\r\n    if (buffer) return context = null, buffer + \"\" || null;\r\n  }\r\n\r\n  if (headRadius) ribbon.headRadius = function(_) {\r\n    return arguments.length ? (headRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : headRadius;\r\n  };\r\n\r\n  ribbon.radius = function(_) {\r\n    return arguments.length ? (sourceRadius = targetRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : sourceRadius;\r\n  };\r\n\r\n  ribbon.sourceRadius = function(_) {\r\n    return arguments.length ? (sourceRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : sourceRadius;\r\n  };\r\n\r\n  ribbon.targetRadius = function(_) {\r\n    return arguments.length ? (targetRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : targetRadius;\r\n  };\r\n\r\n  ribbon.startAngle = function(_) {\r\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : startAngle;\r\n  };\r\n\r\n  ribbon.endAngle = function(_) {\r\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : endAngle;\r\n  };\r\n\r\n  ribbon.padAngle = function(_) {\r\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : padAngle;\r\n  };\r\n\r\n  ribbon.source = function(_) {\r\n    return arguments.length ? (source = _, ribbon) : source;\r\n  };\r\n\r\n  ribbon.target = function(_) {\r\n    return arguments.length ? (target = _, ribbon) : target;\r\n  };\r\n\r\n  ribbon.context = function(_) {\r\n    return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\r\n  };\r\n\r\n  return ribbon;\r\n}\r\n\r\nexport default function() {\r\n  return ribbon();\r\n}\r\n\r\nexport function ribbonArrow() {\r\n  return ribbon(defaultArrowheadRadius);\r\n}\r\n","var array = Array.prototype;\r\n\r\nexport var slice = array.slice;\r\n","export default function(a, b) {\r\n  return a - b;\r\n}\r\n","export default x => () => x;\r\n","export default function(ring, hole) {\r\n  var i = -1, n = hole.length, c;\r\n  while (++i < n) if (c = ringContains(ring, hole[i])) return c;\r\n  return 0;\r\n}\r\n\r\nfunction ringContains(ring, point) {\r\n  var x = point[0], y = point[1], contains = -1;\r\n  for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\r\n    var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\r\n    if (segmentContains(pi, pj, point)) return 0;\r\n    if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\r\n  }\r\n  return contains;\r\n}\r\n\r\nfunction segmentContains(a, b, c) {\r\n  var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\r\n}\r\n\r\nfunction collinear(a, b, c) {\r\n  return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\r\n}\r\n\r\nfunction within(p, q, r) {\r\n  return p <= q && q <= r || r <= q && q <= p;\r\n}\r\n","export default function() {}\r\n","import {extent, nice, thresholdSturges, ticks} from \"d3-array\";\r\nimport {slice} from \"./array.js\";\r\nimport ascending from \"./ascending.js\";\r\nimport area from \"./area.js\";\r\nimport constant from \"./constant.js\";\r\nimport contains from \"./contains.js\";\r\nimport noop from \"./noop.js\";\r\n\r\nvar cases = [\r\n  [],\r\n  [[[1.0, 1.5], [0.5, 1.0]]],\r\n  [[[1.5, 1.0], [1.0, 1.5]]],\r\n  [[[1.5, 1.0], [0.5, 1.0]]],\r\n  [[[1.0, 0.5], [1.5, 1.0]]],\r\n  [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\r\n  [[[1.0, 0.5], [1.0, 1.5]]],\r\n  [[[1.0, 0.5], [0.5, 1.0]]],\r\n  [[[0.5, 1.0], [1.0, 0.5]]],\r\n  [[[1.0, 1.5], [1.0, 0.5]]],\r\n  [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\r\n  [[[1.5, 1.0], [1.0, 0.5]]],\r\n  [[[0.5, 1.0], [1.5, 1.0]]],\r\n  [[[1.0, 1.5], [1.5, 1.0]]],\r\n  [[[0.5, 1.0], [1.0, 1.5]]],\r\n  []\r\n];\r\n\r\nexport default function() {\r\n  var dx = 1,\r\n      dy = 1,\r\n      threshold = thresholdSturges,\r\n      smooth = smoothLinear;\r\n\r\n  function contours(values) {\r\n    var tz = threshold(values);\r\n\r\n    // Convert number of thresholds into uniform thresholds.\r\n    if (!Array.isArray(tz)) {\r\n      const e = extent(values, finite);\r\n      tz = ticks(...nice(e[0], e[1], tz), tz);\r\n      while (tz[tz.length - 1] >= e[1]) tz.pop();\r\n      while (tz[1] < e[0]) tz.shift();\r\n    } else {\r\n      tz = tz.slice().sort(ascending);\r\n    }\r\n\r\n    return tz.map(value => contour(values, value));\r\n  }\r\n\r\n  // Accumulate, smooth contour rings, assign holes to exterior rings.\r\n  // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\r\n  function contour(values, value) {\r\n    const v = value == null ? NaN : +value;\r\n    if (isNaN(v)) throw new Error(`invalid value: ${value}`);\r\n\r\n    var polygons = [],\r\n        holes = [];\r\n\r\n    isorings(values, v, function(ring) {\r\n      smooth(ring, values, v);\r\n      if (area(ring) > 0) polygons.push([ring]);\r\n      else holes.push(ring);\r\n    });\r\n\r\n    holes.forEach(function(hole) {\r\n      for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\r\n        if (contains((polygon = polygons[i])[0], hole) !== -1) {\r\n          polygon.push(hole);\r\n          return;\r\n        }\r\n      }\r\n    });\r\n\r\n    return {\r\n      type: \"MultiPolygon\",\r\n      value: value,\r\n      coordinates: polygons\r\n    };\r\n  }\r\n\r\n  // Marching squares with isolines stitched into rings.\r\n  // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\r\n  function isorings(values, value, callback) {\r\n    var fragmentByStart = new Array,\r\n        fragmentByEnd = new Array,\r\n        x, y, t0, t1, t2, t3;\r\n\r\n    // Special case for the first row (y = -1, t2 = t3 = 0).\r\n    x = y = -1;\r\n    t1 = above(values[0], value);\r\n    cases[t1 << 1].forEach(stitch);\r\n    while (++x < dx - 1) {\r\n      t0 = t1, t1 = above(values[x + 1], value);\r\n      cases[t0 | t1 << 1].forEach(stitch);\r\n    }\r\n    cases[t1 << 0].forEach(stitch);\r\n\r\n    // General case for the intermediate rows.\r\n    while (++y < dy - 1) {\r\n      x = -1;\r\n      t1 = above(values[y * dx + dx], value);\r\n      t2 = above(values[y * dx], value);\r\n      cases[t1 << 1 | t2 << 2].forEach(stitch);\r\n      while (++x < dx - 1) {\r\n        t0 = t1, t1 = above(values[y * dx + dx + x + 1], value);\r\n        t3 = t2, t2 = above(values[y * dx + x + 1], value);\r\n        cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\r\n      }\r\n      cases[t1 | t2 << 3].forEach(stitch);\r\n    }\r\n\r\n    // Special case for the last row (y = dy - 1, t0 = t1 = 0).\r\n    x = -1;\r\n    t2 = values[y * dx] >= value;\r\n    cases[t2 << 2].forEach(stitch);\r\n    while (++x < dx - 1) {\r\n      t3 = t2, t2 = above(values[y * dx + x + 1], value);\r\n      cases[t2 << 2 | t3 << 3].forEach(stitch);\r\n    }\r\n    cases[t2 << 3].forEach(stitch);\r\n\r\n    function stitch(line) {\r\n      var start = [line[0][0] + x, line[0][1] + y],\r\n          end = [line[1][0] + x, line[1][1] + y],\r\n          startIndex = index(start),\r\n          endIndex = index(end),\r\n          f, g;\r\n      if (f = fragmentByEnd[startIndex]) {\r\n        if (g = fragmentByStart[endIndex]) {\r\n          delete fragmentByEnd[f.end];\r\n          delete fragmentByStart[g.start];\r\n          if (f === g) {\r\n            f.ring.push(end);\r\n            callback(f.ring);\r\n          } else {\r\n            fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\r\n          }\r\n        } else {\r\n          delete fragmentByEnd[f.end];\r\n          f.ring.push(end);\r\n          fragmentByEnd[f.end = endIndex] = f;\r\n        }\r\n      } else if (f = fragmentByStart[endIndex]) {\r\n        if (g = fragmentByEnd[startIndex]) {\r\n          delete fragmentByStart[f.start];\r\n          delete fragmentByEnd[g.end];\r\n          if (f === g) {\r\n            f.ring.push(end);\r\n            callback(f.ring);\r\n          } else {\r\n            fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\r\n          }\r\n        } else {\r\n          delete fragmentByStart[f.start];\r\n          f.ring.unshift(start);\r\n          fragmentByStart[f.start = startIndex] = f;\r\n        }\r\n      } else {\r\n        fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\r\n      }\r\n    }\r\n  }\r\n\r\n  function index(point) {\r\n    return point[0] * 2 + point[1] * (dx + 1) * 4;\r\n  }\r\n\r\n  function smoothLinear(ring, values, value) {\r\n    ring.forEach(function(point) {\r\n      var x = point[0],\r\n          y = point[1],\r\n          xt = x | 0,\r\n          yt = y | 0,\r\n          v1 = valid(values[yt * dx + xt]);\r\n      if (x > 0 && x < dx && xt === x) {\r\n        point[0] = smooth1(x, valid(values[yt * dx + xt - 1]), v1, value);\r\n      }\r\n      if (y > 0 && y < dy && yt === y) {\r\n        point[1] = smooth1(y, valid(values[(yt - 1) * dx + xt]), v1, value);\r\n      }\r\n    });\r\n  }\r\n\r\n  contours.contour = contour;\r\n\r\n  contours.size = function(_) {\r\n    if (!arguments.length) return [dx, dy];\r\n    var _0 = Math.floor(_[0]), _1 = Math.floor(_[1]);\r\n    if (!(_0 >= 0 && _1 >= 0)) throw new Error(\"invalid size\");\r\n    return dx = _0, dy = _1, contours;\r\n  };\r\n\r\n  contours.thresholds = function(_) {\r\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), contours) : threshold;\r\n  };\r\n\r\n  contours.smooth = function(_) {\r\n    return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\r\n  };\r\n\r\n  return contours;\r\n}\r\n\r\n// When computing the extent, ignore infinite values (as well as invalid ones).\r\nfunction finite(x) {\r\n  return isFinite(x) ? x : NaN;\r\n}\r\n\r\n// Is the (possibly invalid) x greater than or equal to the (known valid) value?\r\n// Treat any invalid value as below negative infinity.\r\nfunction above(x, value) {\r\n  return x == null ? false : +x >= value;\r\n}\r\n\r\n// During smoothing, treat any invalid value as negative infinity.\r\nfunction valid(v) {\r\n  return v == null || isNaN(v = +v) ? -Infinity : v;\r\n}\r\n\r\nfunction smooth1(x, v0, v1, value) {\r\n  const a = value - v0;\r\n  const b = v1 - v0;\r\n  const d = isFinite(a) || isFinite(b) ? a / b : Math.sign(a) / Math.sign(b);\r\n  return isNaN(d) ? x : x + d - 0.5;\r\n}\r\n","export default function(ring) {\r\n  var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\r\n  while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\r\n  return area;\r\n}\r\n","import {blur2, max, ticks} from \"d3-array\";\r\nimport {slice} from \"./array.js\";\r\nimport constant from \"./constant.js\";\r\nimport Contours from \"./contours.js\";\r\n\r\nfunction defaultX(d) {\r\n  return d[0];\r\n}\r\n\r\nfunction defaultY(d) {\r\n  return d[1];\r\n}\r\n\r\nfunction defaultWeight() {\r\n  return 1;\r\n}\r\n\r\nexport default function() {\r\n  var x = defaultX,\r\n      y = defaultY,\r\n      weight = defaultWeight,\r\n      dx = 960,\r\n      dy = 500,\r\n      r = 20, // blur radius\r\n      k = 2, // log2(grid cell size)\r\n      o = r * 3, // grid offset, to pad for blur\r\n      n = (dx + o * 2) >> k, // grid width\r\n      m = (dy + o * 2) >> k, // grid height\r\n      threshold = constant(20);\r\n\r\n  function grid(data) {\r\n    var values = new Float32Array(n * m),\r\n        pow2k = Math.pow(2, -k),\r\n        i = -1;\r\n\r\n    for (const d of data) {\r\n      var xi = (x(d, ++i, data) + o) * pow2k,\r\n          yi = (y(d, i, data) + o) * pow2k,\r\n          wi = +weight(d, i, data);\r\n      if (wi && xi >= 0 && xi < n && yi >= 0 && yi < m) {\r\n        var x0 = Math.floor(xi),\r\n            y0 = Math.floor(yi),\r\n            xt = xi - x0 - 0.5,\r\n            yt = yi - y0 - 0.5;\r\n        values[x0 + y0 * n] += (1 - xt) * (1 - yt) * wi;\r\n        values[x0 + 1 + y0 * n] += xt * (1 - yt) * wi;\r\n        values[x0 + 1 + (y0 + 1) * n] += xt * yt * wi;\r\n        values[x0 + (y0 + 1) * n] += (1 - xt) * yt * wi;\r\n      }\r\n    }\r\n\r\n    blur2({data: values, width: n, height: m}, r * pow2k);\r\n    return values;\r\n  }\r\n\r\n  function density(data) {\r\n    var values = grid(data),\r\n        tz = threshold(values),\r\n        pow4k = Math.pow(2, 2 * k);\r\n\r\n    // Convert number of thresholds into uniform thresholds.\r\n    if (!Array.isArray(tz)) {\r\n      tz = ticks(Number.MIN_VALUE, max(values) / pow4k, tz);\r\n    }\r\n\r\n    return Contours()\r\n        .size([n, m])\r\n        .thresholds(tz.map(d => d * pow4k))\r\n      (values)\r\n        .map((c, i) => (c.value = +tz[i], transform(c)));\r\n  }\r\n\r\n  density.contours = function(data) {\r\n    var values = grid(data),\r\n        contours = Contours().size([n, m]),\r\n        pow4k = Math.pow(2, 2 * k),\r\n        contour = value => {\r\n          value = +value;\r\n          var c = transform(contours.contour(values, value * pow4k));\r\n          c.value = value; // preserve exact threshold value\r\n          return c;\r\n        };\r\n    Object.defineProperty(contour, \"max\", {get: () => max(values) / pow4k});\r\n    return contour;\r\n  };\r\n\r\n  function transform(geometry) {\r\n    geometry.coordinates.forEach(transformPolygon);\r\n    return geometry;\r\n  }\r\n\r\n  function transformPolygon(coordinates) {\r\n    coordinates.forEach(transformRing);\r\n  }\r\n\r\n  function transformRing(coordinates) {\r\n    coordinates.forEach(transformPoint);\r\n  }\r\n\r\n  // TODO Optimize.\r\n  function transformPoint(coordinates) {\r\n    coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\r\n    coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\r\n  }\r\n\r\n  function resize() {\r\n    o = r * 3;\r\n    n = (dx + o * 2) >> k;\r\n    m = (dy + o * 2) >> k;\r\n    return density;\r\n  }\r\n\r\n  density.x = function(_) {\r\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), density) : x;\r\n  };\r\n\r\n  density.y = function(_) {\r\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), density) : y;\r\n  };\r\n\r\n  density.weight = function(_) {\r\n    return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant(+_), density) : weight;\r\n  };\r\n\r\n  density.size = function(_) {\r\n    if (!arguments.length) return [dx, dy];\r\n    var _0 = +_[0], _1 = +_[1];\r\n    if (!(_0 >= 0 && _1 >= 0)) throw new Error(\"invalid size\");\r\n    return dx = _0, dy = _1, resize();\r\n  };\r\n\r\n  density.cellSize = function(_) {\r\n    if (!arguments.length) return 1 << k;\r\n    if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\r\n    return k = Math.floor(Math.log(_) / Math.LN2), resize();\r\n  };\r\n\r\n  density.thresholds = function(_) {\r\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), density) : threshold;\r\n  };\r\n\r\n  density.bandwidth = function(_) {\r\n    if (!arguments.length) return Math.sqrt(r * (r + 1));\r\n    if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\r\n    return r = (Math.sqrt(4 * _ * _ + 1) - 1) / 2, resize();\r\n  };\r\n\r\n  return density;\r\n}\r\n","export const epsilon = 1.1102230246251565e-16;\r\nexport const splitter = 134217729;\r\nexport const resulterrbound = (3 + 8 * epsilon) * epsilon;\r\n\r\n// fast_expansion_sum_zeroelim routine from oritinal code\r\nexport function sum(elen, e, flen, f, h) {\r\n    let Q, Qnew, hh, bvirt;\r\n    let enow = e[0];\r\n    let fnow = f[0];\r\n    let eindex = 0;\r\n    let findex = 0;\r\n    if ((fnow > enow) === (fnow > -enow)) {\r\n        Q = enow;\r\n        enow = e[++eindex];\r\n    } else {\r\n        Q = fnow;\r\n        fnow = f[++findex];\r\n    }\r\n    let hindex = 0;\r\n    if (eindex < elen && findex < flen) {\r\n        if ((fnow > enow) === (fnow > -enow)) {\r\n            Qnew = enow + Q;\r\n            hh = Q - (Qnew - enow);\r\n            enow = e[++eindex];\r\n        } else {\r\n            Qnew = fnow + Q;\r\n            hh = Q - (Qnew - fnow);\r\n            fnow = f[++findex];\r\n        }\r\n        Q = Qnew;\r\n        if (hh !== 0) {\r\n            h[hindex++] = hh;\r\n        }\r\n        while (eindex < elen && findex < flen) {\r\n            if ((fnow > enow) === (fnow > -enow)) {\r\n                Qnew = Q + enow;\r\n                bvirt = Qnew - Q;\r\n                hh = Q - (Qnew - bvirt) + (enow - bvirt);\r\n                enow = e[++eindex];\r\n            } else {\r\n                Qnew = Q + fnow;\r\n                bvirt = Qnew - Q;\r\n                hh = Q - (Qnew - bvirt) + (fnow - bvirt);\r\n                fnow = f[++findex];\r\n            }\r\n            Q = Qnew;\r\n            if (hh !== 0) {\r\n                h[hindex++] = hh;\r\n            }\r\n        }\r\n    }\r\n    while (eindex < elen) {\r\n        Qnew = Q + enow;\r\n        bvirt = Qnew - Q;\r\n        hh = Q - (Qnew - bvirt) + (enow - bvirt);\r\n        enow = e[++eindex];\r\n        Q = Qnew;\r\n        if (hh !== 0) {\r\n            h[hindex++] = hh;\r\n        }\r\n    }\r\n    while (findex < flen) {\r\n        Qnew = Q + fnow;\r\n        bvirt = Qnew - Q;\r\n        hh = Q - (Qnew - bvirt) + (fnow - bvirt);\r\n        fnow = f[++findex];\r\n        Q = Qnew;\r\n        if (hh !== 0) {\r\n            h[hindex++] = hh;\r\n        }\r\n    }\r\n    if (Q !== 0 || hindex === 0) {\r\n        h[hindex++] = Q;\r\n    }\r\n    return hindex;\r\n}\r\n\r\nexport function sum_three(alen, a, blen, b, clen, c, tmp, out) {\r\n    return sum(sum(alen, a, blen, b, tmp), tmp, clen, c, out);\r\n}\r\n\r\n// scale_expansion_zeroelim routine from oritinal code\r\nexport function scale(elen, e, b, h) {\r\n    let Q, sum, hh, product1, product0;\r\n    let bvirt, c, ahi, alo, bhi, blo;\r\n\r\n    c = splitter * b;\r\n    bhi = c - (c - b);\r\n    blo = b - bhi;\r\n    let enow = e[0];\r\n    Q = enow * b;\r\n    c = splitter * enow;\r\n    ahi = c - (c - enow);\r\n    alo = enow - ahi;\r\n    hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);\r\n    let hindex = 0;\r\n    if (hh !== 0) {\r\n        h[hindex++] = hh;\r\n    }\r\n    for (let i = 1; i < elen; i++) {\r\n        enow = e[i];\r\n        product1 = enow * b;\r\n        c = splitter * enow;\r\n        ahi = c - (c - enow);\r\n        alo = enow - ahi;\r\n        product0 = alo * blo - (product1 - ahi * bhi - alo * bhi - ahi * blo);\r\n        sum = Q + product0;\r\n        bvirt = sum - Q;\r\n        hh = Q - (sum - bvirt) + (product0 - bvirt);\r\n        if (hh !== 0) {\r\n            h[hindex++] = hh;\r\n        }\r\n        Q = product1 + sum;\r\n        hh = sum - (Q - product1);\r\n        if (hh !== 0) {\r\n            h[hindex++] = hh;\r\n        }\r\n    }\r\n    if (Q !== 0 || hindex === 0) {\r\n        h[hindex++] = Q;\r\n    }\r\n    return hindex;\r\n}\r\n\r\nexport function negate(elen, e) {\r\n    for (let i = 0; i < elen; i++) e[i] = -e[i];\r\n    return elen;\r\n}\r\n\r\nexport function estimate(elen, e) {\r\n    let Q = e[0];\r\n    for (let i = 1; i < elen; i++) Q += e[i];\r\n    return Q;\r\n}\r\n\r\nexport function vec(n) {\r\n    return new Float64Array(n);\r\n}\r\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum} from './util.js';\r\n\r\nconst ccwerrboundA = (3 + 16 * epsilon) * epsilon;\r\nconst ccwerrboundB = (2 + 12 * epsilon) * epsilon;\r\nconst ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon;\r\n\r\nconst B = vec(4);\r\nconst C1 = vec(8);\r\nconst C2 = vec(12);\r\nconst D = vec(16);\r\nconst u = vec(4);\r\n\r\nfunction orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\r\n    let acxtail, acytail, bcxtail, bcytail;\r\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\r\n\r\n    const acx = ax - cx;\r\n    const bcx = bx - cx;\r\n    const acy = ay - cy;\r\n    const bcy = by - cy;\r\n\r\n    s1 = acx * bcy;\r\n    c = splitter * acx;\r\n    ahi = c - (c - acx);\r\n    alo = acx - ahi;\r\n    c = splitter * bcy;\r\n    bhi = c - (c - bcy);\r\n    blo = bcy - bhi;\r\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\r\n    t1 = acy * bcx;\r\n    c = splitter * acy;\r\n    ahi = c - (c - acy);\r\n    alo = acy - ahi;\r\n    c = splitter * bcx;\r\n    bhi = c - (c - bcx);\r\n    blo = bcx - bhi;\r\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\r\n    _i = s0 - t0;\r\n    bvirt = s0 - _i;\r\n    B[0] = s0 - (_i + bvirt) + (bvirt - t0);\r\n    _j = s1 + _i;\r\n    bvirt = _j - s1;\r\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\r\n    _i = _0 - t1;\r\n    bvirt = _0 - _i;\r\n    B[1] = _0 - (_i + bvirt) + (bvirt - t1);\r\n    u3 = _j + _i;\r\n    bvirt = u3 - _j;\r\n    B[2] = _j - (u3 - bvirt) + (_i - bvirt);\r\n    B[3] = u3;\r\n\r\n    let det = estimate(4, B);\r\n    let errbound = ccwerrboundB * detsum;\r\n    if (det >= errbound || -det >= errbound) {\r\n        return det;\r\n    }\r\n\r\n    bvirt = ax - acx;\r\n    acxtail = ax - (acx + bvirt) + (bvirt - cx);\r\n    bvirt = bx - bcx;\r\n    bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\r\n    bvirt = ay - acy;\r\n    acytail = ay - (acy + bvirt) + (bvirt - cy);\r\n    bvirt = by - bcy;\r\n    bcytail = by - (bcy + bvirt) + (bvirt - cy);\r\n\r\n    if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\r\n        return det;\r\n    }\r\n\r\n    errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);\r\n    det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);\r\n    if (det >= errbound || -det >= errbound) return det;\r\n\r\n    s1 = acxtail * bcy;\r\n    c = splitter * acxtail;\r\n    ahi = c - (c - acxtail);\r\n    alo = acxtail - ahi;\r\n    c = splitter * bcy;\r\n    bhi = c - (c - bcy);\r\n    blo = bcy - bhi;\r\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\r\n    t1 = acytail * bcx;\r\n    c = splitter * acytail;\r\n    ahi = c - (c - acytail);\r\n    alo = acytail - ahi;\r\n    c = splitter * bcx;\r\n    bhi = c - (c - bcx);\r\n    blo = bcx - bhi;\r\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\r\n    _i = s0 - t0;\r\n    bvirt = s0 - _i;\r\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\r\n    _j = s1 + _i;\r\n    bvirt = _j - s1;\r\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\r\n    _i = _0 - t1;\r\n    bvirt = _0 - _i;\r\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\r\n    u3 = _j + _i;\r\n    bvirt = u3 - _j;\r\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\r\n    u[3] = u3;\r\n    const C1len = sum(4, B, 4, u, C1);\r\n\r\n    s1 = acx * bcytail;\r\n    c = splitter * acx;\r\n    ahi = c - (c - acx);\r\n    alo = acx - ahi;\r\n    c = splitter * bcytail;\r\n    bhi = c - (c - bcytail);\r\n    blo = bcytail - bhi;\r\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\r\n    t1 = acy * bcxtail;\r\n    c = splitter * acy;\r\n    ahi = c - (c - acy);\r\n    alo = acy - ahi;\r\n    c = splitter * bcxtail;\r\n    bhi = c - (c - bcxtail);\r\n    blo = bcxtail - bhi;\r\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\r\n    _i = s0 - t0;\r\n    bvirt = s0 - _i;\r\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\r\n    _j = s1 + _i;\r\n    bvirt = _j - s1;\r\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\r\n    _i = _0 - t1;\r\n    bvirt = _0 - _i;\r\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\r\n    u3 = _j + _i;\r\n    bvirt = u3 - _j;\r\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\r\n    u[3] = u3;\r\n    const C2len = sum(C1len, C1, 4, u, C2);\r\n\r\n    s1 = acxtail * bcytail;\r\n    c = splitter * acxtail;\r\n    ahi = c - (c - acxtail);\r\n    alo = acxtail - ahi;\r\n    c = splitter * bcytail;\r\n    bhi = c - (c - bcytail);\r\n    blo = bcytail - bhi;\r\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\r\n    t1 = acytail * bcxtail;\r\n    c = splitter * acytail;\r\n    ahi = c - (c - acytail);\r\n    alo = acytail - ahi;\r\n    c = splitter * bcxtail;\r\n    bhi = c - (c - bcxtail);\r\n    blo = bcxtail - bhi;\r\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\r\n    _i = s0 - t0;\r\n    bvirt = s0 - _i;\r\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\r\n    _j = s1 + _i;\r\n    bvirt = _j - s1;\r\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\r\n    _i = _0 - t1;\r\n    bvirt = _0 - _i;\r\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\r\n    u3 = _j + _i;\r\n    bvirt = u3 - _j;\r\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\r\n    u[3] = u3;\r\n    const Dlen = sum(C2len, C2, 4, u, D);\r\n\r\n    return D[Dlen - 1];\r\n}\r\n\r\nexport function orient2d(ax, ay, bx, by, cx, cy) {\r\n    const detleft = (ay - cy) * (bx - cx);\r\n    const detright = (ax - cx) * (by - cy);\r\n    const det = detleft - detright;\r\n\r\n    const detsum = Math.abs(detleft + detright);\r\n    if (Math.abs(det) >= ccwerrboundA * detsum) return det;\r\n\r\n    return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\r\n}\r\n\r\nexport function orient2dfast(ax, ay, bx, by, cx, cy) {\r\n    return (ay - cy) * (bx - cx) - (ax - cx) * (by - cy);\r\n}\r\n","\r\nconst EPSILON = Math.pow(2, -52);\r\nconst EDGE_STACK = new Uint32Array(512);\r\n\r\nimport {orient2d} from 'robust-predicates';\r\n\r\nexport default class Delaunator {\r\n\r\n    static from(points, getX = defaultGetX, getY = defaultGetY) {\r\n        const n = points.length;\r\n        const coords = new Float64Array(n * 2);\r\n\r\n        for (let i = 0; i < n; i++) {\r\n            const p = points[i];\r\n            coords[2 * i] = getX(p);\r\n            coords[2 * i + 1] = getY(p);\r\n        }\r\n\r\n        return new Delaunator(coords);\r\n    }\r\n\r\n    constructor(coords) {\r\n        const n = coords.length >> 1;\r\n        if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.');\r\n\r\n        this.coords = coords;\r\n\r\n        // arrays that will store the triangulation graph\r\n        const maxTriangles = Math.max(2 * n - 5, 0);\r\n        this._triangles = new Uint32Array(maxTriangles * 3);\r\n        this._halfedges = new Int32Array(maxTriangles * 3);\r\n\r\n        // temporary arrays for tracking the edges of the advancing convex hull\r\n        this._hashSize = Math.ceil(Math.sqrt(n));\r\n        this._hullPrev = new Uint32Array(n); // edge to prev edge\r\n        this._hullNext = new Uint32Array(n); // edge to next edge\r\n        this._hullTri = new Uint32Array(n); // edge to adjacent triangle\r\n        this._hullHash = new Int32Array(this._hashSize); // angular edge hash\r\n\r\n        // temporary arrays for sorting points\r\n        this._ids = new Uint32Array(n);\r\n        this._dists = new Float64Array(n);\r\n\r\n        this.update();\r\n    }\r\n\r\n    update() {\r\n        const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} =  this;\r\n        const n = coords.length >> 1;\r\n\r\n        // populate an array of point indices; calculate input data bbox\r\n        let minX = Infinity;\r\n        let minY = Infinity;\r\n        let maxX = -Infinity;\r\n        let maxY = -Infinity;\r\n\r\n        for (let i = 0; i < n; i++) {\r\n            const x = coords[2 * i];\r\n            const y = coords[2 * i + 1];\r\n            if (x < minX) minX = x;\r\n            if (y < minY) minY = y;\r\n            if (x > maxX) maxX = x;\r\n            if (y > maxY) maxY = y;\r\n            this._ids[i] = i;\r\n        }\r\n        const cx = (minX + maxX) / 2;\r\n        const cy = (minY + maxY) / 2;\r\n\r\n        let i0, i1, i2;\r\n\r\n        // pick a seed point close to the center\r\n        for (let i = 0, minDist = Infinity; i < n; i++) {\r\n            const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]);\r\n            if (d < minDist) {\r\n                i0 = i;\r\n                minDist = d;\r\n            }\r\n        }\r\n        const i0x = coords[2 * i0];\r\n        const i0y = coords[2 * i0 + 1];\r\n\r\n        // find the point closest to the seed\r\n        for (let i = 0, minDist = Infinity; i < n; i++) {\r\n            if (i === i0) continue;\r\n            const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);\r\n            if (d < minDist && d > 0) {\r\n                i1 = i;\r\n                minDist = d;\r\n            }\r\n        }\r\n        let i1x = coords[2 * i1];\r\n        let i1y = coords[2 * i1 + 1];\r\n\r\n        let minRadius = Infinity;\r\n\r\n        // find the third point which forms the smallest circumcircle with the first two\r\n        for (let i = 0; i < n; i++) {\r\n            if (i === i0 || i === i1) continue;\r\n            const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);\r\n            if (r < minRadius) {\r\n                i2 = i;\r\n                minRadius = r;\r\n            }\r\n        }\r\n        let i2x = coords[2 * i2];\r\n        let i2y = coords[2 * i2 + 1];\r\n\r\n        if (minRadius === Infinity) {\r\n            // order collinear points by dx (or dy if all x are identical)\r\n            // and return the list as a hull\r\n            for (let i = 0; i < n; i++) {\r\n                this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]);\r\n            }\r\n            quicksort(this._ids, this._dists, 0, n - 1);\r\n            const hull = new Uint32Array(n);\r\n            let j = 0;\r\n            for (let i = 0, d0 = -Infinity; i < n; i++) {\r\n                const id = this._ids[i];\r\n                const d = this._dists[id];\r\n                if (d > d0) {\r\n                    hull[j++] = id;\r\n                    d0 = d;\r\n                }\r\n            }\r\n            this.hull = hull.subarray(0, j);\r\n            this.triangles = new Uint32Array(0);\r\n            this.halfedges = new Uint32Array(0);\r\n            return;\r\n        }\r\n\r\n        // swap the order of the seed points for counter-clockwise orientation\r\n        if (orient2d(i0x, i0y, i1x, i1y, i2x, i2y) < 0) {\r\n            const i = i1;\r\n            const x = i1x;\r\n            const y = i1y;\r\n            i1 = i2;\r\n            i1x = i2x;\r\n            i1y = i2y;\r\n            i2 = i;\r\n            i2x = x;\r\n            i2y = y;\r\n        }\r\n\r\n        const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\r\n        this._cx = center.x;\r\n        this._cy = center.y;\r\n\r\n        for (let i = 0; i < n; i++) {\r\n            this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y);\r\n        }\r\n\r\n        // sort the points by distance from the seed triangle circumcenter\r\n        quicksort(this._ids, this._dists, 0, n - 1);\r\n\r\n        // set up the seed triangle as the starting hull\r\n        this._hullStart = i0;\r\n        let hullSize = 3;\r\n\r\n        hullNext[i0] = hullPrev[i2] = i1;\r\n        hullNext[i1] = hullPrev[i0] = i2;\r\n        hullNext[i2] = hullPrev[i1] = i0;\r\n\r\n        hullTri[i0] = 0;\r\n        hullTri[i1] = 1;\r\n        hullTri[i2] = 2;\r\n\r\n        hullHash.fill(-1);\r\n        hullHash[this._hashKey(i0x, i0y)] = i0;\r\n        hullHash[this._hashKey(i1x, i1y)] = i1;\r\n        hullHash[this._hashKey(i2x, i2y)] = i2;\r\n\r\n        this.trianglesLen = 0;\r\n        this._addTriangle(i0, i1, i2, -1, -1, -1);\r\n\r\n        for (let k = 0, xp, yp; k < this._ids.length; k++) {\r\n            const i = this._ids[k];\r\n            const x = coords[2 * i];\r\n            const y = coords[2 * i + 1];\r\n\r\n            // skip near-duplicate points\r\n            if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue;\r\n            xp = x;\r\n            yp = y;\r\n\r\n            // skip seed triangle points\r\n            if (i === i0 || i === i1 || i === i2) continue;\r\n\r\n            // find a visible edge on the convex hull using edge hash\r\n            let start = 0;\r\n            for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) {\r\n                start = hullHash[(key + j) % this._hashSize];\r\n                if (start !== -1 && start !== hullNext[start]) break;\r\n            }\r\n\r\n            start = hullPrev[start];\r\n            let e = start, q;\r\n            while (q = hullNext[e], orient2d(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1]) >= 0) {\r\n                e = q;\r\n                if (e === start) {\r\n                    e = -1;\r\n                    break;\r\n                }\r\n            }\r\n            if (e === -1) continue; // likely a near-duplicate point; skip it\r\n\r\n            // add the first triangle from the point\r\n            let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]);\r\n\r\n            // recursively flip triangles from the point until they satisfy the Delaunay condition\r\n            hullTri[i] = this._legalize(t + 2);\r\n            hullTri[e] = t; // keep track of boundary triangles on the hull\r\n            hullSize++;\r\n\r\n            // walk forward through the hull, adding more triangles and flipping recursively\r\n            let n = hullNext[e];\r\n            while (q = hullNext[n], orient2d(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1]) < 0) {\r\n                t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);\r\n                hullTri[i] = this._legalize(t + 2);\r\n                hullNext[n] = n; // mark as removed\r\n                hullSize--;\r\n                n = q;\r\n            }\r\n\r\n            // walk backward from the other side, adding more triangles and flipping\r\n            if (e === start) {\r\n                while (q = hullPrev[e], orient2d(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1]) < 0) {\r\n                    t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);\r\n                    this._legalize(t + 2);\r\n                    hullTri[q] = t;\r\n                    hullNext[e] = e; // mark as removed\r\n                    hullSize--;\r\n                    e = q;\r\n                }\r\n            }\r\n\r\n            // update the hull indices\r\n            this._hullStart = hullPrev[i] = e;\r\n            hullNext[e] = hullPrev[n] = i;\r\n            hullNext[i] = n;\r\n\r\n            // save the two new edges in the hash table\r\n            hullHash[this._hashKey(x, y)] = i;\r\n            hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\r\n        }\r\n\r\n        this.hull = new Uint32Array(hullSize);\r\n        for (let i = 0, e = this._hullStart; i < hullSize; i++) {\r\n            this.hull[i] = e;\r\n            e = hullNext[e];\r\n        }\r\n\r\n        // trim typed triangle mesh arrays\r\n        this.triangles = this._triangles.subarray(0, this.trianglesLen);\r\n        this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\r\n    }\r\n\r\n    _hashKey(x, y) {\r\n        return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\r\n    }\r\n\r\n    _legalize(a) {\r\n        const {_triangles: triangles, _halfedges: halfedges, coords} = this;\r\n\r\n        let i = 0;\r\n        let ar = 0;\r\n\r\n        // recursion eliminated with a fixed-size stack\r\n        while (true) {\r\n            const b = halfedges[a];\r\n\r\n            /* if the pair of triangles doesn't satisfy the Delaunay condition\r\n             * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\r\n             * then do the same check/flip recursively for the new pair of triangles\r\n             *\r\n             *           pl                    pl\r\n             *          /||\\                  /  \\\r\n             *       al/ || \\bl            al/    \\a\r\n             *        /  ||  \\              /      \\\r\n             *       /  a||b  \\    flip    /___ar___\\\r\n             *     p0\\   ||   /p1   =>   p0\\---bl---/p1\r\n             *        \\  ||  /              \\      /\r\n             *       ar\\ || /br             b\\    /br\r\n             *          \\||/                  \\  /\r\n             *           pr                    pr\r\n             */\r\n            const a0 = a - a % 3;\r\n            ar = a0 + (a + 2) % 3;\r\n\r\n            if (b === -1) { // convex hull edge\r\n                if (i === 0) break;\r\n                a = EDGE_STACK[--i];\r\n                continue;\r\n            }\r\n\r\n            const b0 = b - b % 3;\r\n            const al = a0 + (a + 1) % 3;\r\n            const bl = b0 + (b + 2) % 3;\r\n\r\n            const p0 = triangles[ar];\r\n            const pr = triangles[a];\r\n            const pl = triangles[al];\r\n            const p1 = triangles[bl];\r\n\r\n            const illegal = inCircle(\r\n                coords[2 * p0], coords[2 * p0 + 1],\r\n                coords[2 * pr], coords[2 * pr + 1],\r\n                coords[2 * pl], coords[2 * pl + 1],\r\n                coords[2 * p1], coords[2 * p1 + 1]);\r\n\r\n            if (illegal) {\r\n                triangles[a] = p1;\r\n                triangles[b] = p0;\r\n\r\n                const hbl = halfedges[bl];\r\n\r\n                // edge swapped on the other side of the hull (rare); fix the halfedge reference\r\n                if (hbl === -1) {\r\n                    let e = this._hullStart;\r\n                    do {\r\n                        if (this._hullTri[e] === bl) {\r\n                            this._hullTri[e] = a;\r\n                            break;\r\n                        }\r\n                        e = this._hullPrev[e];\r\n                    } while (e !== this._hullStart);\r\n                }\r\n                this._link(a, hbl);\r\n                this._link(b, halfedges[ar]);\r\n                this._link(ar, bl);\r\n\r\n                const br = b0 + (b + 1) % 3;\r\n\r\n                // don't worry about hitting the cap: it can only happen on extremely degenerate input\r\n                if (i < EDGE_STACK.length) {\r\n                    EDGE_STACK[i++] = br;\r\n                }\r\n            } else {\r\n                if (i === 0) break;\r\n                a = EDGE_STACK[--i];\r\n            }\r\n        }\r\n\r\n        return ar;\r\n    }\r\n\r\n    _link(a, b) {\r\n        this._halfedges[a] = b;\r\n        if (b !== -1) this._halfedges[b] = a;\r\n    }\r\n\r\n    // add a new triangle given vertex indices and adjacent half-edge ids\r\n    _addTriangle(i0, i1, i2, a, b, c) {\r\n        const t = this.trianglesLen;\r\n\r\n        this._triangles[t] = i0;\r\n        this._triangles[t + 1] = i1;\r\n        this._triangles[t + 2] = i2;\r\n\r\n        this._link(t, a);\r\n        this._link(t + 1, b);\r\n        this._link(t + 2, c);\r\n\r\n        this.trianglesLen += 3;\r\n\r\n        return t;\r\n    }\r\n}\r\n\r\n// monotonically increases with real angle, but doesn't need expensive trigonometry\r\nfunction pseudoAngle(dx, dy) {\r\n    const p = dx / (Math.abs(dx) + Math.abs(dy));\r\n    return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\r\n}\r\n\r\nfunction dist(ax, ay, bx, by) {\r\n    const dx = ax - bx;\r\n    const dy = ay - by;\r\n    return dx * dx + dy * dy;\r\n}\r\n\r\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\r\n    const dx = ax - px;\r\n    const dy = ay - py;\r\n    const ex = bx - px;\r\n    const ey = by - py;\r\n    const fx = cx - px;\r\n    const fy = cy - py;\r\n\r\n    const ap = dx * dx + dy * dy;\r\n    const bp = ex * ex + ey * ey;\r\n    const cp = fx * fx + fy * fy;\r\n\r\n    return dx * (ey * cp - bp * fy) -\r\n           dy * (ex * cp - bp * fx) +\r\n           ap * (ex * fy - ey * fx) < 0;\r\n}\r\n\r\nfunction circumradius(ax, ay, bx, by, cx, cy) {\r\n    const dx = bx - ax;\r\n    const dy = by - ay;\r\n    const ex = cx - ax;\r\n    const ey = cy - ay;\r\n\r\n    const bl = dx * dx + dy * dy;\r\n    const cl = ex * ex + ey * ey;\r\n    const d = 0.5 / (dx * ey - dy * ex);\r\n\r\n    const x = (ey * bl - dy * cl) * d;\r\n    const y = (dx * cl - ex * bl) * d;\r\n\r\n    return x * x + y * y;\r\n}\r\n\r\nfunction circumcenter(ax, ay, bx, by, cx, cy) {\r\n    const dx = bx - ax;\r\n    const dy = by - ay;\r\n    const ex = cx - ax;\r\n    const ey = cy - ay;\r\n\r\n    const bl = dx * dx + dy * dy;\r\n    const cl = ex * ex + ey * ey;\r\n    const d = 0.5 / (dx * ey - dy * ex);\r\n\r\n    const x = ax + (ey * bl - dy * cl) * d;\r\n    const y = ay + (dx * cl - ex * bl) * d;\r\n\r\n    return {x, y};\r\n}\r\n\r\nfunction quicksort(ids, dists, left, right) {\r\n    if (right - left <= 20) {\r\n        for (let i = left + 1; i <= right; i++) {\r\n            const temp = ids[i];\r\n            const tempDist = dists[temp];\r\n            let j = i - 1;\r\n            while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--];\r\n            ids[j + 1] = temp;\r\n        }\r\n    } else {\r\n        const median = (left + right) >> 1;\r\n        let i = left + 1;\r\n        let j = right;\r\n        swap(ids, median, i);\r\n        if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right);\r\n        if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right);\r\n        if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i);\r\n\r\n        const temp = ids[i];\r\n        const tempDist = dists[temp];\r\n        while (true) {\r\n            do i++; while (dists[ids[i]] < tempDist);\r\n            do j--; while (dists[ids[j]] > tempDist);\r\n            if (j < i) break;\r\n            swap(ids, i, j);\r\n        }\r\n        ids[left + 1] = ids[j];\r\n        ids[j] = temp;\r\n\r\n        if (right - i + 1 >= j - left) {\r\n            quicksort(ids, dists, i, right);\r\n            quicksort(ids, dists, left, j - 1);\r\n        } else {\r\n            quicksort(ids, dists, left, j - 1);\r\n            quicksort(ids, dists, i, right);\r\n        }\r\n    }\r\n}\r\n\r\nfunction swap(arr, i, j) {\r\n    const tmp = arr[i];\r\n    arr[i] = arr[j];\r\n    arr[j] = tmp;\r\n}\r\n\r\nfunction defaultGetX(p) {\r\n    return p[0];\r\n}\r\nfunction defaultGetY(p) {\r\n    return p[1];\r\n}\r\n","const epsilon = 1e-6;\r\n\r\nexport default class Path {\r\n  constructor() {\r\n    this._x0 = this._y0 = // start of current subpath\r\n    this._x1 = this._y1 = null; // end of current subpath\r\n    this._ = \"\";\r\n  }\r\n  moveTo(x, y) {\r\n    this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\r\n  }\r\n  closePath() {\r\n    if (this._x1 !== null) {\r\n      this._x1 = this._x0, this._y1 = this._y0;\r\n      this._ += \"Z\";\r\n    }\r\n  }\r\n  lineTo(x, y) {\r\n    this._ += `L${this._x1 = +x},${this._y1 = +y}`;\r\n  }\r\n  arc(x, y, r) {\r\n    x = +x, y = +y, r = +r;\r\n    const x0 = x + r;\r\n    const y0 = y;\r\n    if (r < 0) throw new Error(\"negative radius\");\r\n    if (this._x1 === null) this._ += `M${x0},${y0}`;\r\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += \"L\" + x0 + \",\" + y0;\r\n    if (!r) return;\r\n    this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\r\n  }\r\n  rect(x, y, w, h) {\r\n    this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;\r\n  }\r\n  value() {\r\n    return this._ || null;\r\n  }\r\n}\r\n","export default class Polygon {\r\n  constructor() {\r\n    this._ = [];\r\n  }\r\n  moveTo(x, y) {\r\n    this._.push([x, y]);\r\n  }\r\n  closePath() {\r\n    this._.push(this._[0].slice());\r\n  }\r\n  lineTo(x, y) {\r\n    this._.push([x, y]);\r\n  }\r\n  value() {\r\n    return this._.length ? this._ : null;\r\n  }\r\n}\r\n","import Path from \"./path.js\";\r\nimport Polygon from \"./polygon.js\";\r\n\r\nexport default class Voronoi {\r\n  constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\r\n    if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\r\n    this.delaunay = delaunay;\r\n    this._circumcenters = new Float64Array(delaunay.points.length * 2);\r\n    this.vectors = new Float64Array(delaunay.points.length * 2);\r\n    this.xmax = xmax, this.xmin = xmin;\r\n    this.ymax = ymax, this.ymin = ymin;\r\n    this._init();\r\n  }\r\n  update() {\r\n    this.delaunay.update();\r\n    this._init();\r\n    return this;\r\n  }\r\n  _init() {\r\n    const {delaunay: {points, hull, triangles}, vectors} = this;\r\n    let bx, by; // lazily computed barycenter of the hull\r\n\r\n    // Compute circumcenters.\r\n    const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\r\n    for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\r\n      const t1 = triangles[i] * 2;\r\n      const t2 = triangles[i + 1] * 2;\r\n      const t3 = triangles[i + 2] * 2;\r\n      const x1 = points[t1];\r\n      const y1 = points[t1 + 1];\r\n      const x2 = points[t2];\r\n      const y2 = points[t2 + 1];\r\n      const x3 = points[t3];\r\n      const y3 = points[t3 + 1];\r\n\r\n      const dx = x2 - x1;\r\n      const dy = y2 - y1;\r\n      const ex = x3 - x1;\r\n      const ey = y3 - y1;\r\n      const ab = (dx * ey - dy * ex) * 2;\r\n\r\n      if (Math.abs(ab) < 1e-9) {\r\n        // For a degenerate triangle, the circumcenter is at the infinity, in a\r\n        // direction orthogonal to the halfedge and away from the “center” of\r\n        // the diagram <bx, by>, defined as the hull’s barycenter.\r\n        if (bx === undefined) {\r\n          bx = by = 0;\r\n          for (const i of hull) bx += points[i * 2], by += points[i * 2 + 1];\r\n          bx /= hull.length, by /= hull.length;\r\n        }\r\n        const a = 1e9 * Math.sign((bx - x1) * ey - (by - y1) * ex);\r\n        x = (x1 + x3) / 2 - a * ey;\r\n        y = (y1 + y3) / 2 + a * ex;\r\n      } else {\r\n        const d = 1 / ab;\r\n        const bl = dx * dx + dy * dy;\r\n        const cl = ex * ex + ey * ey;\r\n        x = x1 + (ey * bl - dy * cl) * d;\r\n        y = y1 + (dx * cl - ex * bl) * d;\r\n      }\r\n      circumcenters[j] = x;\r\n      circumcenters[j + 1] = y;\r\n    }\r\n\r\n    // Compute exterior cell rays.\r\n    let h = hull[hull.length - 1];\r\n    let p0, p1 = h * 4;\r\n    let x0, x1 = points[2 * h];\r\n    let y0, y1 = points[2 * h + 1];\r\n    vectors.fill(0);\r\n    for (let i = 0; i < hull.length; ++i) {\r\n      h = hull[i];\r\n      p0 = p1, x0 = x1, y0 = y1;\r\n      p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\r\n      vectors[p0 + 2] = vectors[p1] = y0 - y1;\r\n      vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\r\n    }\r\n  }\r\n  render(context) {\r\n    const buffer = context == null ? context = new Path : undefined;\r\n    const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\r\n    if (hull.length <= 1) return null;\r\n    for (let i = 0, n = halfedges.length; i < n; ++i) {\r\n      const j = halfedges[i];\r\n      if (j < i) continue;\r\n      const ti = Math.floor(i / 3) * 2;\r\n      const tj = Math.floor(j / 3) * 2;\r\n      const xi = circumcenters[ti];\r\n      const yi = circumcenters[ti + 1];\r\n      const xj = circumcenters[tj];\r\n      const yj = circumcenters[tj + 1];\r\n      this._renderSegment(xi, yi, xj, yj, context);\r\n    }\r\n    let h0, h1 = hull[hull.length - 1];\r\n    for (let i = 0; i < hull.length; ++i) {\r\n      h0 = h1, h1 = hull[i];\r\n      const t = Math.floor(inedges[h1] / 3) * 2;\r\n      const x = circumcenters[t];\r\n      const y = circumcenters[t + 1];\r\n      const v = h0 * 4;\r\n      const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\r\n      if (p) this._renderSegment(x, y, p[0], p[1], context);\r\n    }\r\n    return buffer && buffer.value();\r\n  }\r\n  renderBounds(context) {\r\n    const buffer = context == null ? context = new Path : undefined;\r\n    context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\r\n    return buffer && buffer.value();\r\n  }\r\n  renderCell(i, context) {\r\n    const buffer = context == null ? context = new Path : undefined;\r\n    const points = this._clip(i);\r\n    if (points === null || !points.length) return;\r\n    context.moveTo(points[0], points[1]);\r\n    let n = points.length;\r\n    while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\r\n    for (let i = 2; i < n; i += 2) {\r\n      if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\r\n        context.lineTo(points[i], points[i + 1]);\r\n    }\r\n    context.closePath();\r\n    return buffer && buffer.value();\r\n  }\r\n  *cellPolygons() {\r\n    const {delaunay: {points}} = this;\r\n    for (let i = 0, n = points.length / 2; i < n; ++i) {\r\n      const cell = this.cellPolygon(i);\r\n      if (cell) cell.index = i, yield cell;\r\n    }\r\n  }\r\n  cellPolygon(i) {\r\n    const polygon = new Polygon;\r\n    this.renderCell(i, polygon);\r\n    return polygon.value();\r\n  }\r\n  _renderSegment(x0, y0, x1, y1, context) {\r\n    let S;\r\n    const c0 = this._regioncode(x0, y0);\r\n    const c1 = this._regioncode(x1, y1);\r\n    if (c0 === 0 && c1 === 0) {\r\n      context.moveTo(x0, y0);\r\n      context.lineTo(x1, y1);\r\n    } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\r\n      context.moveTo(S[0], S[1]);\r\n      context.lineTo(S[2], S[3]);\r\n    }\r\n  }\r\n  contains(i, x, y) {\r\n    if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\r\n    return this.delaunay._step(i, x, y) === i;\r\n  }\r\n  *neighbors(i) {\r\n    const ci = this._clip(i);\r\n    if (ci) for (const j of this.delaunay.neighbors(i)) {\r\n      const cj = this._clip(j);\r\n      // find the common edge\r\n      if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\r\n        for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\r\n          if (ci[ai] === cj[aj]\r\n              && ci[ai + 1] === cj[aj + 1]\r\n              && ci[(ai + 2) % li] === cj[(aj + lj - 2) % lj]\r\n              && ci[(ai + 3) % li] === cj[(aj + lj - 1) % lj]) {\r\n            yield j;\r\n            break loop;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n  _cell(i) {\r\n    const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\r\n    const e0 = inedges[i];\r\n    if (e0 === -1) return null; // coincident point\r\n    const points = [];\r\n    let e = e0;\r\n    do {\r\n      const t = Math.floor(e / 3);\r\n      points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\r\n      e = e % 3 === 2 ? e - 2 : e + 1;\r\n      if (triangles[e] !== i) break; // bad triangulation\r\n      e = halfedges[e];\r\n    } while (e !== e0 && e !== -1);\r\n    return points;\r\n  }\r\n  _clip(i) {\r\n    // degenerate case (1 valid point: return the box)\r\n    if (i === 0 && this.delaunay.hull.length === 1) {\r\n      return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\r\n    }\r\n    const points = this._cell(i);\r\n    if (points === null) return null;\r\n    const {vectors: V} = this;\r\n    const v = i * 4;\r\n    return this._simplify(V[v] || V[v + 1]\r\n        ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\r\n        : this._clipFinite(i, points));\r\n  }\r\n  _clipFinite(i, points) {\r\n    const n = points.length;\r\n    let P = null;\r\n    let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\r\n    let c0, c1 = this._regioncode(x1, y1);\r\n    let e0, e1 = 0;\r\n    for (let j = 0; j < n; j += 2) {\r\n      x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\r\n      c0 = c1, c1 = this._regioncode(x1, y1);\r\n      if (c0 === 0 && c1 === 0) {\r\n        e0 = e1, e1 = 0;\r\n        if (P) P.push(x1, y1);\r\n        else P = [x1, y1];\r\n      } else {\r\n        let S, sx0, sy0, sx1, sy1;\r\n        if (c0 === 0) {\r\n          if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\r\n          [sx0, sy0, sx1, sy1] = S;\r\n        } else {\r\n          if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\r\n          [sx1, sy1, sx0, sy0] = S;\r\n          e0 = e1, e1 = this._edgecode(sx0, sy0);\r\n          if (e0 && e1) this._edge(i, e0, e1, P, P.length);\r\n          if (P) P.push(sx0, sy0);\r\n          else P = [sx0, sy0];\r\n        }\r\n        e0 = e1, e1 = this._edgecode(sx1, sy1);\r\n        if (e0 && e1) this._edge(i, e0, e1, P, P.length);\r\n        if (P) P.push(sx1, sy1);\r\n        else P = [sx1, sy1];\r\n      }\r\n    }\r\n    if (P) {\r\n      e0 = e1, e1 = this._edgecode(P[0], P[1]);\r\n      if (e0 && e1) this._edge(i, e0, e1, P, P.length);\r\n    } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\r\n      return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\r\n    }\r\n    return P;\r\n  }\r\n  _clipSegment(x0, y0, x1, y1, c0, c1) {\r\n    // for more robustness, always consider the segment in the same order\r\n    const flip = c0 < c1;\r\n    if (flip) [x0, y0, x1, y1, c0, c1] = [x1, y1, x0, y0, c1, c0];\r\n    while (true) {\r\n      if (c0 === 0 && c1 === 0) return flip ? [x1, y1, x0, y0] : [x0, y0, x1, y1];\r\n      if (c0 & c1) return null;\r\n      let x, y, c = c0 || c1;\r\n      if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\r\n      else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\r\n      else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\r\n      else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\r\n      if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\r\n      else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\r\n    }\r\n  }\r\n  _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\r\n    let P = Array.from(points), p;\r\n    if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\r\n    if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\r\n    if (P = this._clipFinite(i, P)) {\r\n      for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\r\n        c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\r\n        if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\r\n      }\r\n    } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\r\n      P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\r\n    }\r\n    return P;\r\n  }\r\n  _edge(i, e0, e1, P, j) {\r\n    while (e0 !== e1) {\r\n      let x, y;\r\n      switch (e0) {\r\n        case 0b0101: e0 = 0b0100; continue; // top-left\r\n        case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\r\n        case 0b0110: e0 = 0b0010; continue; // top-right\r\n        case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\r\n        case 0b1010: e0 = 0b1000; continue; // bottom-right\r\n        case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\r\n        case 0b1001: e0 = 0b0001; continue; // bottom-left\r\n        case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\r\n      }\r\n      // Note: this implicitly checks for out of bounds: if P[j] or P[j+1] are\r\n      // undefined, the conditional statement will be executed.\r\n      if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\r\n        P.splice(j, 0, x, y), j += 2;\r\n      }\r\n    }\r\n    return j;\r\n  }\r\n  _project(x0, y0, vx, vy) {\r\n    let t = Infinity, c, x, y;\r\n    if (vy < 0) { // top\r\n      if (y0 <= this.ymin) return null;\r\n      if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\r\n    } else if (vy > 0) { // bottom\r\n      if (y0 >= this.ymax) return null;\r\n      if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\r\n    }\r\n    if (vx > 0) { // right\r\n      if (x0 >= this.xmax) return null;\r\n      if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\r\n    } else if (vx < 0) { // left\r\n      if (x0 <= this.xmin) return null;\r\n      if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\r\n    }\r\n    return [x, y];\r\n  }\r\n  _edgecode(x, y) {\r\n    return (x === this.xmin ? 0b0001\r\n        : x === this.xmax ? 0b0010 : 0b0000)\r\n        | (y === this.ymin ? 0b0100\r\n        : y === this.ymax ? 0b1000 : 0b0000);\r\n  }\r\n  _regioncode(x, y) {\r\n    return (x < this.xmin ? 0b0001\r\n        : x > this.xmax ? 0b0010 : 0b0000)\r\n        | (y < this.ymin ? 0b0100\r\n        : y > this.ymax ? 0b1000 : 0b0000);\r\n  }\r\n  _simplify(P) {\r\n    if (P && P.length > 4) {\r\n      for (let i = 0; i < P.length; i+= 2) {\r\n        const j = (i + 2) % P.length, k = (i + 4) % P.length;\r\n        if (P[i] === P[j] && P[j] === P[k] || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1]) {\r\n          P.splice(j, 2), i -= 2;\r\n        }\r\n      }\r\n      if (!P.length) P = null;\r\n    }\r\n    return P;\r\n  }\r\n}\r\n","import Delaunator from \"delaunator\";\r\nimport Path from \"./path.js\";\r\nimport Polygon from \"./polygon.js\";\r\nimport Voronoi from \"./voronoi.js\";\r\n\r\nconst tau = 2 * Math.PI, pow = Math.pow;\r\n\r\nfunction pointX(p) {\r\n  return p[0];\r\n}\r\n\r\nfunction pointY(p) {\r\n  return p[1];\r\n}\r\n\r\n// A triangulation is collinear if all its triangles have a non-null area\r\nfunction collinear(d) {\r\n  const {triangles, coords} = d;\r\n  for (let i = 0; i < triangles.length; i += 3) {\r\n    const a = 2 * triangles[i],\r\n          b = 2 * triangles[i + 1],\r\n          c = 2 * triangles[i + 2],\r\n          cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\r\n                - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\r\n    if (cross > 1e-10) return false;\r\n  }\r\n  return true;\r\n}\r\n\r\nfunction jitter(x, y, r) {\r\n  return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\r\n}\r\n\r\nexport default class Delaunay {\r\n  static from(points, fx = pointX, fy = pointY, that) {\r\n    return new Delaunay(\"length\" in points\r\n        ? flatArray(points, fx, fy, that)\r\n        : Float64Array.from(flatIterable(points, fx, fy, that)));\r\n  }\r\n  constructor(points) {\r\n    this._delaunator = new Delaunator(points);\r\n    this.inedges = new Int32Array(points.length / 2);\r\n    this._hullIndex = new Int32Array(points.length / 2);\r\n    this.points = this._delaunator.coords;\r\n    this._init();\r\n  }\r\n  update() {\r\n    this._delaunator.update();\r\n    this._init();\r\n    return this;\r\n  }\r\n  _init() {\r\n    const d = this._delaunator, points = this.points;\r\n\r\n    // check for collinear\r\n    if (d.hull && d.hull.length > 2 && collinear(d)) {\r\n      this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\r\n        .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\r\n      const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\r\n        bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\r\n        r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\r\n      for (let i = 0, n = points.length / 2; i < n; ++i) {\r\n        const p = jitter(points[2 * i], points[2 * i + 1], r);\r\n        points[2 * i] = p[0];\r\n        points[2 * i + 1] = p[1];\r\n      }\r\n      this._delaunator = new Delaunator(points);\r\n    } else {\r\n      delete this.collinear;\r\n    }\r\n\r\n    const halfedges = this.halfedges = this._delaunator.halfedges;\r\n    const hull = this.hull = this._delaunator.hull;\r\n    const triangles = this.triangles = this._delaunator.triangles;\r\n    const inedges = this.inedges.fill(-1);\r\n    const hullIndex = this._hullIndex.fill(-1);\r\n\r\n    // Compute an index from each point to an (arbitrary) incoming halfedge\r\n    // Used to give the first neighbor of each point; for this reason,\r\n    // on the hull we give priority to exterior halfedges\r\n    for (let e = 0, n = halfedges.length; e < n; ++e) {\r\n      const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\r\n      if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\r\n    }\r\n    for (let i = 0, n = hull.length; i < n; ++i) {\r\n      hullIndex[hull[i]] = i;\r\n    }\r\n\r\n    // degenerate case: 1 or 2 (distinct) points\r\n    if (hull.length <= 2 && hull.length > 0) {\r\n      this.triangles = new Int32Array(3).fill(-1);\r\n      this.halfedges = new Int32Array(3).fill(-1);\r\n      this.triangles[0] = hull[0];\r\n      inedges[hull[0]] = 1;\r\n      if (hull.length === 2) {\r\n        inedges[hull[1]] = 0;\r\n        this.triangles[1] = hull[1];\r\n        this.triangles[2] = hull[1];\r\n      }\r\n    }\r\n  }\r\n  voronoi(bounds) {\r\n    return new Voronoi(this, bounds);\r\n  }\r\n  *neighbors(i) {\r\n    const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\r\n\r\n    // degenerate case with several collinear points\r\n    if (collinear) {\r\n      const l = collinear.indexOf(i);\r\n      if (l > 0) yield collinear[l - 1];\r\n      if (l < collinear.length - 1) yield collinear[l + 1];\r\n      return;\r\n    }\r\n\r\n    const e0 = inedges[i];\r\n    if (e0 === -1) return; // coincident point\r\n    let e = e0, p0 = -1;\r\n    do {\r\n      yield p0 = triangles[e];\r\n      e = e % 3 === 2 ? e - 2 : e + 1;\r\n      if (triangles[e] !== i) return; // bad triangulation\r\n      e = halfedges[e];\r\n      if (e === -1) {\r\n        const p = hull[(_hullIndex[i] + 1) % hull.length];\r\n        if (p !== p0) yield p;\r\n        return;\r\n      }\r\n    } while (e !== e0);\r\n  }\r\n  find(x, y, i = 0) {\r\n    if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\r\n    const i0 = i;\r\n    let c;\r\n    while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\r\n    return c;\r\n  }\r\n  _step(i, x, y) {\r\n    const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\r\n    if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\r\n    let c = i;\r\n    let dc = pow(x - points[i * 2], 2) + pow(y - points[i * 2 + 1], 2);\r\n    const e0 = inedges[i];\r\n    let e = e0;\r\n    do {\r\n      let t = triangles[e];\r\n      const dt = pow(x - points[t * 2], 2) + pow(y - points[t * 2 + 1], 2);\r\n      if (dt < dc) dc = dt, c = t;\r\n      e = e % 3 === 2 ? e - 2 : e + 1;\r\n      if (triangles[e] !== i) break; // bad triangulation\r\n      e = halfedges[e];\r\n      if (e === -1) {\r\n        e = hull[(_hullIndex[i] + 1) % hull.length];\r\n        if (e !== t) {\r\n          if (pow(x - points[e * 2], 2) + pow(y - points[e * 2 + 1], 2) < dc) return e;\r\n        }\r\n        break;\r\n      }\r\n    } while (e !== e0);\r\n    return c;\r\n  }\r\n  render(context) {\r\n    const buffer = context == null ? context = new Path : undefined;\r\n    const {points, halfedges, triangles} = this;\r\n    for (let i = 0, n = halfedges.length; i < n; ++i) {\r\n      const j = halfedges[i];\r\n      if (j < i) continue;\r\n      const ti = triangles[i] * 2;\r\n      const tj = triangles[j] * 2;\r\n      context.moveTo(points[ti], points[ti + 1]);\r\n      context.lineTo(points[tj], points[tj + 1]);\r\n    }\r\n    this.renderHull(context);\r\n    return buffer && buffer.value();\r\n  }\r\n  renderPoints(context, r) {\r\n    if (r === undefined && (!context || typeof context.moveTo !== \"function\")) r = context, context = null;\r\n    r = r == undefined ? 2 : +r;\r\n    const buffer = context == null ? context = new Path : undefined;\r\n    const {points} = this;\r\n    for (let i = 0, n = points.length; i < n; i += 2) {\r\n      const x = points[i], y = points[i + 1];\r\n      context.moveTo(x + r, y);\r\n      context.arc(x, y, r, 0, tau);\r\n    }\r\n    return buffer && buffer.value();\r\n  }\r\n  renderHull(context) {\r\n    const buffer = context == null ? context = new Path : undefined;\r\n    const {hull, points} = this;\r\n    const h = hull[0] * 2, n = hull.length;\r\n    context.moveTo(points[h], points[h + 1]);\r\n    for (let i = 1; i < n; ++i) {\r\n      const h = 2 * hull[i];\r\n      context.lineTo(points[h], points[h + 1]);\r\n    }\r\n    context.closePath();\r\n    return buffer && buffer.value();\r\n  }\r\n  hullPolygon() {\r\n    const polygon = new Polygon;\r\n    this.renderHull(polygon);\r\n    return polygon.value();\r\n  }\r\n  renderTriangle(i, context) {\r\n    const buffer = context == null ? context = new Path : undefined;\r\n    const {points, triangles} = this;\r\n    const t0 = triangles[i *= 3] * 2;\r\n    const t1 = triangles[i + 1] * 2;\r\n    const t2 = triangles[i + 2] * 2;\r\n    context.moveTo(points[t0], points[t0 + 1]);\r\n    context.lineTo(points[t1], points[t1 + 1]);\r\n    context.lineTo(points[t2], points[t2 + 1]);\r\n    context.closePath();\r\n    return buffer && buffer.value();\r\n  }\r\n  *trianglePolygons() {\r\n    const {triangles} = this;\r\n    for (let i = 0, n = triangles.length / 3; i < n; ++i) {\r\n      yield this.trianglePolygon(i);\r\n    }\r\n  }\r\n  trianglePolygon(i) {\r\n    const polygon = new Polygon;\r\n    this.renderTriangle(i, polygon);\r\n    return polygon.value();\r\n  }\r\n}\r\n\r\nfunction flatArray(points, fx, fy, that) {\r\n  const n = points.length;\r\n  const array = new Float64Array(n * 2);\r\n  for (let i = 0; i < n; ++i) {\r\n    const p = points[i];\r\n    array[i * 2] = fx.call(that, p, i, points);\r\n    array[i * 2 + 1] = fy.call(that, p, i, points);\r\n  }\r\n  return array;\r\n}\r\n\r\nfunction* flatIterable(points, fx, fy, that) {\r\n  let i = 0;\r\n  for (const p of points) {\r\n    yield fx.call(that, p, i, points);\r\n    yield fy.call(that, p, i, points);\r\n    ++i;\r\n  }\r\n}\r\n","var EOL = {},\r\n    EOF = {},\r\n    QUOTE = 34,\r\n    NEWLINE = 10,\r\n    RETURN = 13;\r\n\r\nfunction objectConverter(columns) {\r\n  return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\r\n    return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\r\n  }).join(\",\") + \"}\");\r\n}\r\n\r\nfunction customConverter(columns, f) {\r\n  var object = objectConverter(columns);\r\n  return function(row, i) {\r\n    return f(object(row), i, columns);\r\n  };\r\n}\r\n\r\n// Compute unique columns in order of discovery.\r\nfunction inferColumns(rows) {\r\n  var columnSet = Object.create(null),\r\n      columns = [];\r\n\r\n  rows.forEach(function(row) {\r\n    for (var column in row) {\r\n      if (!(column in columnSet)) {\r\n        columns.push(columnSet[column] = column);\r\n      }\r\n    }\r\n  });\r\n\r\n  return columns;\r\n}\r\n\r\nfunction pad(value, width) {\r\n  var s = value + \"\", length = s.length;\r\n  return length < width ? new Array(width - length + 1).join(0) + s : s;\r\n}\r\n\r\nfunction formatYear(year) {\r\n  return year < 0 ? \"-\" + pad(-year, 6)\r\n    : year > 9999 ? \"+\" + pad(year, 6)\r\n    : pad(year, 4);\r\n}\r\n\r\nfunction formatDate(date) {\r\n  var hours = date.getUTCHours(),\r\n      minutes = date.getUTCMinutes(),\r\n      seconds = date.getUTCSeconds(),\r\n      milliseconds = date.getUTCMilliseconds();\r\n  return isNaN(date) ? \"Invalid Date\"\r\n      : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\r\n      + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\r\n      : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\r\n      : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\r\n      : \"\");\r\n}\r\n\r\nexport default function(delimiter) {\r\n  var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\r\n      DELIMITER = delimiter.charCodeAt(0);\r\n\r\n  function parse(text, f) {\r\n    var convert, columns, rows = parseRows(text, function(row, i) {\r\n      if (convert) return convert(row, i - 1);\r\n      columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\r\n    });\r\n    rows.columns = columns || [];\r\n    return rows;\r\n  }\r\n\r\n  function parseRows(text, f) {\r\n    var rows = [], // output rows\r\n        N = text.length,\r\n        I = 0, // current character index\r\n        n = 0, // current line number\r\n        t, // current token\r\n        eof = N <= 0, // current token followed by EOF?\r\n        eol = false; // current token followed by EOL?\r\n\r\n    // Strip the trailing newline.\r\n    if (text.charCodeAt(N - 1) === NEWLINE) --N;\r\n    if (text.charCodeAt(N - 1) === RETURN) --N;\r\n\r\n    function token() {\r\n      if (eof) return EOF;\r\n      if (eol) return eol = false, EOL;\r\n\r\n      // Unescape quotes.\r\n      var i, j = I, c;\r\n      if (text.charCodeAt(j) === QUOTE) {\r\n        while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\r\n        if ((i = I) >= N) eof = true;\r\n        else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\r\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\r\n        return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\r\n      }\r\n\r\n      // Find next delimiter or newline.\r\n      while (I < N) {\r\n        if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\r\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\r\n        else if (c !== DELIMITER) continue;\r\n        return text.slice(j, i);\r\n      }\r\n\r\n      // Return last token before EOF.\r\n      return eof = true, text.slice(j, N);\r\n    }\r\n\r\n    while ((t = token()) !== EOF) {\r\n      var row = [];\r\n      while (t !== EOL && t !== EOF) row.push(t), t = token();\r\n      if (f && (row = f(row, n++)) == null) continue;\r\n      rows.push(row);\r\n    }\r\n\r\n    return rows;\r\n  }\r\n\r\n  function preformatBody(rows, columns) {\r\n    return rows.map(function(row) {\r\n      return columns.map(function(column) {\r\n        return formatValue(row[column]);\r\n      }).join(delimiter);\r\n    });\r\n  }\r\n\r\n  function format(rows, columns) {\r\n    if (columns == null) columns = inferColumns(rows);\r\n    return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\r\n  }\r\n\r\n  function formatBody(rows, columns) {\r\n    if (columns == null) columns = inferColumns(rows);\r\n    return preformatBody(rows, columns).join(\"\\n\");\r\n  }\r\n\r\n  function formatRows(rows) {\r\n    return rows.map(formatRow).join(\"\\n\");\r\n  }\r\n\r\n  function formatRow(row) {\r\n    return row.map(formatValue).join(delimiter);\r\n  }\r\n\r\n  function formatValue(value) {\r\n    return value == null ? \"\"\r\n        : value instanceof Date ? formatDate(value)\r\n        : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\r\n        : value;\r\n  }\r\n\r\n  return {\r\n    parse: parse,\r\n    parseRows: parseRows,\r\n    format: format,\r\n    formatBody: formatBody,\r\n    formatRows: formatRows,\r\n    formatRow: formatRow,\r\n    formatValue: formatValue\r\n  };\r\n}\r\n","import dsv from \"./dsv.js\";\r\n\r\nvar csv = dsv(\",\");\r\n\r\nexport var csvParse = csv.parse;\r\nexport var csvParseRows = csv.parseRows;\r\nexport var csvFormat = csv.format;\r\nexport var csvFormatBody = csv.formatBody;\r\nexport var csvFormatRows = csv.formatRows;\r\nexport var csvFormatRow = csv.formatRow;\r\nexport var csvFormatValue = csv.formatValue;\r\n","import dsv from \"./dsv.js\";\r\n\r\nvar tsv = dsv(\"\\t\");\r\n\r\nexport var tsvParse = tsv.parse;\r\nexport var tsvParseRows = tsv.parseRows;\r\nexport var tsvFormat = tsv.format;\r\nexport var tsvFormatBody = tsv.formatBody;\r\nexport var tsvFormatRows = tsv.formatRows;\r\nexport var tsvFormatRow = tsv.formatRow;\r\nexport var tsvFormatValue = tsv.formatValue;\r\n","export default function autoType(object) {\r\n  for (var key in object) {\r\n    var value = object[key].trim(), number, m;\r\n    if (!value) value = null;\r\n    else if (value === \"true\") value = true;\r\n    else if (value === \"false\") value = false;\r\n    else if (value === \"NaN\") value = NaN;\r\n    else if (!isNaN(number = +value)) value = number;\r\n    else if (m = value.match(/^([-+]\\d{2})?\\d{4}(-\\d{2}(-\\d{2})?)?(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[-+]\\d{2}:\\d{2})?)?$/)) {\r\n      if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, \"/\").replace(/T/, \" \");\r\n      value = new Date(value);\r\n    }\r\n    else continue;\r\n    object[key] = value;\r\n  }\r\n  return object;\r\n}\r\n\r\n// https://github.com/d3/d3-dsv/issues/45\r\nconst fixtz = new Date(\"2019-01-01T00:00\").getHours() || new Date(\"2019-07-01T00:00\").getHours();","function responseBlob(response) {\r\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\r\n  return response.blob();\r\n}\r\n\r\nexport default function(input, init) {\r\n  return fetch(input, init).then(responseBlob);\r\n}\r\n","function responseArrayBuffer(response) {\r\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\r\n  return response.arrayBuffer();\r\n}\r\n\r\nexport default function(input, init) {\r\n  return fetch(input, init).then(responseArrayBuffer);\r\n}\r\n","function responseText(response) {\r\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\r\n  return response.text();\r\n}\r\n\r\nexport default function(input, init) {\r\n  return fetch(input, init).then(responseText);\r\n}\r\n","import {csvParse, dsvFormat, tsvParse} from \"d3-dsv\";\r\nimport text from \"./text.js\";\r\n\r\nfunction dsvParse(parse) {\r\n  return function(input, init, row) {\r\n    if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\r\n    return text(input, init).then(function(response) {\r\n      return parse(response, row);\r\n    });\r\n  };\r\n}\r\n\r\nexport default function dsv(delimiter, input, init, row) {\r\n  if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\r\n  var format = dsvFormat(delimiter);\r\n  return text(input, init).then(function(response) {\r\n    return format.parse(response, row);\r\n  });\r\n}\r\n\r\nexport var csv = dsvParse(csvParse);\r\nexport var tsv = dsvParse(tsvParse);\r\n","function responseJson(response) {\r\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\r\n  if (response.status === 204 || response.status === 205) return;\r\n  return response.json();\r\n}\r\n\r\nexport default function(input, init) {\r\n  return fetch(input, init).then(responseJson);\r\n}\r\n","import text from \"./text.js\";\r\n\r\nfunction parser(type) {\r\n  return (input, init) => text(input, init)\r\n    .then(text => (new DOMParser).parseFromString(text, type));\r\n}\r\n\r\nexport default parser(\"application/xml\");\r\n\r\nexport var html = parser(\"text/html\");\r\n\r\nexport var svg = parser(\"image/svg+xml\");\r\n","export default function(d) {\r\n  const x = +this._x.call(null, d),\r\n      y = +this._y.call(null, d);\r\n  return add(this.cover(x, y), x, y, d);\r\n}\r\n\r\nfunction add(tree, x, y, d) {\r\n  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\r\n\r\n  var parent,\r\n      node = tree._root,\r\n      leaf = {data: d},\r\n      x0 = tree._x0,\r\n      y0 = tree._y0,\r\n      x1 = tree._x1,\r\n      y1 = tree._y1,\r\n      xm,\r\n      ym,\r\n      xp,\r\n      yp,\r\n      right,\r\n      bottom,\r\n      i,\r\n      j;\r\n\r\n  // If the tree is empty, initialize the root as a leaf.\r\n  if (!node) return tree._root = leaf, tree;\r\n\r\n  // Find the existing leaf for the new point, or add it.\r\n  while (node.length) {\r\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\r\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\r\n    if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\r\n  }\r\n\r\n  // Is the new point is exactly coincident with the existing point?\r\n  xp = +tree._x.call(null, node.data);\r\n  yp = +tree._y.call(null, node.data);\r\n  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\r\n\r\n  // Otherwise, split the leaf node until the old and new point are separated.\r\n  do {\r\n    parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\r\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\r\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\r\n  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\r\n  return parent[j] = node, parent[i] = leaf, tree;\r\n}\r\n\r\nexport function addAll(data) {\r\n  var d, i, n = data.length,\r\n      x,\r\n      y,\r\n      xz = new Array(n),\r\n      yz = new Array(n),\r\n      x0 = Infinity,\r\n      y0 = Infinity,\r\n      x1 = -Infinity,\r\n      y1 = -Infinity;\r\n\r\n  // Compute the points and their extent.\r\n  for (i = 0; i < n; ++i) {\r\n    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\r\n    xz[i] = x;\r\n    yz[i] = y;\r\n    if (x < x0) x0 = x;\r\n    if (x > x1) x1 = x;\r\n    if (y < y0) y0 = y;\r\n    if (y > y1) y1 = y;\r\n  }\r\n\r\n  // If there were no (valid) points, abort.\r\n  if (x0 > x1 || y0 > y1) return this;\r\n\r\n  // Expand the tree to cover the new points.\r\n  this.cover(x0, y0).cover(x1, y1);\r\n\r\n  // Add the new points.\r\n  for (i = 0; i < n; ++i) {\r\n    add(this, xz[i], yz[i], data[i]);\r\n  }\r\n\r\n  return this;\r\n}\r\n","export default function(node, x0, y0, x1, y1) {\r\n  this.node = node;\r\n  this.x0 = x0;\r\n  this.y0 = y0;\r\n  this.x1 = x1;\r\n  this.y1 = y1;\r\n}\r\n","export function defaultX(d) {\r\n  return d[0];\r\n}\r\n\r\nexport default function(_) {\r\n  return arguments.length ? (this._x = _, this) : this._x;\r\n}\r\n","export function defaultY(d) {\r\n  return d[1];\r\n}\r\n\r\nexport default function(_) {\r\n  return arguments.length ? (this._y = _, this) : this._y;\r\n}\r\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\r\nimport tree_cover from \"./cover.js\";\r\nimport tree_data from \"./data.js\";\r\nimport tree_extent from \"./extent.js\";\r\nimport tree_find from \"./find.js\";\r\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\r\nimport tree_root from \"./root.js\";\r\nimport tree_size from \"./size.js\";\r\nimport tree_visit from \"./visit.js\";\r\nimport tree_visitAfter from \"./visitAfter.js\";\r\nimport tree_x, {defaultX} from \"./x.js\";\r\nimport tree_y, {defaultY} from \"./y.js\";\r\n\r\nexport default function quadtree(nodes, x, y) {\r\n  var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\r\n  return nodes == null ? tree : tree.addAll(nodes);\r\n}\r\n\r\nfunction Quadtree(x, y, x0, y0, x1, y1) {\r\n  this._x = x;\r\n  this._y = y;\r\n  this._x0 = x0;\r\n  this._y0 = y0;\r\n  this._x1 = x1;\r\n  this._y1 = y1;\r\n  this._root = undefined;\r\n}\r\n\r\nfunction leaf_copy(leaf) {\r\n  var copy = {data: leaf.data}, next = copy;\r\n  while (leaf = leaf.next) next = next.next = {data: leaf.data};\r\n  return copy;\r\n}\r\n\r\nvar treeProto = quadtree.prototype = Quadtree.prototype;\r\n\r\ntreeProto.copy = function() {\r\n  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\r\n      node = this._root,\r\n      nodes,\r\n      child;\r\n\r\n  if (!node) return copy;\r\n\r\n  if (!node.length) return copy._root = leaf_copy(node), copy;\r\n\r\n  nodes = [{source: node, target: copy._root = new Array(4)}];\r\n  while (node = nodes.pop()) {\r\n    for (var i = 0; i < 4; ++i) {\r\n      if (child = node.source[i]) {\r\n        if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\r\n        else node.target[i] = leaf_copy(child);\r\n      }\r\n    }\r\n  }\r\n\r\n  return copy;\r\n};\r\n\r\ntreeProto.add = tree_add;\r\ntreeProto.addAll = tree_addAll;\r\ntreeProto.cover = tree_cover;\r\ntreeProto.data = tree_data;\r\ntreeProto.extent = tree_extent;\r\ntreeProto.find = tree_find;\r\ntreeProto.remove = tree_remove;\r\ntreeProto.removeAll = tree_removeAll;\r\ntreeProto.root = tree_root;\r\ntreeProto.size = tree_size;\r\ntreeProto.visit = tree_visit;\r\ntreeProto.visitAfter = tree_visitAfter;\r\ntreeProto.x = tree_x;\r\ntreeProto.y = tree_y;\r\n","export default function(x) {\r\n  return function() {\r\n    return x;\r\n  };\r\n}\r\n","export default function(random) {\r\n  return (random() - 0.5) * 1e-6;\r\n}\r\n","import {quadtree} from \"d3-quadtree\";\r\nimport constant from \"./constant.js\";\r\nimport jiggle from \"./jiggle.js\";\r\n\r\nfunction x(d) {\r\n  return d.x + d.vx;\r\n}\r\n\r\nfunction y(d) {\r\n  return d.y + d.vy;\r\n}\r\n\r\nexport default function(radius) {\r\n  var nodes,\r\n      radii,\r\n      random,\r\n      strength = 1,\r\n      iterations = 1;\r\n\r\n  if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\r\n\r\n  function force() {\r\n    var i, n = nodes.length,\r\n        tree,\r\n        node,\r\n        xi,\r\n        yi,\r\n        ri,\r\n        ri2;\r\n\r\n    for (var k = 0; k < iterations; ++k) {\r\n      tree = quadtree(nodes, x, y).visitAfter(prepare);\r\n      for (i = 0; i < n; ++i) {\r\n        node = nodes[i];\r\n        ri = radii[node.index], ri2 = ri * ri;\r\n        xi = node.x + node.vx;\r\n        yi = node.y + node.vy;\r\n        tree.visit(apply);\r\n      }\r\n    }\r\n\r\n    function apply(quad, x0, y0, x1, y1) {\r\n      var data = quad.data, rj = quad.r, r = ri + rj;\r\n      if (data) {\r\n        if (data.index > node.index) {\r\n          var x = xi - data.x - data.vx,\r\n              y = yi - data.y - data.vy,\r\n              l = x * x + y * y;\r\n          if (l < r * r) {\r\n            if (x === 0) x = jiggle(random), l += x * x;\r\n            if (y === 0) y = jiggle(random), l += y * y;\r\n            l = (r - (l = Math.sqrt(l))) / l * strength;\r\n            node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\r\n            node.vy += (y *= l) * r;\r\n            data.vx -= x * (r = 1 - r);\r\n            data.vy -= y * r;\r\n          }\r\n        }\r\n        return;\r\n      }\r\n      return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\r\n    }\r\n  }\r\n\r\n  function prepare(quad) {\r\n    if (quad.data) return quad.r = radii[quad.data.index];\r\n    for (var i = quad.r = 0; i < 4; ++i) {\r\n      if (quad[i] && quad[i].r > quad.r) {\r\n        quad.r = quad[i].r;\r\n      }\r\n    }\r\n  }\r\n\r\n  function initialize() {\r\n    if (!nodes) return;\r\n    var i, n = nodes.length, node;\r\n    radii = new Array(n);\r\n    for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\r\n  }\r\n\r\n  force.initialize = function(_nodes, _random) {\r\n    nodes = _nodes;\r\n    random = _random;\r\n    initialize();\r\n  };\r\n\r\n  force.iterations = function(_) {\r\n    return arguments.length ? (iterations = +_, force) : iterations;\r\n  };\r\n\r\n  force.strength = function(_) {\r\n    return arguments.length ? (strength = +_, force) : strength;\r\n  };\r\n\r\n  force.radius = function(_) {\r\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\r\n  };\r\n\r\n  return force;\r\n}\r\n","import constant from \"./constant.js\";\r\nimport jiggle from \"./jiggle.js\";\r\n\r\nfunction index(d) {\r\n  return d.index;\r\n}\r\n\r\nfunction find(nodeById, nodeId) {\r\n  var node = nodeById.get(nodeId);\r\n  if (!node) throw new Error(\"node not found: \" + nodeId);\r\n  return node;\r\n}\r\n\r\nexport default function(links) {\r\n  var id = index,\r\n      strength = defaultStrength,\r\n      strengths,\r\n      distance = constant(30),\r\n      distances,\r\n      nodes,\r\n      count,\r\n      bias,\r\n      random,\r\n      iterations = 1;\r\n\r\n  if (links == null) links = [];\r\n\r\n  function defaultStrength(link) {\r\n    return 1 / Math.min(count[link.source.index], count[link.target.index]);\r\n  }\r\n\r\n  function force(alpha) {\r\n    for (var k = 0, n = links.length; k < iterations; ++k) {\r\n      for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\r\n        link = links[i], source = link.source, target = link.target;\r\n        x = target.x + target.vx - source.x - source.vx || jiggle(random);\r\n        y = target.y + target.vy - source.y - source.vy || jiggle(random);\r\n        l = Math.sqrt(x * x + y * y);\r\n        l = (l - distances[i]) / l * alpha * strengths[i];\r\n        x *= l, y *= l;\r\n        target.vx -= x * (b = bias[i]);\r\n        target.vy -= y * b;\r\n        source.vx += x * (b = 1 - b);\r\n        source.vy += y * b;\r\n      }\r\n    }\r\n  }\r\n\r\n  function initialize() {\r\n    if (!nodes) return;\r\n\r\n    var i,\r\n        n = nodes.length,\r\n        m = links.length,\r\n        nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\r\n        link;\r\n\r\n    for (i = 0, count = new Array(n); i < m; ++i) {\r\n      link = links[i], link.index = i;\r\n      if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\r\n      if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\r\n      count[link.source.index] = (count[link.source.index] || 0) + 1;\r\n      count[link.target.index] = (count[link.target.index] || 0) + 1;\r\n    }\r\n\r\n    for (i = 0, bias = new Array(m); i < m; ++i) {\r\n      link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\r\n    }\r\n\r\n    strengths = new Array(m), initializeStrength();\r\n    distances = new Array(m), initializeDistance();\r\n  }\r\n\r\n  function initializeStrength() {\r\n    if (!nodes) return;\r\n\r\n    for (var i = 0, n = links.length; i < n; ++i) {\r\n      strengths[i] = +strength(links[i], i, links);\r\n    }\r\n  }\r\n\r\n  function initializeDistance() {\r\n    if (!nodes) return;\r\n\r\n    for (var i = 0, n = links.length; i < n; ++i) {\r\n      distances[i] = +distance(links[i], i, links);\r\n    }\r\n  }\r\n\r\n  force.initialize = function(_nodes, _random) {\r\n    nodes = _nodes;\r\n    random = _random;\r\n    initialize();\r\n  };\r\n\r\n  force.links = function(_) {\r\n    return arguments.length ? (links = _, initialize(), force) : links;\r\n  };\r\n\r\n  force.id = function(_) {\r\n    return arguments.length ? (id = _, force) : id;\r\n  };\r\n\r\n  force.iterations = function(_) {\r\n    return arguments.length ? (iterations = +_, force) : iterations;\r\n  };\r\n\r\n  force.strength = function(_) {\r\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\r\n  };\r\n\r\n  force.distance = function(_) {\r\n    return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\r\n  };\r\n\r\n  return force;\r\n}\r\n","export default function(x, y) {\r\n  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\r\n\r\n  var x0 = this._x0,\r\n      y0 = this._y0,\r\n      x1 = this._x1,\r\n      y1 = this._y1;\r\n\r\n  // If the quadtree has no extent, initialize them.\r\n  // Integer extent are necessary so that if we later double the extent,\r\n  // the existing quadrant boundaries don’t change due to floating point error!\r\n  if (isNaN(x0)) {\r\n    x1 = (x0 = Math.floor(x)) + 1;\r\n    y1 = (y0 = Math.floor(y)) + 1;\r\n  }\r\n\r\n  // Otherwise, double repeatedly to cover.\r\n  else {\r\n    var z = x1 - x0 || 1,\r\n        node = this._root,\r\n        parent,\r\n        i;\r\n\r\n    while (x0 > x || x >= x1 || y0 > y || y >= y1) {\r\n      i = (y < y0) << 1 | (x < x0);\r\n      parent = new Array(4), parent[i] = node, node = parent, z *= 2;\r\n      switch (i) {\r\n        case 0: x1 = x0 + z, y1 = y0 + z; break;\r\n        case 1: x0 = x1 - z, y1 = y0 + z; break;\r\n        case 2: x1 = x0 + z, y0 = y1 - z; break;\r\n        case 3: x0 = x1 - z, y0 = y1 - z; break;\r\n      }\r\n    }\r\n\r\n    if (this._root && this._root.length) this._root = node;\r\n  }\r\n\r\n  this._x0 = x0;\r\n  this._y0 = y0;\r\n  this._x1 = x1;\r\n  this._y1 = y1;\r\n  return this;\r\n}\r\n","export default function() {\r\n  var data = [];\r\n  this.visit(function(node) {\r\n    if (!node.length) do data.push(node.data); while (node = node.next)\r\n  });\r\n  return data;\r\n}\r\n","export default function(_) {\r\n  return arguments.length\r\n      ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\r\n      : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\r\n}\r\n","import Quad from \"./quad.js\";\r\n\r\nexport default function(x, y, radius) {\r\n  var data,\r\n      x0 = this._x0,\r\n      y0 = this._y0,\r\n      x1,\r\n      y1,\r\n      x2,\r\n      y2,\r\n      x3 = this._x1,\r\n      y3 = this._y1,\r\n      quads = [],\r\n      node = this._root,\r\n      q,\r\n      i;\r\n\r\n  if (node) quads.push(new Quad(node, x0, y0, x3, y3));\r\n  if (radius == null) radius = Infinity;\r\n  else {\r\n    x0 = x - radius, y0 = y - radius;\r\n    x3 = x + radius, y3 = y + radius;\r\n    radius *= radius;\r\n  }\r\n\r\n  while (q = quads.pop()) {\r\n\r\n    // Stop searching if this quadrant can’t contain a closer node.\r\n    if (!(node = q.node)\r\n        || (x1 = q.x0) > x3\r\n        || (y1 = q.y0) > y3\r\n        || (x2 = q.x1) < x0\r\n        || (y2 = q.y1) < y0) continue;\r\n\r\n    // Bisect the current quadrant.\r\n    if (node.length) {\r\n      var xm = (x1 + x2) / 2,\r\n          ym = (y1 + y2) / 2;\r\n\r\n      quads.push(\r\n        new Quad(node[3], xm, ym, x2, y2),\r\n        new Quad(node[2], x1, ym, xm, y2),\r\n        new Quad(node[1], xm, y1, x2, ym),\r\n        new Quad(node[0], x1, y1, xm, ym)\r\n      );\r\n\r\n      // Visit the closest quadrant first.\r\n      if (i = (y >= ym) << 1 | (x >= xm)) {\r\n        q = quads[quads.length - 1];\r\n        quads[quads.length - 1] = quads[quads.length - 1 - i];\r\n        quads[quads.length - 1 - i] = q;\r\n      }\r\n    }\r\n\r\n    // Visit this point. (Visiting coincident points isn’t necessary!)\r\n    else {\r\n      var dx = x - +this._x.call(null, node.data),\r\n          dy = y - +this._y.call(null, node.data),\r\n          d2 = dx * dx + dy * dy;\r\n      if (d2 < radius) {\r\n        var d = Math.sqrt(radius = d2);\r\n        x0 = x - d, y0 = y - d;\r\n        x3 = x + d, y3 = y + d;\r\n        data = node.data;\r\n      }\r\n    }\r\n  }\r\n\r\n  return data;\r\n}\r\n","export default function(d) {\r\n  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\r\n\r\n  var parent,\r\n      node = this._root,\r\n      retainer,\r\n      previous,\r\n      next,\r\n      x0 = this._x0,\r\n      y0 = this._y0,\r\n      x1 = this._x1,\r\n      y1 = this._y1,\r\n      x,\r\n      y,\r\n      xm,\r\n      ym,\r\n      right,\r\n      bottom,\r\n      i,\r\n      j;\r\n\r\n  // If the tree is empty, initialize the root as a leaf.\r\n  if (!node) return this;\r\n\r\n  // Find the leaf node for the point.\r\n  // While descending, also retain the deepest parent with a non-removed sibling.\r\n  if (node.length) while (true) {\r\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\r\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\r\n    if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\r\n    if (!node.length) break;\r\n    if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\r\n  }\r\n\r\n  // Find the point to remove.\r\n  while (node.data !== d) if (!(previous = node, node = node.next)) return this;\r\n  if (next = node.next) delete node.next;\r\n\r\n  // If there are multiple coincident points, remove just the point.\r\n  if (previous) return (next ? previous.next = next : delete previous.next), this;\r\n\r\n  // If this is the root point, remove it.\r\n  if (!parent) return this._root = next, this;\r\n\r\n  // Remove this leaf.\r\n  next ? parent[i] = next : delete parent[i];\r\n\r\n  // If the parent now contains exactly one leaf, collapse superfluous parents.\r\n  if ((node = parent[0] || parent[1] || parent[2] || parent[3])\r\n      && node === (parent[3] || parent[2] || parent[1] || parent[0])\r\n      && !node.length) {\r\n    if (retainer) retainer[j] = node;\r\n    else this._root = node;\r\n  }\r\n\r\n  return this;\r\n}\r\n\r\nexport function removeAll(data) {\r\n  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\r\n  return this;\r\n}\r\n","export default function() {\r\n  return this._root;\r\n}\r\n","export default function() {\r\n  var size = 0;\r\n  this.visit(function(node) {\r\n    if (!node.length) do ++size; while (node = node.next)\r\n  });\r\n  return size;\r\n}\r\n","import Quad from \"./quad.js\";\r\n\r\nexport default function(callback) {\r\n  var quads = [], q, node = this._root, child, x0, y0, x1, y1;\r\n  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\r\n  while (q = quads.pop()) {\r\n    if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\r\n      var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\r\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\r\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\r\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\r\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\r\n    }\r\n  }\r\n  return this;\r\n}\r\n","import Quad from \"./quad.js\";\r\n\r\nexport default function(callback) {\r\n  var quads = [], next = [], q;\r\n  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\r\n  while (q = quads.pop()) {\r\n    var node = q.node;\r\n    if (node.length) {\r\n      var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\r\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\r\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\r\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\r\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\r\n    }\r\n    next.push(q);\r\n  }\r\n  while (q = next.pop()) {\r\n    callback(q.node, q.x0, q.y0, q.x1, q.y1);\r\n  }\r\n  return this;\r\n}\r\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\r\nconst a = 1664525;\r\nconst c = 1013904223;\r\nconst m = 4294967296; // 2^32\r\n\r\nexport default function() {\r\n  let s = 1;\r\n  return () => (s = (a * s + c) % m) / m;\r\n}\r\n","import {dispatch} from \"d3-dispatch\";\r\nimport {timer} from \"d3-timer\";\r\nimport lcg from \"./lcg.js\";\r\n\r\nexport function x(d) {\r\n  return d.x;\r\n}\r\n\r\nexport function y(d) {\r\n  return d.y;\r\n}\r\n\r\nvar initialRadius = 10,\r\n    initialAngle = Math.PI * (3 - Math.sqrt(5));\r\n\r\nexport default function(nodes) {\r\n  var simulation,\r\n      alpha = 1,\r\n      alphaMin = 0.001,\r\n      alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\r\n      alphaTarget = 0,\r\n      velocityDecay = 0.6,\r\n      forces = new Map(),\r\n      stepper = timer(step),\r\n      event = dispatch(\"tick\", \"end\"),\r\n      random = lcg();\r\n\r\n  if (nodes == null) nodes = [];\r\n\r\n  function step() {\r\n    tick();\r\n    event.call(\"tick\", simulation);\r\n    if (alpha < alphaMin) {\r\n      stepper.stop();\r\n      event.call(\"end\", simulation);\r\n    }\r\n  }\r\n\r\n  function tick(iterations) {\r\n    var i, n = nodes.length, node;\r\n\r\n    if (iterations === undefined) iterations = 1;\r\n\r\n    for (var k = 0; k < iterations; ++k) {\r\n      alpha += (alphaTarget - alpha) * alphaDecay;\r\n\r\n      forces.forEach(function(force) {\r\n        force(alpha);\r\n      });\r\n\r\n      for (i = 0; i < n; ++i) {\r\n        node = nodes[i];\r\n        if (node.fx == null) node.x += node.vx *= velocityDecay;\r\n        else node.x = node.fx, node.vx = 0;\r\n        if (node.fy == null) node.y += node.vy *= velocityDecay;\r\n        else node.y = node.fy, node.vy = 0;\r\n      }\r\n    }\r\n\r\n    return simulation;\r\n  }\r\n\r\n  function initializeNodes() {\r\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\r\n      node = nodes[i], node.index = i;\r\n      if (node.fx != null) node.x = node.fx;\r\n      if (node.fy != null) node.y = node.fy;\r\n      if (isNaN(node.x) || isNaN(node.y)) {\r\n        var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\r\n        node.x = radius * Math.cos(angle);\r\n        node.y = radius * Math.sin(angle);\r\n      }\r\n      if (isNaN(node.vx) || isNaN(node.vy)) {\r\n        node.vx = node.vy = 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  function initializeForce(force) {\r\n    if (force.initialize) force.initialize(nodes, random);\r\n    return force;\r\n  }\r\n\r\n  initializeNodes();\r\n\r\n  return simulation = {\r\n    tick: tick,\r\n\r\n    restart: function() {\r\n      return stepper.restart(step), simulation;\r\n    },\r\n\r\n    stop: function() {\r\n      return stepper.stop(), simulation;\r\n    },\r\n\r\n    nodes: function(_) {\r\n      return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\r\n    },\r\n\r\n    alpha: function(_) {\r\n      return arguments.length ? (alpha = +_, simulation) : alpha;\r\n    },\r\n\r\n    alphaMin: function(_) {\r\n      return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\r\n    },\r\n\r\n    alphaDecay: function(_) {\r\n      return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\r\n    },\r\n\r\n    alphaTarget: function(_) {\r\n      return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\r\n    },\r\n\r\n    velocityDecay: function(_) {\r\n      return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\r\n    },\r\n\r\n    randomSource: function(_) {\r\n      return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\r\n    },\r\n\r\n    force: function(name, _) {\r\n      return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\r\n    },\r\n\r\n    find: function(x, y, radius) {\r\n      var i = 0,\r\n          n = nodes.length,\r\n          dx,\r\n          dy,\r\n          d2,\r\n          node,\r\n          closest;\r\n\r\n      if (radius == null) radius = Infinity;\r\n      else radius *= radius;\r\n\r\n      for (i = 0; i < n; ++i) {\r\n        node = nodes[i];\r\n        dx = x - node.x;\r\n        dy = y - node.y;\r\n        d2 = dx * dx + dy * dy;\r\n        if (d2 < radius) closest = node, radius = d2;\r\n      }\r\n\r\n      return closest;\r\n    },\r\n\r\n    on: function(name, _) {\r\n      return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\r\n    }\r\n  };\r\n}\r\n","export default function(x) {\r\n  return Math.abs(x = Math.round(x)) >= 1e21\r\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\r\n      : x.toString(10);\r\n}\r\n\r\n// Computes the decimal coefficient and exponent of the specified number x with\r\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\r\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\r\nexport function formatDecimalParts(x, p) {\r\n  if (!isFinite(x) || x === 0) return null; // NaN, ±Infinity, ±0\r\n  var i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\"), coefficient = x.slice(0, i);\r\n\r\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\r\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\r\n  return [\r\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\r\n    +x.slice(i + 1)\r\n  ];\r\n}\r\n","import {formatDecimalParts} from \"./formatDecimal.js\";\r\n\r\nexport default function(x) {\r\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\r\n}\r\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\r\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\r\n\r\nexport default function formatSpecifier(specifier) {\r\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\r\n  var match;\r\n  return new FormatSpecifier({\r\n    fill: match[1],\r\n    align: match[2],\r\n    sign: match[3],\r\n    symbol: match[4],\r\n    zero: match[5],\r\n    width: match[6],\r\n    comma: match[7],\r\n    precision: match[8] && match[8].slice(1),\r\n    trim: match[9],\r\n    type: match[10]\r\n  });\r\n}\r\n\r\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\r\n\r\nexport function FormatSpecifier(specifier) {\r\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\r\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\r\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\r\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\r\n  this.zero = !!specifier.zero;\r\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\r\n  this.comma = !!specifier.comma;\r\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\r\n  this.trim = !!specifier.trim;\r\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\r\n}\r\n\r\nFormatSpecifier.prototype.toString = function() {\r\n  return this.fill\r\n      + this.align\r\n      + this.sign\r\n      + this.symbol\r\n      + (this.zero ? \"0\" : \"\")\r\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\r\n      + (this.comma ? \",\" : \"\")\r\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\r\n      + (this.trim ? \"~\" : \"\")\r\n      + this.type;\r\n};\r\n","import {formatDecimalParts} from \"./formatDecimal.js\";\r\n\r\nexport var prefixExponent;\r\n\r\nexport default function(x, p) {\r\n  var d = formatDecimalParts(x, p);\r\n  if (!d) return prefixExponent = undefined, x.toPrecision(p);\r\n  var coefficient = d[0],\r\n      exponent = d[1],\r\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\r\n      n = coefficient.length;\r\n  return i === n ? coefficient\r\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\r\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\r\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\r\n}\r\n","import {formatDecimalParts} from \"./formatDecimal.js\";\r\n\r\nexport default function(x, p) {\r\n  var d = formatDecimalParts(x, p);\r\n  if (!d) return x + \"\";\r\n  var coefficient = d[0],\r\n      exponent = d[1];\r\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\r\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\r\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\r\n}\r\n","import formatDecimal from \"./formatDecimal.js\";\r\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\r\nimport formatRounded from \"./formatRounded.js\";\r\n\r\nexport default {\r\n  \"%\": (x, p) => (x * 100).toFixed(p),\r\n  \"b\": (x) => Math.round(x).toString(2),\r\n  \"c\": (x) => x + \"\",\r\n  \"d\": formatDecimal,\r\n  \"e\": (x, p) => x.toExponential(p),\r\n  \"f\": (x, p) => x.toFixed(p),\r\n  \"g\": (x, p) => x.toPrecision(p),\r\n  \"o\": (x) => Math.round(x).toString(8),\r\n  \"p\": (x, p) => formatRounded(x * 100, p),\r\n  \"r\": formatRounded,\r\n  \"s\": formatPrefixAuto,\r\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\r\n  \"x\": (x) => Math.round(x).toString(16)\r\n};\r\n","export default function(x) {\r\n  return x;\r\n}\r\n","import exponent from \"./exponent.js\";\r\nimport formatGroup from \"./formatGroup.js\";\r\nimport formatNumerals from \"./formatNumerals.js\";\r\nimport formatSpecifier from \"./formatSpecifier.js\";\r\nimport formatTrim from \"./formatTrim.js\";\r\nimport formatTypes from \"./formatTypes.js\";\r\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\r\nimport identity from \"./identity.js\";\r\n\r\nvar map = Array.prototype.map,\r\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\r\n\r\nexport default function(locale) {\r\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\r\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\r\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\r\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\r\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\r\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\r\n      minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\r\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\r\n\r\n  function newFormat(specifier, options) {\r\n    specifier = formatSpecifier(specifier);\r\n\r\n    var fill = specifier.fill,\r\n        align = specifier.align,\r\n        sign = specifier.sign,\r\n        symbol = specifier.symbol,\r\n        zero = specifier.zero,\r\n        width = specifier.width,\r\n        comma = specifier.comma,\r\n        precision = specifier.precision,\r\n        trim = specifier.trim,\r\n        type = specifier.type;\r\n\r\n    // The \"n\" type is an alias for \",g\".\r\n    if (type === \"n\") comma = true, type = \"g\";\r\n\r\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\r\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\r\n\r\n    // If zero fill is specified, padding goes after sign and before digits.\r\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\r\n\r\n    // Compute the prefix and suffix.\r\n    // For SI-prefix, the suffix is lazily computed.\r\n    var prefix = (options && options.prefix !== undefined ? options.prefix : \"\") + (symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\"),\r\n        suffix = (symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\") + (options && options.suffix !== undefined ? options.suffix : \"\");\r\n\r\n    // What format function should we use?\r\n    // Is this an integer type?\r\n    // Can this type generate exponential notation?\r\n    var formatType = formatTypes[type],\r\n        maybeSuffix = /[defgprs%]/.test(type);\r\n\r\n    // Set the default precision if not specified,\r\n    // or clamp the specified precision to the supported range.\r\n    // For significant precision, it must be in [1, 21].\r\n    // For fixed precision, it must be in [0, 20].\r\n    precision = precision === undefined ? 6\r\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\r\n        : Math.max(0, Math.min(20, precision));\r\n\r\n    function format(value) {\r\n      var valuePrefix = prefix,\r\n          valueSuffix = suffix,\r\n          i, n, c;\r\n\r\n      if (type === \"c\") {\r\n        valueSuffix = formatType(value) + valueSuffix;\r\n        value = \"\";\r\n      } else {\r\n        value = +value;\r\n\r\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\r\n        var valueNegative = value < 0 || 1 / value < 0;\r\n\r\n        // Perform the initial formatting.\r\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\r\n\r\n        // Trim insignificant zeros.\r\n        if (trim) value = formatTrim(value);\r\n\r\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\r\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\r\n\r\n        // Compute the prefix and suffix.\r\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\r\n        valueSuffix = (type === \"s\" && !isNaN(value) && prefixExponent !== undefined ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\r\n\r\n        // Break the formatted value into the integer “value” part that can be\r\n        // grouped, and fractional or exponential “suffix” part that is not.\r\n        if (maybeSuffix) {\r\n          i = -1, n = value.length;\r\n          while (++i < n) {\r\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\r\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\r\n              value = value.slice(0, i);\r\n              break;\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // If the fill character is not \"0\", grouping is applied before padding.\r\n      if (comma && !zero) value = group(value, Infinity);\r\n\r\n      // Compute the padding.\r\n      var length = valuePrefix.length + value.length + valueSuffix.length,\r\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\r\n\r\n      // If the fill character is \"0\", grouping is applied after padding.\r\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\r\n\r\n      // Reconstruct the final output based on the desired alignment.\r\n      switch (align) {\r\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\r\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\r\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\r\n        default: value = padding + valuePrefix + value + valueSuffix; break;\r\n      }\r\n\r\n      return numerals(value);\r\n    }\r\n\r\n    format.toString = function() {\r\n      return specifier + \"\";\r\n    };\r\n\r\n    return format;\r\n  }\r\n\r\n  function formatPrefix(specifier, value) {\r\n    var e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\r\n        k = Math.pow(10, -e),\r\n        f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier), {suffix: prefixes[8 + e / 3]});\r\n    return function(value) {\r\n      return f(k * value);\r\n    };\r\n  }\r\n\r\n  return {\r\n    format: newFormat,\r\n    formatPrefix: formatPrefix\r\n  };\r\n}\r\n","import formatLocale from \"./locale.js\";\r\n\r\nvar locale;\r\nexport var format;\r\nexport var formatPrefix;\r\n\r\ndefaultLocale({\r\n  thousands: \",\",\r\n  grouping: [3],\r\n  currency: [\"$\", \"\"]\r\n});\r\n\r\nexport default function defaultLocale(definition) {\r\n  locale = formatLocale(definition);\r\n  format = locale.format;\r\n  formatPrefix = locale.formatPrefix;\r\n  return locale;\r\n}\r\n","export default function(grouping, thousands) {\r\n  return function(value, width) {\r\n    var i = value.length,\r\n        t = [],\r\n        j = 0,\r\n        g = grouping[0],\r\n        length = 0;\r\n\r\n    while (i > 0 && g > 0) {\r\n      if (length + g + 1 > width) g = Math.max(1, width - length);\r\n      t.push(value.substring(i -= g, i + g));\r\n      if ((length += g + 1) > width) break;\r\n      g = grouping[j = (j + 1) % grouping.length];\r\n    }\r\n\r\n    return t.reverse().join(thousands);\r\n  };\r\n}\r\n","export default function(numerals) {\r\n  return function(value) {\r\n    return value.replace(/[0-9]/g, function(i) {\r\n      return numerals[+i];\r\n    });\r\n  };\r\n}\r\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\r\nexport default function(s) {\r\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\r\n    switch (s[i]) {\r\n      case \".\": i0 = i1 = i; break;\r\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\r\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\r\n    }\r\n  }\r\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\r\n}\r\n","import exponent from \"./exponent.js\";\r\n\r\nexport default function(step) {\r\n  return Math.max(0, -exponent(Math.abs(step)));\r\n}\r\n","import exponent from \"./exponent.js\";\r\n\r\nexport default function(step, value) {\r\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\r\n}\r\n","import exponent from \"./exponent.js\";\r\n\r\nexport default function(step, max) {\r\n  step = Math.abs(step), max = Math.abs(max) - step;\r\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\r\n}\r\n","export var epsilon = 1e-6;\r\nexport var epsilon2 = 1e-12;\r\nexport var pi = Math.PI;\r\nexport var halfPi = pi / 2;\r\nexport var quarterPi = pi / 4;\r\nexport var tau = pi * 2;\r\n\r\nexport var degrees = 180 / pi;\r\nexport var radians = pi / 180;\r\n\r\nexport var abs = Math.abs;\r\nexport var atan = Math.atan;\r\nexport var atan2 = Math.atan2;\r\nexport var cos = Math.cos;\r\nexport var ceil = Math.ceil;\r\nexport var exp = Math.exp;\r\nexport var floor = Math.floor;\r\nexport var hypot = Math.hypot;\r\nexport var log = Math.log;\r\nexport var pow = Math.pow;\r\nexport var sin = Math.sin;\r\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\r\nexport var sqrt = Math.sqrt;\r\nexport var tan = Math.tan;\r\n\r\nexport function acos(x) {\r\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\r\n}\r\n\r\nexport function asin(x) {\r\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\r\n}\r\n\r\nexport function haversin(x) {\r\n  return (x = sin(x / 2)) * x;\r\n}\r\n","export default function noop() {}\r\n","function streamGeometry(geometry, stream) {\r\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\r\n    streamGeometryType[geometry.type](geometry, stream);\r\n  }\r\n}\r\n\r\nvar streamObjectType = {\r\n  Feature: function(object, stream) {\r\n    streamGeometry(object.geometry, stream);\r\n  },\r\n  FeatureCollection: function(object, stream) {\r\n    var features = object.features, i = -1, n = features.length;\r\n    while (++i < n) streamGeometry(features[i].geometry, stream);\r\n  }\r\n};\r\n\r\nvar streamGeometryType = {\r\n  Sphere: function(object, stream) {\r\n    stream.sphere();\r\n  },\r\n  Point: function(object, stream) {\r\n    object = object.coordinates;\r\n    stream.point(object[0], object[1], object[2]);\r\n  },\r\n  MultiPoint: function(object, stream) {\r\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\r\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\r\n  },\r\n  LineString: function(object, stream) {\r\n    streamLine(object.coordinates, stream, 0);\r\n  },\r\n  MultiLineString: function(object, stream) {\r\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\r\n    while (++i < n) streamLine(coordinates[i], stream, 0);\r\n  },\r\n  Polygon: function(object, stream) {\r\n    streamPolygon(object.coordinates, stream);\r\n  },\r\n  MultiPolygon: function(object, stream) {\r\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\r\n    while (++i < n) streamPolygon(coordinates[i], stream);\r\n  },\r\n  GeometryCollection: function(object, stream) {\r\n    var geometries = object.geometries, i = -1, n = geometries.length;\r\n    while (++i < n) streamGeometry(geometries[i], stream);\r\n  }\r\n};\r\n\r\nfunction streamLine(coordinates, stream, closed) {\r\n  var i = -1, n = coordinates.length - closed, coordinate;\r\n  stream.lineStart();\r\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\r\n  stream.lineEnd();\r\n}\r\n\r\nfunction streamPolygon(coordinates, stream) {\r\n  var i = -1, n = coordinates.length;\r\n  stream.polygonStart();\r\n  while (++i < n) streamLine(coordinates[i], stream, 1);\r\n  stream.polygonEnd();\r\n}\r\n\r\nexport default function(object, stream) {\r\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\r\n    streamObjectType[object.type](object, stream);\r\n  } else {\r\n    streamGeometry(object, stream);\r\n  }\r\n}\r\n","import {Adder} from \"d3-array\";\r\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\r\nimport noop from \"./noop.js\";\r\nimport stream from \"./stream.js\";\r\n\r\nexport var areaRingSum = new Adder();\r\n\r\n// hello?\r\n\r\nvar areaSum = new Adder(),\r\n    lambda00,\r\n    phi00,\r\n    lambda0,\r\n    cosPhi0,\r\n    sinPhi0;\r\n\r\nexport var areaStream = {\r\n  point: noop,\r\n  lineStart: noop,\r\n  lineEnd: noop,\r\n  polygonStart: function() {\r\n    areaRingSum = new Adder();\r\n    areaStream.lineStart = areaRingStart;\r\n    areaStream.lineEnd = areaRingEnd;\r\n  },\r\n  polygonEnd: function() {\r\n    var areaRing = +areaRingSum;\r\n    areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\r\n    this.lineStart = this.lineEnd = this.point = noop;\r\n  },\r\n  sphere: function() {\r\n    areaSum.add(tau);\r\n  }\r\n};\r\n\r\nfunction areaRingStart() {\r\n  areaStream.point = areaPointFirst;\r\n}\r\n\r\nfunction areaRingEnd() {\r\n  areaPoint(lambda00, phi00);\r\n}\r\n\r\nfunction areaPointFirst(lambda, phi) {\r\n  areaStream.point = areaPoint;\r\n  lambda00 = lambda, phi00 = phi;\r\n  lambda *= radians, phi *= radians;\r\n  lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\r\n}\r\n\r\nfunction areaPoint(lambda, phi) {\r\n  lambda *= radians, phi *= radians;\r\n  phi = phi / 2 + quarterPi; // half the angular distance from south pole\r\n\r\n  // Spherical excess E for a spherical triangle with vertices: south pole,\r\n  // previous point, current point.  Uses a formula derived from Cagnoli’s\r\n  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\r\n  var dLambda = lambda - lambda0,\r\n      sdLambda = dLambda >= 0 ? 1 : -1,\r\n      adLambda = sdLambda * dLambda,\r\n      cosPhi = cos(phi),\r\n      sinPhi = sin(phi),\r\n      k = sinPhi0 * sinPhi,\r\n      u = cosPhi0 * cosPhi + k * cos(adLambda),\r\n      v = k * sdLambda * sin(adLambda);\r\n  areaRingSum.add(atan2(v, u));\r\n\r\n  // Advance the previous points.\r\n  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\r\n}\r\n\r\nexport default function(object) {\r\n  areaSum = new Adder();\r\n  stream(object, areaStream);\r\n  return areaSum * 2;\r\n}\r\n","import {Adder} from \"d3-array\";\r\nimport {areaStream, areaRingSum} from \"./area.js\";\r\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\r\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\r\nimport stream from \"./stream.js\";\r\n\r\nvar lambda0, phi0, lambda1, phi1, // bounds\r\n    lambda2, // previous lambda-coordinate\r\n    lambda00, phi00, // first point\r\n    p0, // previous 3D point\r\n    deltaSum,\r\n    ranges,\r\n    range;\r\n\r\nvar boundsStream = {\r\n  point: boundsPoint,\r\n  lineStart: boundsLineStart,\r\n  lineEnd: boundsLineEnd,\r\n  polygonStart: function() {\r\n    boundsStream.point = boundsRingPoint;\r\n    boundsStream.lineStart = boundsRingStart;\r\n    boundsStream.lineEnd = boundsRingEnd;\r\n    deltaSum = new Adder();\r\n    areaStream.polygonStart();\r\n  },\r\n  polygonEnd: function() {\r\n    areaStream.polygonEnd();\r\n    boundsStream.point = boundsPoint;\r\n    boundsStream.lineStart = boundsLineStart;\r\n    boundsStream.lineEnd = boundsLineEnd;\r\n    if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\r\n    else if (deltaSum > epsilon) phi1 = 90;\r\n    else if (deltaSum < -epsilon) phi0 = -90;\r\n    range[0] = lambda0, range[1] = lambda1;\r\n  },\r\n  sphere: function() {\r\n    lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\r\n  }\r\n};\r\n\r\nfunction boundsPoint(lambda, phi) {\r\n  ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\r\n  if (phi < phi0) phi0 = phi;\r\n  if (phi > phi1) phi1 = phi;\r\n}\r\n\r\nfunction linePoint(lambda, phi) {\r\n  var p = cartesian([lambda * radians, phi * radians]);\r\n  if (p0) {\r\n    var normal = cartesianCross(p0, p),\r\n        equatorial = [normal[1], -normal[0], 0],\r\n        inflection = cartesianCross(equatorial, normal);\r\n    cartesianNormalizeInPlace(inflection);\r\n    inflection = spherical(inflection);\r\n    var delta = lambda - lambda2,\r\n        sign = delta > 0 ? 1 : -1,\r\n        lambdai = inflection[0] * degrees * sign,\r\n        phii,\r\n        antimeridian = abs(delta) > 180;\r\n    if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\r\n      phii = inflection[1] * degrees;\r\n      if (phii > phi1) phi1 = phii;\r\n    } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\r\n      phii = -inflection[1] * degrees;\r\n      if (phii < phi0) phi0 = phii;\r\n    } else {\r\n      if (phi < phi0) phi0 = phi;\r\n      if (phi > phi1) phi1 = phi;\r\n    }\r\n    if (antimeridian) {\r\n      if (lambda < lambda2) {\r\n        if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\r\n      } else {\r\n        if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\r\n      }\r\n    } else {\r\n      if (lambda1 >= lambda0) {\r\n        if (lambda < lambda0) lambda0 = lambda;\r\n        if (lambda > lambda1) lambda1 = lambda;\r\n      } else {\r\n        if (lambda > lambda2) {\r\n          if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\r\n        } else {\r\n          if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\r\n        }\r\n      }\r\n    }\r\n  } else {\r\n    ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\r\n  }\r\n  if (phi < phi0) phi0 = phi;\r\n  if (phi > phi1) phi1 = phi;\r\n  p0 = p, lambda2 = lambda;\r\n}\r\n\r\nfunction boundsLineStart() {\r\n  boundsStream.point = linePoint;\r\n}\r\n\r\nfunction boundsLineEnd() {\r\n  range[0] = lambda0, range[1] = lambda1;\r\n  boundsStream.point = boundsPoint;\r\n  p0 = null;\r\n}\r\n\r\nfunction boundsRingPoint(lambda, phi) {\r\n  if (p0) {\r\n    var delta = lambda - lambda2;\r\n    deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\r\n  } else {\r\n    lambda00 = lambda, phi00 = phi;\r\n  }\r\n  areaStream.point(lambda, phi);\r\n  linePoint(lambda, phi);\r\n}\r\n\r\nfunction boundsRingStart() {\r\n  areaStream.lineStart();\r\n}\r\n\r\nfunction boundsRingEnd() {\r\n  boundsRingPoint(lambda00, phi00);\r\n  areaStream.lineEnd();\r\n  if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\r\n  range[0] = lambda0, range[1] = lambda1;\r\n  p0 = null;\r\n}\r\n\r\n// Finds the left-right distance between two longitudes.\r\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\r\n// the distance between ±180° to be 360°.\r\nfunction angle(lambda0, lambda1) {\r\n  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\r\n}\r\n\r\nfunction rangeCompare(a, b) {\r\n  return a[0] - b[0];\r\n}\r\n\r\nfunction rangeContains(range, x) {\r\n  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\r\n}\r\n\r\nexport default function(feature) {\r\n  var i, n, a, b, merged, deltaMax, delta;\r\n\r\n  phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\r\n  ranges = [];\r\n  stream(feature, boundsStream);\r\n\r\n  // First, sort ranges by their minimum longitudes.\r\n  if (n = ranges.length) {\r\n    ranges.sort(rangeCompare);\r\n\r\n    // Then, merge any ranges that overlap.\r\n    for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\r\n      b = ranges[i];\r\n      if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\r\n        if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\r\n        if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\r\n      } else {\r\n        merged.push(a = b);\r\n      }\r\n    }\r\n\r\n    // Finally, find the largest gap between the merged ranges.\r\n    // The final bounding box will be the inverse of this gap.\r\n    for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\r\n      b = merged[i];\r\n      if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\r\n    }\r\n  }\r\n\r\n  ranges = range = null;\r\n\r\n  return lambda0 === Infinity || phi0 === Infinity\r\n      ? [[NaN, NaN], [NaN, NaN]]\r\n      : [[lambda0, phi0], [lambda1, phi1]];\r\n}\r\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\r\n\r\nexport function spherical(cartesian) {\r\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\r\n}\r\n\r\nexport function cartesian(spherical) {\r\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\r\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\r\n}\r\n\r\nexport function cartesianDot(a, b) {\r\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\r\n}\r\n\r\nexport function cartesianCross(a, b) {\r\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\r\n}\r\n\r\n// TODO return a\r\nexport function cartesianAddInPlace(a, b) {\r\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\r\n}\r\n\r\nexport function cartesianScale(vector, k) {\r\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\r\n}\r\n\r\n// TODO return d\r\nexport function cartesianNormalizeInPlace(d) {\r\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\r\n  d[0] /= l, d[1] /= l, d[2] /= l;\r\n}\r\n","import {Adder} from \"d3-array\";\r\nimport {asin, atan2, cos, degrees, epsilon, epsilon2, hypot, radians, sin, sqrt} from \"./math.js\";\r\nimport noop from \"./noop.js\";\r\nimport stream from \"./stream.js\";\r\n\r\nvar W0, W1,\r\n    X0, Y0, Z0,\r\n    X1, Y1, Z1,\r\n    X2, Y2, Z2,\r\n    lambda00, phi00, // first point\r\n    x0, y0, z0; // previous point\r\n\r\nvar centroidStream = {\r\n  sphere: noop,\r\n  point: centroidPoint,\r\n  lineStart: centroidLineStart,\r\n  lineEnd: centroidLineEnd,\r\n  polygonStart: function() {\r\n    centroidStream.lineStart = centroidRingStart;\r\n    centroidStream.lineEnd = centroidRingEnd;\r\n  },\r\n  polygonEnd: function() {\r\n    centroidStream.lineStart = centroidLineStart;\r\n    centroidStream.lineEnd = centroidLineEnd;\r\n  }\r\n};\r\n\r\n// Arithmetic mean of Cartesian vectors.\r\nfunction centroidPoint(lambda, phi) {\r\n  lambda *= radians, phi *= radians;\r\n  var cosPhi = cos(phi);\r\n  centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\r\n}\r\n\r\nfunction centroidPointCartesian(x, y, z) {\r\n  ++W0;\r\n  X0 += (x - X0) / W0;\r\n  Y0 += (y - Y0) / W0;\r\n  Z0 += (z - Z0) / W0;\r\n}\r\n\r\nfunction centroidLineStart() {\r\n  centroidStream.point = centroidLinePointFirst;\r\n}\r\n\r\nfunction centroidLinePointFirst(lambda, phi) {\r\n  lambda *= radians, phi *= radians;\r\n  var cosPhi = cos(phi);\r\n  x0 = cosPhi * cos(lambda);\r\n  y0 = cosPhi * sin(lambda);\r\n  z0 = sin(phi);\r\n  centroidStream.point = centroidLinePoint;\r\n  centroidPointCartesian(x0, y0, z0);\r\n}\r\n\r\nfunction centroidLinePoint(lambda, phi) {\r\n  lambda *= radians, phi *= radians;\r\n  var cosPhi = cos(phi),\r\n      x = cosPhi * cos(lambda),\r\n      y = cosPhi * sin(lambda),\r\n      z = sin(phi),\r\n      w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\r\n  W1 += w;\r\n  X1 += w * (x0 + (x0 = x));\r\n  Y1 += w * (y0 + (y0 = y));\r\n  Z1 += w * (z0 + (z0 = z));\r\n  centroidPointCartesian(x0, y0, z0);\r\n}\r\n\r\nfunction centroidLineEnd() {\r\n  centroidStream.point = centroidPoint;\r\n}\r\n\r\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\r\n// J. Applied Mechanics 42, 239 (1975).\r\nfunction centroidRingStart() {\r\n  centroidStream.point = centroidRingPointFirst;\r\n}\r\n\r\nfunction centroidRingEnd() {\r\n  centroidRingPoint(lambda00, phi00);\r\n  centroidStream.point = centroidPoint;\r\n}\r\n\r\nfunction centroidRingPointFirst(lambda, phi) {\r\n  lambda00 = lambda, phi00 = phi;\r\n  lambda *= radians, phi *= radians;\r\n  centroidStream.point = centroidRingPoint;\r\n  var cosPhi = cos(phi);\r\n  x0 = cosPhi * cos(lambda);\r\n  y0 = cosPhi * sin(lambda);\r\n  z0 = sin(phi);\r\n  centroidPointCartesian(x0, y0, z0);\r\n}\r\n\r\nfunction centroidRingPoint(lambda, phi) {\r\n  lambda *= radians, phi *= radians;\r\n  var cosPhi = cos(phi),\r\n      x = cosPhi * cos(lambda),\r\n      y = cosPhi * sin(lambda),\r\n      z = sin(phi),\r\n      cx = y0 * z - z0 * y,\r\n      cy = z0 * x - x0 * z,\r\n      cz = x0 * y - y0 * x,\r\n      m = hypot(cx, cy, cz),\r\n      w = asin(m), // line weight = angle\r\n      v = m && -w / m; // area weight multiplier\r\n  X2.add(v * cx);\r\n  Y2.add(v * cy);\r\n  Z2.add(v * cz);\r\n  W1 += w;\r\n  X1 += w * (x0 + (x0 = x));\r\n  Y1 += w * (y0 + (y0 = y));\r\n  Z1 += w * (z0 + (z0 = z));\r\n  centroidPointCartesian(x0, y0, z0);\r\n}\r\n\r\nexport default function(object) {\r\n  W0 = W1 =\r\n  X0 = Y0 = Z0 =\r\n  X1 = Y1 = Z1 = 0;\r\n  X2 = new Adder();\r\n  Y2 = new Adder();\r\n  Z2 = new Adder();\r\n  stream(object, centroidStream);\r\n\r\n  var x = +X2,\r\n      y = +Y2,\r\n      z = +Z2,\r\n      m = hypot(x, y, z);\r\n\r\n  // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\r\n  if (m < epsilon2) {\r\n    x = X1, y = Y1, z = Z1;\r\n    // If the feature has zero length, fall back to arithmetic mean of point vectors.\r\n    if (W1 < epsilon) x = X0, y = Y0, z = Z0;\r\n    m = hypot(x, y, z);\r\n    // If the feature still has an undefined ccentroid, then return.\r\n    if (m < epsilon2) return [NaN, NaN];\r\n  }\r\n\r\n  return [atan2(y, x) * degrees, asin(z / m) * degrees];\r\n}\r\n","export default function(x) {\r\n  return function() {\r\n    return x;\r\n  };\r\n}\r\n","export default function(a, b) {\r\n\r\n  function compose(x, y) {\r\n    return x = a(x, y), b(x[0], x[1]);\r\n  }\r\n\r\n  if (a.invert && b.invert) compose.invert = function(x, y) {\r\n    return x = b.invert(x, y), x && a.invert(x[0], x[1]);\r\n  };\r\n\r\n  return compose;\r\n}\r\n","import compose from \"./compose.js\";\r\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\r\n\r\nfunction rotationIdentity(lambda, phi) {\r\n  if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\r\n  return [lambda, phi];\r\n}\r\n\r\nrotationIdentity.invert = rotationIdentity;\r\n\r\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\r\n  return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\r\n    : rotationLambda(deltaLambda))\r\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\r\n    : rotationIdentity);\r\n}\r\n\r\nfunction forwardRotationLambda(deltaLambda) {\r\n  return function(lambda, phi) {\r\n    lambda += deltaLambda;\r\n    if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\r\n    return [lambda, phi];\r\n  };\r\n}\r\n\r\nfunction rotationLambda(deltaLambda) {\r\n  var rotation = forwardRotationLambda(deltaLambda);\r\n  rotation.invert = forwardRotationLambda(-deltaLambda);\r\n  return rotation;\r\n}\r\n\r\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\r\n  var cosDeltaPhi = cos(deltaPhi),\r\n      sinDeltaPhi = sin(deltaPhi),\r\n      cosDeltaGamma = cos(deltaGamma),\r\n      sinDeltaGamma = sin(deltaGamma);\r\n\r\n  function rotation(lambda, phi) {\r\n    var cosPhi = cos(phi),\r\n        x = cos(lambda) * cosPhi,\r\n        y = sin(lambda) * cosPhi,\r\n        z = sin(phi),\r\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\r\n    return [\r\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\r\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\r\n    ];\r\n  }\r\n\r\n  rotation.invert = function(lambda, phi) {\r\n    var cosPhi = cos(phi),\r\n        x = cos(lambda) * cosPhi,\r\n        y = sin(lambda) * cosPhi,\r\n        z = sin(phi),\r\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\r\n    return [\r\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\r\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\r\n    ];\r\n  };\r\n\r\n  return rotation;\r\n}\r\n\r\nexport default function(rotate) {\r\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\r\n\r\n  function forward(coordinates) {\r\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\r\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\r\n  }\r\n\r\n  forward.invert = function(coordinates) {\r\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\r\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\r\n  };\r\n\r\n  return forward;\r\n}\r\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\r\nimport constant from \"./constant.js\";\r\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\r\nimport {rotateRadians} from \"./rotation.js\";\r\n\r\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\r\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\r\n  if (!delta) return;\r\n  var cosRadius = cos(radius),\r\n      sinRadius = sin(radius),\r\n      step = direction * delta;\r\n  if (t0 == null) {\r\n    t0 = radius + direction * tau;\r\n    t1 = radius - step / 2;\r\n  } else {\r\n    t0 = circleRadius(cosRadius, t0);\r\n    t1 = circleRadius(cosRadius, t1);\r\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\r\n  }\r\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\r\n    point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\r\n    stream.point(point[0], point[1]);\r\n  }\r\n}\r\n\r\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\r\nfunction circleRadius(cosRadius, point) {\r\n  point = cartesian(point), point[0] -= cosRadius;\r\n  cartesianNormalizeInPlace(point);\r\n  var radius = acos(-point[1]);\r\n  return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\r\n}\r\n\r\nexport default function() {\r\n  var center = constant([0, 0]),\r\n      radius = constant(90),\r\n      precision = constant(2),\r\n      ring,\r\n      rotate,\r\n      stream = {point: point};\r\n\r\n  function point(x, y) {\r\n    ring.push(x = rotate(x, y));\r\n    x[0] *= degrees, x[1] *= degrees;\r\n  }\r\n\r\n  function circle() {\r\n    var c = center.apply(this, arguments),\r\n        r = radius.apply(this, arguments) * radians,\r\n        p = precision.apply(this, arguments) * radians;\r\n    ring = [];\r\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\r\n    circleStream(stream, r, p, 1);\r\n    c = {type: \"Polygon\", coordinates: [ring]};\r\n    ring = rotate = null;\r\n    return c;\r\n  }\r\n\r\n  circle.center = function(_) {\r\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\r\n  };\r\n\r\n  circle.radius = function(_) {\r\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\r\n  };\r\n\r\n  circle.precision = function(_) {\r\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\r\n  };\r\n\r\n  return circle;\r\n}\r\n","import noop from \"../noop.js\";\r\n\r\nexport default function() {\r\n  var lines = [],\r\n      line;\r\n  return {\r\n    point: function(x, y, m) {\r\n      line.push([x, y, m]);\r\n    },\r\n    lineStart: function() {\r\n      lines.push(line = []);\r\n    },\r\n    lineEnd: noop,\r\n    rejoin: function() {\r\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\r\n    },\r\n    result: function() {\r\n      var result = lines;\r\n      lines = [];\r\n      line = null;\r\n      return result;\r\n    }\r\n  };\r\n}\r\n","import {abs, epsilon} from \"./math.js\";\r\n\r\nexport default function(a, b) {\r\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\r\n}\r\n","import pointEqual from \"../pointEqual.js\";\r\nimport {epsilon} from \"../math.js\";\r\n\r\nfunction Intersection(point, points, other, entry) {\r\n  this.x = point;\r\n  this.z = points;\r\n  this.o = other; // another intersection\r\n  this.e = entry; // is an entry?\r\n  this.v = false; // visited\r\n  this.n = this.p = null; // next & previous\r\n}\r\n\r\n// A generalized polygon clipping algorithm: given a polygon that has been cut\r\n// into its visible line segments, and rejoins the segments by interpolating\r\n// along the clip edge.\r\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\r\n  var subject = [],\r\n      clip = [],\r\n      i,\r\n      n;\r\n\r\n  segments.forEach(function(segment) {\r\n    if ((n = segment.length - 1) <= 0) return;\r\n    var n, p0 = segment[0], p1 = segment[n], x;\r\n\r\n    if (pointEqual(p0, p1)) {\r\n      if (!p0[2] && !p1[2]) {\r\n        stream.lineStart();\r\n        for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\r\n        stream.lineEnd();\r\n        return;\r\n      }\r\n      // handle degenerate cases by moving the point\r\n      p1[0] += 2 * epsilon;\r\n    }\r\n\r\n    subject.push(x = new Intersection(p0, segment, null, true));\r\n    clip.push(x.o = new Intersection(p0, null, x, false));\r\n    subject.push(x = new Intersection(p1, segment, null, false));\r\n    clip.push(x.o = new Intersection(p1, null, x, true));\r\n  });\r\n\r\n  if (!subject.length) return;\r\n\r\n  clip.sort(compareIntersection);\r\n  link(subject);\r\n  link(clip);\r\n\r\n  for (i = 0, n = clip.length; i < n; ++i) {\r\n    clip[i].e = startInside = !startInside;\r\n  }\r\n\r\n  var start = subject[0],\r\n      points,\r\n      point;\r\n\r\n  while (1) {\r\n    // Find first unvisited intersection.\r\n    var current = start,\r\n        isSubject = true;\r\n    while (current.v) if ((current = current.n) === start) return;\r\n    points = current.z;\r\n    stream.lineStart();\r\n    do {\r\n      current.v = current.o.v = true;\r\n      if (current.e) {\r\n        if (isSubject) {\r\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\r\n        } else {\r\n          interpolate(current.x, current.n.x, 1, stream);\r\n        }\r\n        current = current.n;\r\n      } else {\r\n        if (isSubject) {\r\n          points = current.p.z;\r\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\r\n        } else {\r\n          interpolate(current.x, current.p.x, -1, stream);\r\n        }\r\n        current = current.p;\r\n      }\r\n      current = current.o;\r\n      points = current.z;\r\n      isSubject = !isSubject;\r\n    } while (!current.v);\r\n    stream.lineEnd();\r\n  }\r\n}\r\n\r\nfunction link(array) {\r\n  if (!(n = array.length)) return;\r\n  var n,\r\n      i = 0,\r\n      a = array[0],\r\n      b;\r\n  while (++i < n) {\r\n    a.n = b = array[i];\r\n    b.p = a;\r\n    a = b;\r\n  }\r\n  a.n = b = array[0];\r\n  b.p = a;\r\n}\r\n","import {Adder} from \"d3-array\";\r\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\r\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\r\n\r\nfunction longitude(point) {\r\n  return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\r\n}\r\n\r\nexport default function(polygon, point) {\r\n  var lambda = longitude(point),\r\n      phi = point[1],\r\n      sinPhi = sin(phi),\r\n      normal = [sin(lambda), -cos(lambda), 0],\r\n      angle = 0,\r\n      winding = 0;\r\n\r\n  var sum = new Adder();\r\n\r\n  if (sinPhi === 1) phi = halfPi + epsilon;\r\n  else if (sinPhi === -1) phi = -halfPi - epsilon;\r\n\r\n  for (var i = 0, n = polygon.length; i < n; ++i) {\r\n    if (!(m = (ring = polygon[i]).length)) continue;\r\n    var ring,\r\n        m,\r\n        point0 = ring[m - 1],\r\n        lambda0 = longitude(point0),\r\n        phi0 = point0[1] / 2 + quarterPi,\r\n        sinPhi0 = sin(phi0),\r\n        cosPhi0 = cos(phi0);\r\n\r\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\r\n      var point1 = ring[j],\r\n          lambda1 = longitude(point1),\r\n          phi1 = point1[1] / 2 + quarterPi,\r\n          sinPhi1 = sin(phi1),\r\n          cosPhi1 = cos(phi1),\r\n          delta = lambda1 - lambda0,\r\n          sign = delta >= 0 ? 1 : -1,\r\n          absDelta = sign * delta,\r\n          antimeridian = absDelta > pi,\r\n          k = sinPhi0 * sinPhi1;\r\n\r\n      sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\r\n      angle += antimeridian ? delta + sign * tau : delta;\r\n\r\n      // Are the longitudes either side of the point’s meridian (lambda),\r\n      // and are the latitudes smaller than the parallel (phi)?\r\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\r\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\r\n        cartesianNormalizeInPlace(arc);\r\n        var intersection = cartesianCross(normal, arc);\r\n        cartesianNormalizeInPlace(intersection);\r\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\r\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\r\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  // First, determine whether the South pole is inside or outside:\r\n  //\r\n  // It is inside if:\r\n  // * the polygon winds around it in a clockwise direction.\r\n  // * the polygon does not (cumulatively) wind around it, but has a negative\r\n  //   (counter-clockwise) area.\r\n  //\r\n  // Second, count the (signed) number of times a segment crosses a lambda\r\n  // from the point to the South pole.  If it is zero, then the point is the\r\n  // same side as the South pole.\r\n\r\n  return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\r\n}\r\n","import clipBuffer from \"./buffer.js\";\r\nimport clipRejoin from \"./rejoin.js\";\r\nimport {epsilon, halfPi} from \"../math.js\";\r\nimport polygonContains from \"../polygonContains.js\";\r\nimport {merge} from \"d3-array\";\r\n\r\nexport default function(pointVisible, clipLine, interpolate, start) {\r\n  return function(sink) {\r\n    var line = clipLine(sink),\r\n        ringBuffer = clipBuffer(),\r\n        ringSink = clipLine(ringBuffer),\r\n        polygonStarted = false,\r\n        polygon,\r\n        segments,\r\n        ring;\r\n\r\n    var clip = {\r\n      point: point,\r\n      lineStart: lineStart,\r\n      lineEnd: lineEnd,\r\n      polygonStart: function() {\r\n        clip.point = pointRing;\r\n        clip.lineStart = ringStart;\r\n        clip.lineEnd = ringEnd;\r\n        segments = [];\r\n        polygon = [];\r\n      },\r\n      polygonEnd: function() {\r\n        clip.point = point;\r\n        clip.lineStart = lineStart;\r\n        clip.lineEnd = lineEnd;\r\n        segments = merge(segments);\r\n        var startInside = polygonContains(polygon, start);\r\n        if (segments.length) {\r\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\r\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\r\n        } else if (startInside) {\r\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\r\n          sink.lineStart();\r\n          interpolate(null, null, 1, sink);\r\n          sink.lineEnd();\r\n        }\r\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\r\n        segments = polygon = null;\r\n      },\r\n      sphere: function() {\r\n        sink.polygonStart();\r\n        sink.lineStart();\r\n        interpolate(null, null, 1, sink);\r\n        sink.lineEnd();\r\n        sink.polygonEnd();\r\n      }\r\n    };\r\n\r\n    function point(lambda, phi) {\r\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\r\n    }\r\n\r\n    function pointLine(lambda, phi) {\r\n      line.point(lambda, phi);\r\n    }\r\n\r\n    function lineStart() {\r\n      clip.point = pointLine;\r\n      line.lineStart();\r\n    }\r\n\r\n    function lineEnd() {\r\n      clip.point = point;\r\n      line.lineEnd();\r\n    }\r\n\r\n    function pointRing(lambda, phi) {\r\n      ring.push([lambda, phi]);\r\n      ringSink.point(lambda, phi);\r\n    }\r\n\r\n    function ringStart() {\r\n      ringSink.lineStart();\r\n      ring = [];\r\n    }\r\n\r\n    function ringEnd() {\r\n      pointRing(ring[0][0], ring[0][1]);\r\n      ringSink.lineEnd();\r\n\r\n      var clean = ringSink.clean(),\r\n          ringSegments = ringBuffer.result(),\r\n          i, n = ringSegments.length, m,\r\n          segment,\r\n          point;\r\n\r\n      ring.pop();\r\n      polygon.push(ring);\r\n      ring = null;\r\n\r\n      if (!n) return;\r\n\r\n      // No intersections.\r\n      if (clean & 1) {\r\n        segment = ringSegments[0];\r\n        if ((m = segment.length - 1) > 0) {\r\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\r\n          sink.lineStart();\r\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\r\n          sink.lineEnd();\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Rejoin connected segments.\r\n      // TODO reuse ringBuffer.rejoin()?\r\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\r\n\r\n      segments.push(ringSegments.filter(validSegment));\r\n    }\r\n\r\n    return clip;\r\n  };\r\n}\r\n\r\nfunction validSegment(segment) {\r\n  return segment.length > 1;\r\n}\r\n\r\n// Intersections are sorted along the clip edge. For both antimeridian cutting\r\n// and circle clipping, the same comparison is used.\r\nfunction compareIntersection(a, b) {\r\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\r\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\r\n}\r\n","import clip from \"./index.js\";\r\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\r\n\r\nexport default clip(\r\n  function() { return true; },\r\n  clipAntimeridianLine,\r\n  clipAntimeridianInterpolate,\r\n  [-pi, -halfPi]\r\n);\r\n\r\n// Takes a line and cuts into visible segments. Return values: 0 - there were\r\n// intersections or the line was empty; 1 - no intersections; 2 - there were\r\n// intersections, and the first and last segments should be rejoined.\r\nfunction clipAntimeridianLine(stream) {\r\n  var lambda0 = NaN,\r\n      phi0 = NaN,\r\n      sign0 = NaN,\r\n      clean; // no intersections\r\n\r\n  return {\r\n    lineStart: function() {\r\n      stream.lineStart();\r\n      clean = 1;\r\n    },\r\n    point: function(lambda1, phi1) {\r\n      var sign1 = lambda1 > 0 ? pi : -pi,\r\n          delta = abs(lambda1 - lambda0);\r\n      if (abs(delta - pi) < epsilon) { // line crosses a pole\r\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\r\n        stream.point(sign0, phi0);\r\n        stream.lineEnd();\r\n        stream.lineStart();\r\n        stream.point(sign1, phi0);\r\n        stream.point(lambda1, phi0);\r\n        clean = 0;\r\n      } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\r\n        if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\r\n        if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\r\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\r\n        stream.point(sign0, phi0);\r\n        stream.lineEnd();\r\n        stream.lineStart();\r\n        stream.point(sign1, phi0);\r\n        clean = 0;\r\n      }\r\n      stream.point(lambda0 = lambda1, phi0 = phi1);\r\n      sign0 = sign1;\r\n    },\r\n    lineEnd: function() {\r\n      stream.lineEnd();\r\n      lambda0 = phi0 = NaN;\r\n    },\r\n    clean: function() {\r\n      return 2 - clean; // if intersections, rejoin first and last segments\r\n    }\r\n  };\r\n}\r\n\r\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\r\n  var cosPhi0,\r\n      cosPhi1,\r\n      sinLambda0Lambda1 = sin(lambda0 - lambda1);\r\n  return abs(sinLambda0Lambda1) > epsilon\r\n      ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\r\n          - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\r\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\r\n      : (phi0 + phi1) / 2;\r\n}\r\n\r\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\r\n  var phi;\r\n  if (from == null) {\r\n    phi = direction * halfPi;\r\n    stream.point(-pi, phi);\r\n    stream.point(0, phi);\r\n    stream.point(pi, phi);\r\n    stream.point(pi, 0);\r\n    stream.point(pi, -phi);\r\n    stream.point(0, -phi);\r\n    stream.point(-pi, -phi);\r\n    stream.point(-pi, 0);\r\n    stream.point(-pi, phi);\r\n  } else if (abs(from[0] - to[0]) > epsilon) {\r\n    var lambda = from[0] < to[0] ? pi : -pi;\r\n    phi = direction * lambda / 2;\r\n    stream.point(-lambda, phi);\r\n    stream.point(0, phi);\r\n    stream.point(lambda, phi);\r\n  } else {\r\n    stream.point(to[0], to[1]);\r\n  }\r\n}\r\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\r\nimport {circleStream} from \"../circle.js\";\r\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\r\nimport pointEqual from \"../pointEqual.js\";\r\nimport clip from \"./index.js\";\r\n\r\nexport default function(radius) {\r\n  var cr = cos(radius),\r\n      delta = 2 * radians,\r\n      smallRadius = cr > 0,\r\n      notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\r\n\r\n  function interpolate(from, to, direction, stream) {\r\n    circleStream(stream, radius, delta, direction, from, to);\r\n  }\r\n\r\n  function visible(lambda, phi) {\r\n    return cos(lambda) * cos(phi) > cr;\r\n  }\r\n\r\n  // Takes a line and cuts into visible segments. Return values used for polygon\r\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\r\n  // intersections 2 - there were intersections, and the first and last segments\r\n  // should be rejoined.\r\n  function clipLine(stream) {\r\n    var point0, // previous point\r\n        c0, // code for previous point\r\n        v0, // visibility of previous point\r\n        v00, // visibility of first point\r\n        clean; // no intersections\r\n    return {\r\n      lineStart: function() {\r\n        v00 = v0 = false;\r\n        clean = 1;\r\n      },\r\n      point: function(lambda, phi) {\r\n        var point1 = [lambda, phi],\r\n            point2,\r\n            v = visible(lambda, phi),\r\n            c = smallRadius\r\n              ? v ? 0 : code(lambda, phi)\r\n              : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\r\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\r\n        if (v !== v0) {\r\n          point2 = intersect(point0, point1);\r\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\r\n            point1[2] = 1;\r\n        }\r\n        if (v !== v0) {\r\n          clean = 0;\r\n          if (v) {\r\n            // outside going in\r\n            stream.lineStart();\r\n            point2 = intersect(point1, point0);\r\n            stream.point(point2[0], point2[1]);\r\n          } else {\r\n            // inside going out\r\n            point2 = intersect(point0, point1);\r\n            stream.point(point2[0], point2[1], 2);\r\n            stream.lineEnd();\r\n          }\r\n          point0 = point2;\r\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\r\n          var t;\r\n          // If the codes for two points are different, or are both zero,\r\n          // and there this segment intersects with the small circle.\r\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\r\n            clean = 0;\r\n            if (smallRadius) {\r\n              stream.lineStart();\r\n              stream.point(t[0][0], t[0][1]);\r\n              stream.point(t[1][0], t[1][1]);\r\n              stream.lineEnd();\r\n            } else {\r\n              stream.point(t[1][0], t[1][1]);\r\n              stream.lineEnd();\r\n              stream.lineStart();\r\n              stream.point(t[0][0], t[0][1], 3);\r\n            }\r\n          }\r\n        }\r\n        if (v && (!point0 || !pointEqual(point0, point1))) {\r\n          stream.point(point1[0], point1[1]);\r\n        }\r\n        point0 = point1, v0 = v, c0 = c;\r\n      },\r\n      lineEnd: function() {\r\n        if (v0) stream.lineEnd();\r\n        point0 = null;\r\n      },\r\n      // Rejoin first and last segments if there were intersections and the first\r\n      // and last points were visible.\r\n      clean: function() {\r\n        return clean | ((v00 && v0) << 1);\r\n      }\r\n    };\r\n  }\r\n\r\n  // Intersects the great circle between a and b with the clip circle.\r\n  function intersect(a, b, two) {\r\n    var pa = cartesian(a),\r\n        pb = cartesian(b);\r\n\r\n    // We have two planes, n1.p = d1 and n2.p = d2.\r\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\r\n    var n1 = [1, 0, 0], // normal\r\n        n2 = cartesianCross(pa, pb),\r\n        n2n2 = cartesianDot(n2, n2),\r\n        n1n2 = n2[0], // cartesianDot(n1, n2),\r\n        determinant = n2n2 - n1n2 * n1n2;\r\n\r\n    // Two polar points.\r\n    if (!determinant) return !two && a;\r\n\r\n    var c1 =  cr * n2n2 / determinant,\r\n        c2 = -cr * n1n2 / determinant,\r\n        n1xn2 = cartesianCross(n1, n2),\r\n        A = cartesianScale(n1, c1),\r\n        B = cartesianScale(n2, c2);\r\n    cartesianAddInPlace(A, B);\r\n\r\n    // Solve |p(t)|^2 = 1.\r\n    var u = n1xn2,\r\n        w = cartesianDot(A, u),\r\n        uu = cartesianDot(u, u),\r\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\r\n\r\n    if (t2 < 0) return;\r\n\r\n    var t = sqrt(t2),\r\n        q = cartesianScale(u, (-w - t) / uu);\r\n    cartesianAddInPlace(q, A);\r\n    q = spherical(q);\r\n\r\n    if (!two) return q;\r\n\r\n    // Two intersection points.\r\n    var lambda0 = a[0],\r\n        lambda1 = b[0],\r\n        phi0 = a[1],\r\n        phi1 = b[1],\r\n        z;\r\n\r\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\r\n\r\n    var delta = lambda1 - lambda0,\r\n        polar = abs(delta - pi) < epsilon,\r\n        meridian = polar || delta < epsilon;\r\n\r\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\r\n\r\n    // Check that the first point is between a and b.\r\n    if (meridian\r\n        ? polar\r\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\r\n          : phi0 <= q[1] && q[1] <= phi1\r\n        : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\r\n      var q1 = cartesianScale(u, (-w + t) / uu);\r\n      cartesianAddInPlace(q1, A);\r\n      return [q, spherical(q1)];\r\n    }\r\n  }\r\n\r\n  // Generates a 4-bit vector representing the location of a point relative to\r\n  // the small circle's bounding box.\r\n  function code(lambda, phi) {\r\n    var r = smallRadius ? radius : pi - radius,\r\n        code = 0;\r\n    if (lambda < -r) code |= 1; // left\r\n    else if (lambda > r) code |= 2; // right\r\n    if (phi < -r) code |= 4; // below\r\n    else if (phi > r) code |= 8; // above\r\n    return code;\r\n  }\r\n\r\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\r\n}\r\n","import {abs, epsilon} from \"../math.js\";\r\nimport clipBuffer from \"./buffer.js\";\r\nimport clipLine from \"./line.js\";\r\nimport clipRejoin from \"./rejoin.js\";\r\nimport {merge} from \"d3-array\";\r\n\r\nvar clipMax = 1e9, clipMin = -clipMax;\r\n\r\n// TODO Use d3-polygon’s polygonContains here for the ring check?\r\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\r\n\r\nexport default function clipRectangle(x0, y0, x1, y1) {\r\n\r\n  function visible(x, y) {\r\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\r\n  }\r\n\r\n  function interpolate(from, to, direction, stream) {\r\n    var a = 0, a1 = 0;\r\n    if (from == null\r\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\r\n        || comparePoint(from, to) < 0 ^ direction > 0) {\r\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\r\n      while ((a = (a + direction + 4) % 4) !== a1);\r\n    } else {\r\n      stream.point(to[0], to[1]);\r\n    }\r\n  }\r\n\r\n  function corner(p, direction) {\r\n    return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\r\n        : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\r\n        : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\r\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\r\n  }\r\n\r\n  function compareIntersection(a, b) {\r\n    return comparePoint(a.x, b.x);\r\n  }\r\n\r\n  function comparePoint(a, b) {\r\n    var ca = corner(a, 1),\r\n        cb = corner(b, 1);\r\n    return ca !== cb ? ca - cb\r\n        : ca === 0 ? b[1] - a[1]\r\n        : ca === 1 ? a[0] - b[0]\r\n        : ca === 2 ? a[1] - b[1]\r\n        : b[0] - a[0];\r\n  }\r\n\r\n  return function(stream) {\r\n    var activeStream = stream,\r\n        bufferStream = clipBuffer(),\r\n        segments,\r\n        polygon,\r\n        ring,\r\n        x__, y__, v__, // first point\r\n        x_, y_, v_, // previous point\r\n        first,\r\n        clean;\r\n\r\n    var clipStream = {\r\n      point: point,\r\n      lineStart: lineStart,\r\n      lineEnd: lineEnd,\r\n      polygonStart: polygonStart,\r\n      polygonEnd: polygonEnd\r\n    };\r\n\r\n    function point(x, y) {\r\n      if (visible(x, y)) activeStream.point(x, y);\r\n    }\r\n\r\n    function polygonInside() {\r\n      var winding = 0;\r\n\r\n      for (var i = 0, n = polygon.length; i < n; ++i) {\r\n        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\r\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\r\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\r\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\r\n        }\r\n      }\r\n\r\n      return winding;\r\n    }\r\n\r\n    // Buffer geometry within a polygon and then clip it en masse.\r\n    function polygonStart() {\r\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\r\n    }\r\n\r\n    function polygonEnd() {\r\n      var startInside = polygonInside(),\r\n          cleanInside = clean && startInside,\r\n          visible = (segments = merge(segments)).length;\r\n      if (cleanInside || visible) {\r\n        stream.polygonStart();\r\n        if (cleanInside) {\r\n          stream.lineStart();\r\n          interpolate(null, null, 1, stream);\r\n          stream.lineEnd();\r\n        }\r\n        if (visible) {\r\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\r\n        }\r\n        stream.polygonEnd();\r\n      }\r\n      activeStream = stream, segments = polygon = ring = null;\r\n    }\r\n\r\n    function lineStart() {\r\n      clipStream.point = linePoint;\r\n      if (polygon) polygon.push(ring = []);\r\n      first = true;\r\n      v_ = false;\r\n      x_ = y_ = NaN;\r\n    }\r\n\r\n    // TODO rather than special-case polygons, simply handle them separately.\r\n    // Ideally, coincident intersection points should be jittered to avoid\r\n    // clipping issues.\r\n    function lineEnd() {\r\n      if (segments) {\r\n        linePoint(x__, y__);\r\n        if (v__ && v_) bufferStream.rejoin();\r\n        segments.push(bufferStream.result());\r\n      }\r\n      clipStream.point = point;\r\n      if (v_) activeStream.lineEnd();\r\n    }\r\n\r\n    function linePoint(x, y) {\r\n      var v = visible(x, y);\r\n      if (polygon) ring.push([x, y]);\r\n      if (first) {\r\n        x__ = x, y__ = y, v__ = v;\r\n        first = false;\r\n        if (v) {\r\n          activeStream.lineStart();\r\n          activeStream.point(x, y);\r\n        }\r\n      } else {\r\n        if (v && v_) activeStream.point(x, y);\r\n        else {\r\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\r\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\r\n          if (clipLine(a, b, x0, y0, x1, y1)) {\r\n            if (!v_) {\r\n              activeStream.lineStart();\r\n              activeStream.point(a[0], a[1]);\r\n            }\r\n            activeStream.point(b[0], b[1]);\r\n            if (!v) activeStream.lineEnd();\r\n            clean = false;\r\n          } else if (v) {\r\n            activeStream.lineStart();\r\n            activeStream.point(x, y);\r\n            clean = false;\r\n          }\r\n        }\r\n      }\r\n      x_ = x, y_ = y, v_ = v;\r\n    }\r\n\r\n    return clipStream;\r\n  };\r\n}\r\n","import {Adder} from \"d3-array\";\r\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math.js\";\r\nimport noop from \"./noop.js\";\r\nimport stream from \"./stream.js\";\r\n\r\nvar lengthSum,\r\n    lambda0,\r\n    sinPhi0,\r\n    cosPhi0;\r\n\r\nvar lengthStream = {\r\n  sphere: noop,\r\n  point: noop,\r\n  lineStart: lengthLineStart,\r\n  lineEnd: noop,\r\n  polygonStart: noop,\r\n  polygonEnd: noop\r\n};\r\n\r\nfunction lengthLineStart() {\r\n  lengthStream.point = lengthPointFirst;\r\n  lengthStream.lineEnd = lengthLineEnd;\r\n}\r\n\r\nfunction lengthLineEnd() {\r\n  lengthStream.point = lengthStream.lineEnd = noop;\r\n}\r\n\r\nfunction lengthPointFirst(lambda, phi) {\r\n  lambda *= radians, phi *= radians;\r\n  lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\r\n  lengthStream.point = lengthPoint;\r\n}\r\n\r\nfunction lengthPoint(lambda, phi) {\r\n  lambda *= radians, phi *= radians;\r\n  var sinPhi = sin(phi),\r\n      cosPhi = cos(phi),\r\n      delta = abs(lambda - lambda0),\r\n      cosDelta = cos(delta),\r\n      sinDelta = sin(delta),\r\n      x = cosPhi * sinDelta,\r\n      y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\r\n      z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\r\n  lengthSum.add(atan2(sqrt(x * x + y * y), z));\r\n  lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\r\n}\r\n\r\nexport default function(object) {\r\n  lengthSum = new Adder();\r\n  stream(object, lengthStream);\r\n  return +lengthSum;\r\n}\r\n","export default function(a, b, x0, y0, x1, y1) {\r\n  var ax = a[0],\r\n      ay = a[1],\r\n      bx = b[0],\r\n      by = b[1],\r\n      t0 = 0,\r\n      t1 = 1,\r\n      dx = bx - ax,\r\n      dy = by - ay,\r\n      r;\r\n\r\n  r = x0 - ax;\r\n  if (!dx && r > 0) return;\r\n  r /= dx;\r\n  if (dx < 0) {\r\n    if (r < t0) return;\r\n    if (r < t1) t1 = r;\r\n  } else if (dx > 0) {\r\n    if (r > t1) return;\r\n    if (r > t0) t0 = r;\r\n  }\r\n\r\n  r = x1 - ax;\r\n  if (!dx && r < 0) return;\r\n  r /= dx;\r\n  if (dx < 0) {\r\n    if (r > t1) return;\r\n    if (r > t0) t0 = r;\r\n  } else if (dx > 0) {\r\n    if (r < t0) return;\r\n    if (r < t1) t1 = r;\r\n  }\r\n\r\n  r = y0 - ay;\r\n  if (!dy && r > 0) return;\r\n  r /= dy;\r\n  if (dy < 0) {\r\n    if (r < t0) return;\r\n    if (r < t1) t1 = r;\r\n  } else if (dy > 0) {\r\n    if (r > t1) return;\r\n    if (r > t0) t0 = r;\r\n  }\r\n\r\n  r = y1 - ay;\r\n  if (!dy && r < 0) return;\r\n  r /= dy;\r\n  if (dy < 0) {\r\n    if (r > t1) return;\r\n    if (r > t0) t0 = r;\r\n  } else if (dy > 0) {\r\n    if (r < t0) return;\r\n    if (r < t1) t1 = r;\r\n  }\r\n\r\n  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\r\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\r\n  return true;\r\n}\r\n","import length from \"./length.js\";\r\n\r\nvar coordinates = [null, null],\r\n    object = {type: \"LineString\", coordinates: coordinates};\r\n\r\nexport default function(a, b) {\r\n  coordinates[0] = a;\r\n  coordinates[1] = b;\r\n  return length(object);\r\n}\r\n","import {default as polygonContains} from \"./polygonContains.js\";\r\nimport {default as distance} from \"./distance.js\";\r\nimport {epsilon2, radians} from \"./math.js\";\r\n\r\nvar containsObjectType = {\r\n  Feature: function(object, point) {\r\n    return containsGeometry(object.geometry, point);\r\n  },\r\n  FeatureCollection: function(object, point) {\r\n    var features = object.features, i = -1, n = features.length;\r\n    while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;\r\n    return false;\r\n  }\r\n};\r\n\r\nvar containsGeometryType = {\r\n  Sphere: function() {\r\n    return true;\r\n  },\r\n  Point: function(object, point) {\r\n    return containsPoint(object.coordinates, point);\r\n  },\r\n  MultiPoint: function(object, point) {\r\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\r\n    while (++i < n) if (containsPoint(coordinates[i], point)) return true;\r\n    return false;\r\n  },\r\n  LineString: function(object, point) {\r\n    return containsLine(object.coordinates, point);\r\n  },\r\n  MultiLineString: function(object, point) {\r\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\r\n    while (++i < n) if (containsLine(coordinates[i], point)) return true;\r\n    return false;\r\n  },\r\n  Polygon: function(object, point) {\r\n    return containsPolygon(object.coordinates, point);\r\n  },\r\n  MultiPolygon: function(object, point) {\r\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\r\n    while (++i < n) if (containsPolygon(coordinates[i], point)) return true;\r\n    return false;\r\n  },\r\n  GeometryCollection: function(object, point) {\r\n    var geometries = object.geometries, i = -1, n = geometries.length;\r\n    while (++i < n) if (containsGeometry(geometries[i], point)) return true;\r\n    return false;\r\n  }\r\n};\r\n\r\nfunction containsGeometry(geometry, point) {\r\n  return geometry && containsGeometryType.hasOwnProperty(geometry.type)\r\n      ? containsGeometryType[geometry.type](geometry, point)\r\n      : false;\r\n}\r\n\r\nfunction containsPoint(coordinates, point) {\r\n  return distance(coordinates, point) === 0;\r\n}\r\n\r\nfunction containsLine(coordinates, point) {\r\n  var ao, bo, ab;\r\n  for (var i = 0, n = coordinates.length; i < n; i++) {\r\n    bo = distance(coordinates[i], point);\r\n    if (bo === 0) return true;\r\n    if (i > 0) {\r\n      ab = distance(coordinates[i], coordinates[i - 1]);\r\n      if (\r\n        ab > 0 &&\r\n        ao <= ab &&\r\n        bo <= ab &&\r\n        (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2 * ab\r\n      )\r\n        return true;\r\n    }\r\n    ao = bo;\r\n  }\r\n  return false;\r\n}\r\n\r\nfunction containsPolygon(coordinates, point) {\r\n  return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\r\n}\r\n\r\nfunction ringRadians(ring) {\r\n  return ring = ring.map(pointRadians), ring.pop(), ring;\r\n}\r\n\r\nfunction pointRadians(point) {\r\n  return [point[0] * radians, point[1] * radians];\r\n}\r\n\r\nexport default function(object, point) {\r\n  return (object && containsObjectType.hasOwnProperty(object.type)\r\n      ? containsObjectType[object.type]\r\n      : containsGeometry)(object, point);\r\n}\r\n","import {range} from \"d3-array\";\r\nimport {abs, ceil, epsilon} from \"./math.js\";\r\n\r\nfunction graticuleX(y0, y1, dy) {\r\n  var y = range(y0, y1 - epsilon, dy).concat(y1);\r\n  return function(x) { return y.map(function(y) { return [x, y]; }); };\r\n}\r\n\r\nfunction graticuleY(x0, x1, dx) {\r\n  var x = range(x0, x1 - epsilon, dx).concat(x1);\r\n  return function(y) { return x.map(function(x) { return [x, y]; }); };\r\n}\r\n\r\nexport default function graticule() {\r\n  var x1, x0, X1, X0,\r\n      y1, y0, Y1, Y0,\r\n      dx = 10, dy = dx, DX = 90, DY = 360,\r\n      x, y, X, Y,\r\n      precision = 2.5;\r\n\r\n  function graticule() {\r\n    return {type: \"MultiLineString\", coordinates: lines()};\r\n  }\r\n\r\n  function lines() {\r\n    return range(ceil(X0 / DX) * DX, X1, DX).map(X)\r\n        .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\r\n        .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\r\n        .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\r\n  }\r\n\r\n  graticule.lines = function() {\r\n    return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\r\n  };\r\n\r\n  graticule.outline = function() {\r\n    return {\r\n      type: \"Polygon\",\r\n      coordinates: [\r\n        X(X0).concat(\r\n        Y(Y1).slice(1),\r\n        X(X1).reverse().slice(1),\r\n        Y(Y0).reverse().slice(1))\r\n      ]\r\n    };\r\n  };\r\n\r\n  graticule.extent = function(_) {\r\n    if (!arguments.length) return graticule.extentMinor();\r\n    return graticule.extentMajor(_).extentMinor(_);\r\n  };\r\n\r\n  graticule.extentMajor = function(_) {\r\n    if (!arguments.length) return [[X0, Y0], [X1, Y1]];\r\n    X0 = +_[0][0], X1 = +_[1][0];\r\n    Y0 = +_[0][1], Y1 = +_[1][1];\r\n    if (X0 > X1) _ = X0, X0 = X1, X1 = _;\r\n    if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\r\n    return graticule.precision(precision);\r\n  };\r\n\r\n  graticule.extentMinor = function(_) {\r\n    if (!arguments.length) return [[x0, y0], [x1, y1]];\r\n    x0 = +_[0][0], x1 = +_[1][0];\r\n    y0 = +_[0][1], y1 = +_[1][1];\r\n    if (x0 > x1) _ = x0, x0 = x1, x1 = _;\r\n    if (y0 > y1) _ = y0, y0 = y1, y1 = _;\r\n    return graticule.precision(precision);\r\n  };\r\n\r\n  graticule.step = function(_) {\r\n    if (!arguments.length) return graticule.stepMinor();\r\n    return graticule.stepMajor(_).stepMinor(_);\r\n  };\r\n\r\n  graticule.stepMajor = function(_) {\r\n    if (!arguments.length) return [DX, DY];\r\n    DX = +_[0], DY = +_[1];\r\n    return graticule;\r\n  };\r\n\r\n  graticule.stepMinor = function(_) {\r\n    if (!arguments.length) return [dx, dy];\r\n    dx = +_[0], dy = +_[1];\r\n    return graticule;\r\n  };\r\n\r\n  graticule.precision = function(_) {\r\n    if (!arguments.length) return precision;\r\n    precision = +_;\r\n    x = graticuleX(y0, y1, 90);\r\n    y = graticuleY(x0, x1, precision);\r\n    X = graticuleX(Y0, Y1, 90);\r\n    Y = graticuleY(X0, X1, precision);\r\n    return graticule;\r\n  };\r\n\r\n  return graticule\r\n      .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\r\n      .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\r\n}\r\n\r\nexport function graticule10() {\r\n  return graticule()();\r\n}\r\n","export default x => x;\r\n","import {Adder} from \"d3-array\";\r\nimport {abs} from \"../math.js\";\r\nimport noop from \"../noop.js\";\r\n\r\nvar areaSum = new Adder(),\r\n    areaRingSum = new Adder(),\r\n    x00,\r\n    y00,\r\n    x0,\r\n    y0;\r\n\r\nvar areaStream = {\r\n  point: noop,\r\n  lineStart: noop,\r\n  lineEnd: noop,\r\n  polygonStart: function() {\r\n    areaStream.lineStart = areaRingStart;\r\n    areaStream.lineEnd = areaRingEnd;\r\n  },\r\n  polygonEnd: function() {\r\n    areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\r\n    areaSum.add(abs(areaRingSum));\r\n    areaRingSum = new Adder();\r\n  },\r\n  result: function() {\r\n    var area = areaSum / 2;\r\n    areaSum = new Adder();\r\n    return area;\r\n  }\r\n};\r\n\r\nfunction areaRingStart() {\r\n  areaStream.point = areaPointFirst;\r\n}\r\n\r\nfunction areaPointFirst(x, y) {\r\n  areaStream.point = areaPoint;\r\n  x00 = x0 = x, y00 = y0 = y;\r\n}\r\n\r\nfunction areaPoint(x, y) {\r\n  areaRingSum.add(y0 * x - x0 * y);\r\n  x0 = x, y0 = y;\r\n}\r\n\r\nfunction areaRingEnd() {\r\n  areaPoint(x00, y00);\r\n}\r\n\r\nexport default areaStream;\r\n","import noop from \"../noop.js\";\r\n\r\nvar x0 = Infinity,\r\n    y0 = x0,\r\n    x1 = -x0,\r\n    y1 = x1;\r\n\r\nvar boundsStream = {\r\n  point: boundsPoint,\r\n  lineStart: noop,\r\n  lineEnd: noop,\r\n  polygonStart: noop,\r\n  polygonEnd: noop,\r\n  result: function() {\r\n    var bounds = [[x0, y0], [x1, y1]];\r\n    x1 = y1 = -(y0 = x0 = Infinity);\r\n    return bounds;\r\n  }\r\n};\r\n\r\nfunction boundsPoint(x, y) {\r\n  if (x < x0) x0 = x;\r\n  if (x > x1) x1 = x;\r\n  if (y < y0) y0 = y;\r\n  if (y > y1) y1 = y;\r\n}\r\n\r\nexport default boundsStream;\r\n","import {sqrt} from \"../math.js\";\r\n\r\n// TODO Enforce positive area for exterior, negative area for interior?\r\n\r\nvar X0 = 0,\r\n    Y0 = 0,\r\n    Z0 = 0,\r\n    X1 = 0,\r\n    Y1 = 0,\r\n    Z1 = 0,\r\n    X2 = 0,\r\n    Y2 = 0,\r\n    Z2 = 0,\r\n    x00,\r\n    y00,\r\n    x0,\r\n    y0;\r\n\r\nvar centroidStream = {\r\n  point: centroidPoint,\r\n  lineStart: centroidLineStart,\r\n  lineEnd: centroidLineEnd,\r\n  polygonStart: function() {\r\n    centroidStream.lineStart = centroidRingStart;\r\n    centroidStream.lineEnd = centroidRingEnd;\r\n  },\r\n  polygonEnd: function() {\r\n    centroidStream.point = centroidPoint;\r\n    centroidStream.lineStart = centroidLineStart;\r\n    centroidStream.lineEnd = centroidLineEnd;\r\n  },\r\n  result: function() {\r\n    var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\r\n        : Z1 ? [X1 / Z1, Y1 / Z1]\r\n        : Z0 ? [X0 / Z0, Y0 / Z0]\r\n        : [NaN, NaN];\r\n    X0 = Y0 = Z0 =\r\n    X1 = Y1 = Z1 =\r\n    X2 = Y2 = Z2 = 0;\r\n    return centroid;\r\n  }\r\n};\r\n\r\nfunction centroidPoint(x, y) {\r\n  X0 += x;\r\n  Y0 += y;\r\n  ++Z0;\r\n}\r\n\r\nfunction centroidLineStart() {\r\n  centroidStream.point = centroidPointFirstLine;\r\n}\r\n\r\nfunction centroidPointFirstLine(x, y) {\r\n  centroidStream.point = centroidPointLine;\r\n  centroidPoint(x0 = x, y0 = y);\r\n}\r\n\r\nfunction centroidPointLine(x, y) {\r\n  var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\r\n  X1 += z * (x0 + x) / 2;\r\n  Y1 += z * (y0 + y) / 2;\r\n  Z1 += z;\r\n  centroidPoint(x0 = x, y0 = y);\r\n}\r\n\r\nfunction centroidLineEnd() {\r\n  centroidStream.point = centroidPoint;\r\n}\r\n\r\nfunction centroidRingStart() {\r\n  centroidStream.point = centroidPointFirstRing;\r\n}\r\n\r\nfunction centroidRingEnd() {\r\n  centroidPointRing(x00, y00);\r\n}\r\n\r\nfunction centroidPointFirstRing(x, y) {\r\n  centroidStream.point = centroidPointRing;\r\n  centroidPoint(x00 = x0 = x, y00 = y0 = y);\r\n}\r\n\r\nfunction centroidPointRing(x, y) {\r\n  var dx = x - x0,\r\n      dy = y - y0,\r\n      z = sqrt(dx * dx + dy * dy);\r\n\r\n  X1 += z * (x0 + x) / 2;\r\n  Y1 += z * (y0 + y) / 2;\r\n  Z1 += z;\r\n\r\n  z = y0 * x - x0 * y;\r\n  X2 += z * (x0 + x);\r\n  Y2 += z * (y0 + y);\r\n  Z2 += z * 3;\r\n  centroidPoint(x0 = x, y0 = y);\r\n}\r\n\r\nexport default centroidStream;\r\n","import {tau} from \"../math.js\";\r\nimport noop from \"../noop.js\";\r\n\r\nexport default function PathContext(context) {\r\n  this._context = context;\r\n}\r\n\r\nPathContext.prototype = {\r\n  _radius: 4.5,\r\n  pointRadius: function(_) {\r\n    return this._radius = _, this;\r\n  },\r\n  polygonStart: function() {\r\n    this._line = 0;\r\n  },\r\n  polygonEnd: function() {\r\n    this._line = NaN;\r\n  },\r\n  lineStart: function() {\r\n    this._point = 0;\r\n  },\r\n  lineEnd: function() {\r\n    if (this._line === 0) this._context.closePath();\r\n    this._point = NaN;\r\n  },\r\n  point: function(x, y) {\r\n    switch (this._point) {\r\n      case 0: {\r\n        this._context.moveTo(x, y);\r\n        this._point = 1;\r\n        break;\r\n      }\r\n      case 1: {\r\n        this._context.lineTo(x, y);\r\n        break;\r\n      }\r\n      default: {\r\n        this._context.moveTo(x + this._radius, y);\r\n        this._context.arc(x, y, this._radius, 0, tau);\r\n        break;\r\n      }\r\n    }\r\n  },\r\n  result: noop\r\n};\r\n","import {Adder} from \"d3-array\";\r\nimport {sqrt} from \"../math.js\";\r\nimport noop from \"../noop.js\";\r\n\r\nvar lengthSum = new Adder(),\r\n    lengthRing,\r\n    x00,\r\n    y00,\r\n    x0,\r\n    y0;\r\n\r\nvar lengthStream = {\r\n  point: noop,\r\n  lineStart: function() {\r\n    lengthStream.point = lengthPointFirst;\r\n  },\r\n  lineEnd: function() {\r\n    if (lengthRing) lengthPoint(x00, y00);\r\n    lengthStream.point = noop;\r\n  },\r\n  polygonStart: function() {\r\n    lengthRing = true;\r\n  },\r\n  polygonEnd: function() {\r\n    lengthRing = null;\r\n  },\r\n  result: function() {\r\n    var length = +lengthSum;\r\n    lengthSum = new Adder();\r\n    return length;\r\n  }\r\n};\r\n\r\nfunction lengthPointFirst(x, y) {\r\n  lengthStream.point = lengthPoint;\r\n  x00 = x0 = x, y00 = y0 = y;\r\n}\r\n\r\nfunction lengthPoint(x, y) {\r\n  x0 -= x, y0 -= y;\r\n  lengthSum.add(sqrt(x0 * x0 + y0 * y0));\r\n  x0 = x, y0 = y;\r\n}\r\n\r\nexport default lengthStream;\r\n","// Simple caching for constant-radius points.\r\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\r\n\r\nexport default class PathString {\r\n  constructor(digits) {\r\n    this._append = digits == null ? append : appendRound(digits);\r\n    this._radius = 4.5;\r\n    this._ = \"\";\r\n  }\r\n  pointRadius(_) {\r\n    this._radius = +_;\r\n    return this;\r\n  }\r\n  polygonStart() {\r\n    this._line = 0;\r\n  }\r\n  polygonEnd() {\r\n    this._line = NaN;\r\n  }\r\n  lineStart() {\r\n    this._point = 0;\r\n  }\r\n  lineEnd() {\r\n    if (this._line === 0) this._ += \"Z\";\r\n    this._point = NaN;\r\n  }\r\n  point(x, y) {\r\n    switch (this._point) {\r\n      case 0: {\r\n        this._append`M${x},${y}`;\r\n        this._point = 1;\r\n        break;\r\n      }\r\n      case 1: {\r\n        this._append`L${x},${y}`;\r\n        break;\r\n      }\r\n      default: {\r\n        this._append`M${x},${y}`;\r\n        if (this._radius !== cacheRadius || this._append !== cacheAppend) {\r\n          const r = this._radius;\r\n          const s = this._;\r\n          this._ = \"\"; // stash the old string so we can cache the circle path fragment\r\n          this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\r\n          cacheRadius = r;\r\n          cacheAppend = this._append;\r\n          cacheCircle = this._;\r\n          this._ = s;\r\n        }\r\n        this._ += cacheCircle;\r\n        break;\r\n      }\r\n    }\r\n  }\r\n  result() {\r\n    const result = this._;\r\n    this._ = \"\";\r\n    return result.length ? result : null;\r\n  }\r\n}\r\n\r\nfunction append(strings) {\r\n  let i = 1;\r\n  this._ += strings[0];\r\n  for (const j = strings.length; i < j; ++i) {\r\n    this._ += arguments[i] + strings[i];\r\n  }\r\n}\r\n\r\nfunction appendRound(digits) {\r\n  const d = Math.floor(digits);\r\n  if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\r\n  if (d > 15) return append;\r\n  if (d !== cacheDigits) {\r\n    const k = 10 ** d;\r\n    cacheDigits = d;\r\n    cacheAppend = function append(strings) {\r\n      let i = 1;\r\n      this._ += strings[0];\r\n      for (const j = strings.length; i < j; ++i) {\r\n        this._ += Math.round(arguments[i] * k) / k + strings[i];\r\n      }\r\n    };\r\n  }\r\n  return cacheAppend;\r\n}\r\n","export default function(methods) {\r\n  return {\r\n    stream: transformer(methods)\r\n  };\r\n}\r\n\r\nexport function transformer(methods) {\r\n  return function(stream) {\r\n    var s = new TransformStream;\r\n    for (var key in methods) s[key] = methods[key];\r\n    s.stream = stream;\r\n    return s;\r\n  };\r\n}\r\n\r\nfunction TransformStream() {}\r\n\r\nTransformStream.prototype = {\r\n  constructor: TransformStream,\r\n  point: function(x, y) { this.stream.point(x, y); },\r\n  sphere: function() { this.stream.sphere(); },\r\n  lineStart: function() { this.stream.lineStart(); },\r\n  lineEnd: function() { this.stream.lineEnd(); },\r\n  polygonStart: function() { this.stream.polygonStart(); },\r\n  polygonEnd: function() { this.stream.polygonEnd(); }\r\n};\r\n","import {default as geoStream} from \"../stream.js\";\r\nimport boundsStream from \"../path/bounds.js\";\r\n\r\nfunction fit(projection, fitBounds, object) {\r\n  var clip = projection.clipExtent && projection.clipExtent();\r\n  projection.scale(150).translate([0, 0]);\r\n  if (clip != null) projection.clipExtent(null);\r\n  geoStream(object, projection.stream(boundsStream));\r\n  fitBounds(boundsStream.result());\r\n  if (clip != null) projection.clipExtent(clip);\r\n  return projection;\r\n}\r\n\r\nexport function fitExtent(projection, extent, object) {\r\n  return fit(projection, function(b) {\r\n    var w = extent[1][0] - extent[0][0],\r\n        h = extent[1][1] - extent[0][1],\r\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\r\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\r\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\r\n    projection.scale(150 * k).translate([x, y]);\r\n  }, object);\r\n}\r\n\r\nexport function fitSize(projection, size, object) {\r\n  return fitExtent(projection, [[0, 0], size], object);\r\n}\r\n\r\nexport function fitWidth(projection, width, object) {\r\n  return fit(projection, function(b) {\r\n    var w = +width,\r\n        k = w / (b[1][0] - b[0][0]),\r\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\r\n        y = -k * b[0][1];\r\n    projection.scale(150 * k).translate([x, y]);\r\n  }, object);\r\n}\r\n\r\nexport function fitHeight(projection, height, object) {\r\n  return fit(projection, function(b) {\r\n    var h = +height,\r\n        k = h / (b[1][1] - b[0][1]),\r\n        x = -k * b[0][0],\r\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\r\n    projection.scale(150 * k).translate([x, y]);\r\n  }, object);\r\n}\r\n","import {cartesian} from \"../cartesian.js\";\r\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\r\nimport {transformer} from \"../transform.js\";\r\n\r\nvar maxDepth = 16, // maximum depth of subdivision\r\n    cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\r\n\r\nexport default function(project, delta2) {\r\n  return +delta2 ? resample(project, delta2) : resampleNone(project);\r\n}\r\n\r\nfunction resampleNone(project) {\r\n  return transformer({\r\n    point: function(x, y) {\r\n      x = project(x, y);\r\n      this.stream.point(x[0], x[1]);\r\n    }\r\n  });\r\n}\r\n\r\nfunction resample(project, delta2) {\r\n\r\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\r\n    var dx = x1 - x0,\r\n        dy = y1 - y0,\r\n        d2 = dx * dx + dy * dy;\r\n    if (d2 > 4 * delta2 && depth--) {\r\n      var a = a0 + a1,\r\n          b = b0 + b1,\r\n          c = c0 + c1,\r\n          m = sqrt(a * a + b * b + c * c),\r\n          phi2 = asin(c /= m),\r\n          lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\r\n          p = project(lambda2, phi2),\r\n          x2 = p[0],\r\n          y2 = p[1],\r\n          dx2 = x2 - x0,\r\n          dy2 = y2 - y0,\r\n          dz = dy * dx2 - dx * dy2;\r\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\r\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\r\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\r\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\r\n        stream.point(x2, y2);\r\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\r\n      }\r\n    }\r\n  }\r\n  return function(stream) {\r\n    var lambda00, x00, y00, a00, b00, c00, // first point\r\n        lambda0, x0, y0, a0, b0, c0; // previous point\r\n\r\n    var resampleStream = {\r\n      point: point,\r\n      lineStart: lineStart,\r\n      lineEnd: lineEnd,\r\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\r\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\r\n    };\r\n\r\n    function point(x, y) {\r\n      x = project(x, y);\r\n      stream.point(x[0], x[1]);\r\n    }\r\n\r\n    function lineStart() {\r\n      x0 = NaN;\r\n      resampleStream.point = linePoint;\r\n      stream.lineStart();\r\n    }\r\n\r\n    function linePoint(lambda, phi) {\r\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\r\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\r\n      stream.point(x0, y0);\r\n    }\r\n\r\n    function lineEnd() {\r\n      resampleStream.point = point;\r\n      stream.lineEnd();\r\n    }\r\n\r\n    function ringStart() {\r\n      lineStart();\r\n      resampleStream.point = ringPoint;\r\n      resampleStream.lineEnd = ringEnd;\r\n    }\r\n\r\n    function ringPoint(lambda, phi) {\r\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\r\n      resampleStream.point = linePoint;\r\n    }\r\n\r\n    function ringEnd() {\r\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\r\n      resampleStream.lineEnd = lineEnd;\r\n      lineEnd();\r\n    }\r\n\r\n    return resampleStream;\r\n  };\r\n}\r\n","import clipAntimeridian from \"../clip/antimeridian.js\";\r\nimport clipCircle from \"../clip/circle.js\";\r\nimport clipRectangle from \"../clip/rectangle.js\";\r\nimport compose from \"../compose.js\";\r\nimport identity from \"../identity.js\";\r\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\r\nimport {rotateRadians} from \"../rotation.js\";\r\nimport {transformer} from \"../transform.js\";\r\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\r\nimport resample from \"./resample.js\";\r\n\r\nvar transformRadians = transformer({\r\n  point: function(x, y) {\r\n    this.stream.point(x * radians, y * radians);\r\n  }\r\n});\r\n\r\nfunction transformRotate(rotate) {\r\n  return transformer({\r\n    point: function(x, y) {\r\n      var r = rotate(x, y);\r\n      return this.stream.point(r[0], r[1]);\r\n    }\r\n  });\r\n}\r\n\r\nfunction scaleTranslate(k, dx, dy, sx, sy) {\r\n  function transform(x, y) {\r\n    x *= sx; y *= sy;\r\n    return [dx + k * x, dy - k * y];\r\n  }\r\n  transform.invert = function(x, y) {\r\n    return [(x - dx) / k * sx, (dy - y) / k * sy];\r\n  };\r\n  return transform;\r\n}\r\n\r\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\r\n  if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\r\n  var cosAlpha = cos(alpha),\r\n      sinAlpha = sin(alpha),\r\n      a = cosAlpha * k,\r\n      b = sinAlpha * k,\r\n      ai = cosAlpha / k,\r\n      bi = sinAlpha / k,\r\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\r\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\r\n  function transform(x, y) {\r\n    x *= sx; y *= sy;\r\n    return [a * x - b * y + dx, dy - b * x - a * y];\r\n  }\r\n  transform.invert = function(x, y) {\r\n    return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\r\n  };\r\n  return transform;\r\n}\r\n\r\nexport default function projection(project) {\r\n  return projectionMutator(function() { return project; })();\r\n}\r\n\r\nexport function projectionMutator(projectAt) {\r\n  var project,\r\n      k = 150, // scale\r\n      x = 480, y = 250, // translate\r\n      lambda = 0, phi = 0, // center\r\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\r\n      alpha = 0, // post-rotate angle\r\n      sx = 1, // reflectX\r\n      sy = 1, // reflectX\r\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\r\n      x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\r\n      delta2 = 0.5, // precision\r\n      projectResample,\r\n      projectTransform,\r\n      projectRotateTransform,\r\n      cache,\r\n      cacheStream;\r\n\r\n  function projection(point) {\r\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\r\n  }\r\n\r\n  function invert(point) {\r\n    point = projectRotateTransform.invert(point[0], point[1]);\r\n    return point && [point[0] * degrees, point[1] * degrees];\r\n  }\r\n\r\n  projection.stream = function(stream) {\r\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\r\n  };\r\n\r\n  projection.preclip = function(_) {\r\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\r\n  };\r\n\r\n  projection.postclip = function(_) {\r\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\r\n  };\r\n\r\n  projection.clipAngle = function(_) {\r\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\r\n  };\r\n\r\n  projection.clipExtent = function(_) {\r\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\r\n  };\r\n\r\n  projection.scale = function(_) {\r\n    return arguments.length ? (k = +_, recenter()) : k;\r\n  };\r\n\r\n  projection.translate = function(_) {\r\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\r\n  };\r\n\r\n  projection.center = function(_) {\r\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\r\n  };\r\n\r\n  projection.rotate = function(_) {\r\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\r\n  };\r\n\r\n  projection.angle = function(_) {\r\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\r\n  };\r\n\r\n  projection.reflectX = function(_) {\r\n    return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\r\n  };\r\n\r\n  projection.reflectY = function(_) {\r\n    return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\r\n  };\r\n\r\n  projection.precision = function(_) {\r\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\r\n  };\r\n\r\n  projection.fitExtent = function(extent, object) {\r\n    return fitExtent(projection, extent, object);\r\n  };\r\n\r\n  projection.fitSize = function(size, object) {\r\n    return fitSize(projection, size, object);\r\n  };\r\n\r\n  projection.fitWidth = function(width, object) {\r\n    return fitWidth(projection, width, object);\r\n  };\r\n\r\n  projection.fitHeight = function(height, object) {\r\n    return fitHeight(projection, height, object);\r\n  };\r\n\r\n  function recenter() {\r\n    var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\r\n        transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\r\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\r\n    projectTransform = compose(project, transform);\r\n    projectRotateTransform = compose(rotate, projectTransform);\r\n    projectResample = resample(projectTransform, delta2);\r\n    return reset();\r\n  }\r\n\r\n  function reset() {\r\n    cache = cacheStream = null;\r\n    return projection;\r\n  }\r\n\r\n  return function() {\r\n    project = projectAt.apply(this, arguments);\r\n    projection.invert = project.invert && invert;\r\n    return recenter();\r\n  };\r\n}\r\n","import {degrees, pi, radians} from \"../math.js\";\r\nimport {projectionMutator} from \"./index.js\";\r\n\r\nexport function conicProjection(projectAt) {\r\n  var phi0 = 0,\r\n      phi1 = pi / 3,\r\n      m = projectionMutator(projectAt),\r\n      p = m(phi0, phi1);\r\n\r\n  p.parallels = function(_) {\r\n    return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\r\n  };\r\n\r\n  return p;\r\n}\r\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\r\nimport {conicProjection} from \"./conic.js\";\r\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\r\n\r\nexport function conicEqualAreaRaw(y0, y1) {\r\n  var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\r\n\r\n  // Are the parallels symmetrical around the Equator?\r\n  if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\r\n\r\n  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\r\n\r\n  function project(x, y) {\r\n    var r = sqrt(c - 2 * n * sin(y)) / n;\r\n    return [r * sin(x *= n), r0 - r * cos(x)];\r\n  }\r\n\r\n  project.invert = function(x, y) {\r\n    var r0y = r0 - y,\r\n        l = atan2(x, abs(r0y)) * sign(r0y);\r\n    if (r0y * n < 0)\r\n      l -= pi * sign(x) * sign(r0y);\r\n    return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\r\n  };\r\n\r\n  return project;\r\n}\r\n\r\nexport default function() {\r\n  return conicProjection(conicEqualAreaRaw)\r\n      .scale(155.424)\r\n      .center([0, 33.6442]);\r\n}\r\n","import {asin, cos, sin} from \"../math.js\";\r\n\r\nexport function cylindricalEqualAreaRaw(phi0) {\r\n  var cosPhi0 = cos(phi0);\r\n\r\n  function forward(lambda, phi) {\r\n    return [lambda * cosPhi0, sin(phi) / cosPhi0];\r\n  }\r\n\r\n  forward.invert = function(x, y) {\r\n    return [x / cosPhi0, asin(y * cosPhi0)];\r\n  };\r\n\r\n  return forward;\r\n}\r\n","import conicEqualArea from \"./conicEqualArea.js\";\r\n\r\nexport default function() {\r\n  return conicEqualArea()\r\n      .parallels([29.5, 45.5])\r\n      .scale(1070)\r\n      .translate([480, 250])\r\n      .rotate([96, 0])\r\n      .center([-0.6, 38.7]);\r\n}\r\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\r\n\r\nexport function azimuthalRaw(scale) {\r\n  return function(x, y) {\r\n    var cx = cos(x),\r\n        cy = cos(y),\r\n        k = scale(cx * cy);\r\n        if (k === Infinity) return [2, 0];\r\n    return [\r\n      k * cy * sin(x),\r\n      k * sin(y)\r\n    ];\r\n  }\r\n}\r\n\r\nexport function azimuthalInvert(angle) {\r\n  return function(x, y) {\r\n    var z = sqrt(x * x + y * y),\r\n        c = angle(z),\r\n        sc = sin(c),\r\n        cc = cos(c);\r\n    return [\r\n      atan2(x * sc, z * cc),\r\n      asin(z && y * sc / z)\r\n    ];\r\n  }\r\n}\r\n","import {asin, sqrt} from \"../math.js\";\r\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\r\nimport projection from \"./index.js\";\r\n\r\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\r\n  return sqrt(2 / (1 + cxcy));\r\n});\r\n\r\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\r\n  return 2 * asin(z / 2);\r\n});\r\n\r\nexport default function() {\r\n  return projection(azimuthalEqualAreaRaw)\r\n      .scale(124.75)\r\n      .clipAngle(180 - 1e-3);\r\n}\r\n","import {acos, sin} from \"../math.js\";\r\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\r\nimport projection from \"./index.js\";\r\n\r\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\r\n  return (c = acos(c)) && c / sin(c);\r\n});\r\n\r\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\r\n  return z;\r\n});\r\n\r\nexport default function() {\r\n  return projection(azimuthalEquidistantRaw)\r\n      .scale(79.4188)\r\n      .clipAngle(180 - 1e-3);\r\n}\r\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\r\nimport rotation from \"../rotation.js\";\r\nimport projection from \"./index.js\";\r\n\r\nexport function mercatorRaw(lambda, phi) {\r\n  return [lambda, log(tan((halfPi + phi) / 2))];\r\n}\r\n\r\nmercatorRaw.invert = function(x, y) {\r\n  return [x, 2 * atan(exp(y)) - halfPi];\r\n};\r\n\r\nexport default function() {\r\n  return mercatorProjection(mercatorRaw)\r\n      .scale(961 / tau);\r\n}\r\n\r\nexport function mercatorProjection(project) {\r\n  var m = projection(project),\r\n      center = m.center,\r\n      scale = m.scale,\r\n      translate = m.translate,\r\n      clipExtent = m.clipExtent,\r\n      x0 = null, y0, x1, y1; // clip extent\r\n\r\n  m.scale = function(_) {\r\n    return arguments.length ? (scale(_), reclip()) : scale();\r\n  };\r\n\r\n  m.translate = function(_) {\r\n    return arguments.length ? (translate(_), reclip()) : translate();\r\n  };\r\n\r\n  m.center = function(_) {\r\n    return arguments.length ? (center(_), reclip()) : center();\r\n  };\r\n\r\n  m.clipExtent = function(_) {\r\n    return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\r\n  };\r\n\r\n  function reclip() {\r\n    var k = pi * scale(),\r\n        t = m(rotation(m.rotate()).invert([0, 0]));\r\n    return clipExtent(x0 == null\r\n        ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\r\n        ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\r\n        : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\r\n  }\r\n\r\n  return reclip();\r\n}\r\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\r\nimport {conicProjection} from \"./conic.js\";\r\nimport {mercatorRaw} from \"./mercator.js\";\r\n\r\nfunction tany(y) {\r\n  return tan((halfPi + y) / 2);\r\n}\r\n\r\nexport function conicConformalRaw(y0, y1) {\r\n  var cy0 = cos(y0),\r\n      n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\r\n      f = cy0 * pow(tany(y0), n) / n;\r\n\r\n  if (!n) return mercatorRaw;\r\n\r\n  function project(x, y) {\r\n    if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\r\n    else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\r\n    var r = f / pow(tany(y), n);\r\n    return [r * sin(n * x), f - r * cos(n * x)];\r\n  }\r\n\r\n  project.invert = function(x, y) {\r\n    var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\r\n      l = atan2(x, abs(fy)) * sign(fy);\r\n    if (fy * n < 0)\r\n      l -= pi * sign(x) * sign(fy);\r\n    return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\r\n  };\r\n\r\n  return project;\r\n}\r\n\r\nexport default function() {\r\n  return conicProjection(conicConformalRaw)\r\n      .scale(109.5)\r\n      .parallels([30, 30]);\r\n}\r\n","import projection from \"./index.js\";\r\n\r\nexport function equirectangularRaw(lambda, phi) {\r\n  return [lambda, phi];\r\n}\r\n\r\nequirectangularRaw.invert = equirectangularRaw;\r\n\r\nexport default function() {\r\n  return projection(equirectangularRaw)\r\n      .scale(152.63);\r\n}\r\n","import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\r\nimport {conicProjection} from \"./conic.js\";\r\nimport {equirectangularRaw} from \"./equirectangular.js\";\r\n\r\nexport function conicEquidistantRaw(y0, y1) {\r\n  var cy0 = cos(y0),\r\n      n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\r\n      g = cy0 / n + y0;\r\n\r\n  if (abs(n) < epsilon) return equirectangularRaw;\r\n\r\n  function project(x, y) {\r\n    var gy = g - y, nx = n * x;\r\n    return [gy * sin(nx), g - gy * cos(nx)];\r\n  }\r\n\r\n  project.invert = function(x, y) {\r\n    var gy = g - y,\r\n        l = atan2(x, abs(gy)) * sign(gy);\r\n    if (gy * n < 0)\r\n      l -= pi * sign(x) * sign(gy);\r\n    return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\r\n  };\r\n\r\n  return project;\r\n}\r\n\r\nexport default function() {\r\n  return conicProjection(conicEquidistantRaw)\r\n      .scale(131.154)\r\n      .center([0, 13.9389]);\r\n}\r\n","import projection from \"./index.js\";\r\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\r\n\r\nvar A1 = 1.340264,\r\n    A2 = -0.081106,\r\n    A3 = 0.000893,\r\n    A4 = 0.003796,\r\n    M = sqrt(3) / 2,\r\n    iterations = 12;\r\n\r\nexport function equalEarthRaw(lambda, phi) {\r\n  var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\r\n  return [\r\n    lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\r\n    l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\r\n  ];\r\n}\r\n\r\nequalEarthRaw.invert = function(x, y) {\r\n  var l = y, l2 = l * l, l6 = l2 * l2 * l2;\r\n  for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\r\n    fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\r\n    fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\r\n    l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\r\n    if (abs(delta) < epsilon2) break;\r\n  }\r\n  return [\r\n    M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\r\n    asin(sin(l) / M)\r\n  ];\r\n};\r\n\r\nexport default function() {\r\n  return projection(equalEarthRaw)\r\n      .scale(177.158);\r\n}\r\n","import {atan, cos, sin} from \"../math.js\";\r\nimport {azimuthalInvert} from \"./azimuthal.js\";\r\nimport projection from \"./index.js\";\r\n\r\nexport function gnomonicRaw(x, y) {\r\n  var cy = cos(y), k = cos(x) * cy;\r\n  return [cy * sin(x) / k, sin(y) / k];\r\n}\r\n\r\ngnomonicRaw.invert = azimuthalInvert(atan);\r\n\r\nexport default function() {\r\n  return projection(gnomonicRaw)\r\n      .scale(144.049)\r\n      .clipAngle(60);\r\n}\r\n","import projection from \"./index.js\";\r\nimport {abs, epsilon} from \"../math.js\";\r\n\r\nexport function naturalEarth1Raw(lambda, phi) {\r\n  var phi2 = phi * phi, phi4 = phi2 * phi2;\r\n  return [\r\n    lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\r\n    phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\r\n  ];\r\n}\r\n\r\nnaturalEarth1Raw.invert = function(x, y) {\r\n  var phi = y, i = 25, delta;\r\n  do {\r\n    var phi2 = phi * phi, phi4 = phi2 * phi2;\r\n    phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\r\n        (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\r\n  } while (abs(delta) > epsilon && --i > 0);\r\n  return [\r\n    x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\r\n    phi\r\n  ];\r\n};\r\n\r\nexport default function() {\r\n  return projection(naturalEarth1Raw)\r\n      .scale(175.295);\r\n}\r\n","import {asin, cos, epsilon, sin} from \"../math.js\";\r\nimport {azimuthalInvert} from \"./azimuthal.js\";\r\nimport projection from \"./index.js\";\r\n\r\nexport function orthographicRaw(x, y) {\r\n  return [cos(y) * sin(x), sin(y)];\r\n}\r\n\r\northographicRaw.invert = azimuthalInvert(asin);\r\n\r\nexport default function() {\r\n  return projection(orthographicRaw)\r\n      .scale(249.5)\r\n      .clipAngle(90 + epsilon);\r\n}\r\n","import {atan, cos, sin} from \"../math.js\";\r\nimport {azimuthalInvert} from \"./azimuthal.js\";\r\nimport projection from \"./index.js\";\r\n\r\nexport function stereographicRaw(x, y) {\r\n  var cy = cos(y), k = 1 + cos(x) * cy;\r\n  return [cy * sin(x) / k, sin(y) / k];\r\n}\r\n\r\nstereographicRaw.invert = azimuthalInvert(function(z) {\r\n  return 2 * atan(z);\r\n});\r\n\r\nexport default function() {\r\n  return projection(stereographicRaw)\r\n      .scale(250)\r\n      .clipAngle(142);\r\n}\r\n","import {atan, exp, halfPi, log, tan} from \"../math.js\";\r\nimport {mercatorProjection} from \"./mercator.js\";\r\n\r\nexport function transverseMercatorRaw(lambda, phi) {\r\n  return [log(tan((halfPi + phi) / 2)), -lambda];\r\n}\r\n\r\ntransverseMercatorRaw.invert = function(x, y) {\r\n  return [-y, 2 * atan(exp(x)) - halfPi];\r\n};\r\n\r\nexport default function() {\r\n  var m = mercatorProjection(transverseMercatorRaw),\r\n      center = m.center,\r\n      rotate = m.rotate;\r\n\r\n  m.center = function(_) {\r\n    return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\r\n  };\r\n\r\n  m.rotate = function(_) {\r\n    return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\r\n  };\r\n\r\n  return rotate([0, 0, 90])\r\n      .scale(159.155);\r\n}\r\n","function defaultSeparation(a, b) {\r\n  return a.parent === b.parent ? 1 : 2;\r\n}\r\n\r\nfunction meanX(children) {\r\n  return children.reduce(meanXReduce, 0) / children.length;\r\n}\r\n\r\nfunction meanXReduce(x, c) {\r\n  return x + c.x;\r\n}\r\n\r\nfunction maxY(children) {\r\n  return 1 + children.reduce(maxYReduce, 0);\r\n}\r\n\r\nfunction maxYReduce(y, c) {\r\n  return Math.max(y, c.y);\r\n}\r\n\r\nfunction leafLeft(node) {\r\n  var children;\r\n  while (children = node.children) node = children[0];\r\n  return node;\r\n}\r\n\r\nfunction leafRight(node) {\r\n  var children;\r\n  while (children = node.children) node = children[children.length - 1];\r\n  return node;\r\n}\r\n\r\nexport default function() {\r\n  var separation = defaultSeparation,\r\n      dx = 1,\r\n      dy = 1,\r\n      nodeSize = false;\r\n\r\n  function cluster(root) {\r\n    var previousNode,\r\n        x = 0;\r\n\r\n    // First walk, computing the initial x & y values.\r\n    root.eachAfter(function(node) {\r\n      var children = node.children;\r\n      if (children) {\r\n        node.x = meanX(children);\r\n        node.y = maxY(children);\r\n      } else {\r\n        node.x = previousNode ? x += separation(node, previousNode) : 0;\r\n        node.y = 0;\r\n        previousNode = node;\r\n      }\r\n    });\r\n\r\n    var left = leafLeft(root),\r\n        right = leafRight(root),\r\n        x0 = left.x - separation(left, right) / 2,\r\n        x1 = right.x + separation(right, left) / 2;\r\n\r\n    // Second walk, normalizing x & y to the desired size.\r\n    return root.eachAfter(nodeSize ? function(node) {\r\n      node.x = (node.x - root.x) * dx;\r\n      node.y = (root.y - node.y) * dy;\r\n    } : function(node) {\r\n      node.x = (node.x - x0) / (x1 - x0) * dx;\r\n      node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\r\n    });\r\n  }\r\n\r\n  cluster.separation = function(x) {\r\n    return arguments.length ? (separation = x, cluster) : separation;\r\n  };\r\n\r\n  cluster.size = function(x) {\r\n    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\r\n  };\r\n\r\n  cluster.nodeSize = function(x) {\r\n    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\r\n  };\r\n\r\n  return cluster;\r\n}\r\n","function count(node) {\r\n  var sum = 0,\r\n      children = node.children,\r\n      i = children && children.length;\r\n  if (!i) sum = 1;\r\n  else while (--i >= 0) sum += children[i].value;\r\n  node.value = sum;\r\n}\r\n\r\nexport default function() {\r\n  return this.eachAfter(count);\r\n}\r\n","import node_count from \"./count.js\";\r\nimport node_each from \"./each.js\";\r\nimport node_eachBefore from \"./eachBefore.js\";\r\nimport node_eachAfter from \"./eachAfter.js\";\r\nimport node_find from \"./find.js\";\r\nimport node_sum from \"./sum.js\";\r\nimport node_sort from \"./sort.js\";\r\nimport node_path from \"./path.js\";\r\nimport node_ancestors from \"./ancestors.js\";\r\nimport node_descendants from \"./descendants.js\";\r\nimport node_leaves from \"./leaves.js\";\r\nimport node_links from \"./links.js\";\r\nimport node_iterator from \"./iterator.js\";\r\n\r\nexport default function hierarchy(data, children) {\r\n  if (data instanceof Map) {\r\n    data = [undefined, data];\r\n    if (children === undefined) children = mapChildren;\r\n  } else if (children === undefined) {\r\n    children = objectChildren;\r\n  }\r\n\r\n  var root = new Node(data),\r\n      node,\r\n      nodes = [root],\r\n      child,\r\n      childs,\r\n      i,\r\n      n;\r\n\r\n  while (node = nodes.pop()) {\r\n    if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\r\n      node.children = childs;\r\n      for (i = n - 1; i >= 0; --i) {\r\n        nodes.push(child = childs[i] = new Node(childs[i]));\r\n        child.parent = node;\r\n        child.depth = node.depth + 1;\r\n      }\r\n    }\r\n  }\r\n\r\n  return root.eachBefore(computeHeight);\r\n}\r\n\r\nfunction node_copy() {\r\n  return hierarchy(this).eachBefore(copyData);\r\n}\r\n\r\nfunction objectChildren(d) {\r\n  return d.children;\r\n}\r\n\r\nfunction mapChildren(d) {\r\n  return Array.isArray(d) ? d[1] : null;\r\n}\r\n\r\nfunction copyData(node) {\r\n  if (node.data.value !== undefined) node.value = node.data.value;\r\n  node.data = node.data.data;\r\n}\r\n\r\nexport function computeHeight(node) {\r\n  var height = 0;\r\n  do node.height = height;\r\n  while ((node = node.parent) && (node.height < ++height));\r\n}\r\n\r\nexport function Node(data) {\r\n  this.data = data;\r\n  this.depth =\r\n  this.height = 0;\r\n  this.parent = null;\r\n}\r\n\r\nNode.prototype = hierarchy.prototype = {\r\n  constructor: Node,\r\n  count: node_count,\r\n  each: node_each,\r\n  eachAfter: node_eachAfter,\r\n  eachBefore: node_eachBefore,\r\n  find: node_find,\r\n  sum: node_sum,\r\n  sort: node_sort,\r\n  path: node_path,\r\n  ancestors: node_ancestors,\r\n  descendants: node_descendants,\r\n  leaves: node_leaves,\r\n  links: node_links,\r\n  copy: node_copy,\r\n  [Symbol.iterator]: node_iterator\r\n};\r\n","export function optional(f) {\r\n  return f == null ? null : required(f);\r\n}\r\n\r\nexport function required(f) {\r\n  if (typeof f !== \"function\") throw new Error;\r\n  return f;\r\n}\r\n","export function constantZero() {\r\n  return 0;\r\n}\r\n\r\nexport default function(x) {\r\n  return function() {\r\n    return x;\r\n  };\r\n}\r\n","export default function(callback, that) {\r\n  let index = -1;\r\n  for (const node of this) {\r\n    callback.call(that, node, ++index, this);\r\n  }\r\n  return this;\r\n}\r\n","export default function(callback, that) {\r\n  var node = this, nodes = [node], next = [], children, i, n, index = -1;\r\n  while (node = nodes.pop()) {\r\n    next.push(node);\r\n    if (children = node.children) {\r\n      for (i = 0, n = children.length; i < n; ++i) {\r\n        nodes.push(children[i]);\r\n      }\r\n    }\r\n  }\r\n  while (node = next.pop()) {\r\n    callback.call(that, node, ++index, this);\r\n  }\r\n  return this;\r\n}\r\n","export default function(callback, that) {\r\n  var node = this, nodes = [node], children, i, index = -1;\r\n  while (node = nodes.pop()) {\r\n    callback.call(that, node, ++index, this);\r\n    if (children = node.children) {\r\n      for (i = children.length - 1; i >= 0; --i) {\r\n        nodes.push(children[i]);\r\n      }\r\n    }\r\n  }\r\n  return this;\r\n}\r\n","export default function(callback, that) {\r\n  let index = -1;\r\n  for (const node of this) {\r\n    if (callback.call(that, node, ++index, this)) {\r\n      return node;\r\n    }\r\n  }\r\n}\r\n","export default function(value) {\r\n  return this.eachAfter(function(node) {\r\n    var sum = +value(node.data) || 0,\r\n        children = node.children,\r\n        i = children && children.length;\r\n    while (--i >= 0) sum += children[i].value;\r\n    node.value = sum;\r\n  });\r\n}\r\n","export default function(compare) {\r\n  return this.eachBefore(function(node) {\r\n    if (node.children) {\r\n      node.children.sort(compare);\r\n    }\r\n  });\r\n}\r\n","export default function(end) {\r\n  var start = this,\r\n      ancestor = leastCommonAncestor(start, end),\r\n      nodes = [start];\r\n  while (start !== ancestor) {\r\n    start = start.parent;\r\n    nodes.push(start);\r\n  }\r\n  var k = nodes.length;\r\n  while (end !== ancestor) {\r\n    nodes.splice(k, 0, end);\r\n    end = end.parent;\r\n  }\r\n  return nodes;\r\n}\r\n\r\nfunction leastCommonAncestor(a, b) {\r\n  if (a === b) return a;\r\n  var aNodes = a.ancestors(),\r\n      bNodes = b.ancestors(),\r\n      c = null;\r\n  a = aNodes.pop();\r\n  b = bNodes.pop();\r\n  while (a === b) {\r\n    c = a;\r\n    a = aNodes.pop();\r\n    b = bNodes.pop();\r\n  }\r\n  return c;\r\n}\r\n","export default function() {\r\n  var node = this, nodes = [node];\r\n  while (node = node.parent) {\r\n    nodes.push(node);\r\n  }\r\n  return nodes;\r\n}\r\n","export default function() {\r\n  return Array.from(this);\r\n}\r\n","export default function() {\r\n  var leaves = [];\r\n  this.eachBefore(function(node) {\r\n    if (!node.children) {\r\n      leaves.push(node);\r\n    }\r\n  });\r\n  return leaves;\r\n}\r\n","export default function() {\r\n  var root = this, links = [];\r\n  root.each(function(node) {\r\n    if (node !== root) { // Don’t include the root’s parent, if any.\r\n      links.push({source: node.parent, target: node});\r\n    }\r\n  });\r\n  return links;\r\n}\r\n","export default function*() {\r\n  var node = this, current, next = [node], children, i, n;\r\n  do {\r\n    current = next.reverse(), next = [];\r\n    while (node = current.pop()) {\r\n      yield node;\r\n      if (children = node.children) {\r\n        for (i = 0, n = children.length; i < n; ++i) {\r\n          next.push(children[i]);\r\n        }\r\n      }\r\n    }\r\n  } while (next.length);\r\n}\r\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\r\nconst a = 1664525;\r\nconst c = 1013904223;\r\nconst m = 4294967296; // 2^32\r\n\r\nexport default function() {\r\n  let s = 1;\r\n  return () => (s = (a * s + c) % m) / m;\r\n}\r\n","import {shuffle} from \"../array.js\";\r\nimport lcg from \"../lcg.js\";\r\n\r\nexport default function(circles) {\r\n  return packEncloseRandom(circles, lcg());\r\n}\r\n\r\nexport function packEncloseRandom(circles, random) {\r\n  var i = 0, n = (circles = shuffle(Array.from(circles), random)).length, B = [], p, e;\r\n\r\n  while (i < n) {\r\n    p = circles[i];\r\n    if (e && enclosesWeak(e, p)) ++i;\r\n    else e = encloseBasis(B = extendBasis(B, p)), i = 0;\r\n  }\r\n\r\n  return e;\r\n}\r\n\r\nfunction extendBasis(B, p) {\r\n  var i, j;\r\n\r\n  if (enclosesWeakAll(p, B)) return [p];\r\n\r\n  // If we get here then B must have at least one element.\r\n  for (i = 0; i < B.length; ++i) {\r\n    if (enclosesNot(p, B[i])\r\n        && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\r\n      return [B[i], p];\r\n    }\r\n  }\r\n\r\n  // If we get here then B must have at least two elements.\r\n  for (i = 0; i < B.length - 1; ++i) {\r\n    for (j = i + 1; j < B.length; ++j) {\r\n      if (enclosesNot(encloseBasis2(B[i], B[j]), p)\r\n          && enclosesNot(encloseBasis2(B[i], p), B[j])\r\n          && enclosesNot(encloseBasis2(B[j], p), B[i])\r\n          && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\r\n        return [B[i], B[j], p];\r\n      }\r\n    }\r\n  }\r\n\r\n  // If we get here then something is very wrong.\r\n  throw new Error;\r\n}\r\n\r\nfunction enclosesNot(a, b) {\r\n  var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\r\n  return dr < 0 || dr * dr < dx * dx + dy * dy;\r\n}\r\n\r\nfunction enclosesWeak(a, b) {\r\n  var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\r\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\r\n}\r\n\r\nfunction enclosesWeakAll(a, B) {\r\n  for (var i = 0; i < B.length; ++i) {\r\n    if (!enclosesWeak(a, B[i])) {\r\n      return false;\r\n    }\r\n  }\r\n  return true;\r\n}\r\n\r\nfunction encloseBasis(B) {\r\n  switch (B.length) {\r\n    case 1: return encloseBasis1(B[0]);\r\n    case 2: return encloseBasis2(B[0], B[1]);\r\n    case 3: return encloseBasis3(B[0], B[1], B[2]);\r\n  }\r\n}\r\n\r\nfunction encloseBasis1(a) {\r\n  return {\r\n    x: a.x,\r\n    y: a.y,\r\n    r: a.r\r\n  };\r\n}\r\n\r\nfunction encloseBasis2(a, b) {\r\n  var x1 = a.x, y1 = a.y, r1 = a.r,\r\n      x2 = b.x, y2 = b.y, r2 = b.r,\r\n      x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\r\n      l = Math.sqrt(x21 * x21 + y21 * y21);\r\n  return {\r\n    x: (x1 + x2 + x21 / l * r21) / 2,\r\n    y: (y1 + y2 + y21 / l * r21) / 2,\r\n    r: (l + r1 + r2) / 2\r\n  };\r\n}\r\n\r\nfunction encloseBasis3(a, b, c) {\r\n  var x1 = a.x, y1 = a.y, r1 = a.r,\r\n      x2 = b.x, y2 = b.y, r2 = b.r,\r\n      x3 = c.x, y3 = c.y, r3 = c.r,\r\n      a2 = x1 - x2,\r\n      a3 = x1 - x3,\r\n      b2 = y1 - y2,\r\n      b3 = y1 - y3,\r\n      c2 = r2 - r1,\r\n      c3 = r3 - r1,\r\n      d1 = x1 * x1 + y1 * y1 - r1 * r1,\r\n      d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\r\n      d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\r\n      ab = a3 * b2 - a2 * b3,\r\n      xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\r\n      xb = (b3 * c2 - b2 * c3) / ab,\r\n      ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\r\n      yb = (a2 * c3 - a3 * c2) / ab,\r\n      A = xb * xb + yb * yb - 1,\r\n      B = 2 * (r1 + xa * xb + ya * yb),\r\n      C = xa * xa + ya * ya - r1 * r1,\r\n      r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\r\n  return {\r\n    x: x1 + xa + xb * r,\r\n    y: y1 + ya + yb * r,\r\n    r: r\r\n  };\r\n}\r\n","export default function(x) {\r\n  return typeof x === \"object\" && \"length\" in x\r\n    ? x // Array, TypedArray, NodeList, array-like\r\n    : Array.from(x); // Map, Set, iterable, string, or anything else\r\n}\r\n\r\nexport function shuffle(array, random) {\r\n  let m = array.length,\r\n      t,\r\n      i;\r\n\r\n  while (m) {\r\n    i = random() * m-- | 0;\r\n    t = array[m];\r\n    array[m] = array[i];\r\n    array[i] = t;\r\n  }\r\n\r\n  return array;\r\n}\r\n","import array from \"../array.js\";\r\nimport lcg from \"../lcg.js\";\r\nimport {packEncloseRandom} from \"./enclose.js\";\r\n\r\nfunction place(b, a, c) {\r\n  var dx = b.x - a.x, x, a2,\r\n      dy = b.y - a.y, y, b2,\r\n      d2 = dx * dx + dy * dy;\r\n  if (d2) {\r\n    a2 = a.r + c.r, a2 *= a2;\r\n    b2 = b.r + c.r, b2 *= b2;\r\n    if (a2 > b2) {\r\n      x = (d2 + b2 - a2) / (2 * d2);\r\n      y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\r\n      c.x = b.x - x * dx - y * dy;\r\n      c.y = b.y - x * dy + y * dx;\r\n    } else {\r\n      x = (d2 + a2 - b2) / (2 * d2);\r\n      y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\r\n      c.x = a.x + x * dx - y * dy;\r\n      c.y = a.y + x * dy + y * dx;\r\n    }\r\n  } else {\r\n    c.x = a.x + c.r;\r\n    c.y = a.y;\r\n  }\r\n}\r\n\r\nfunction intersects(a, b) {\r\n  var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\r\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\r\n}\r\n\r\nfunction score(node) {\r\n  var a = node._,\r\n      b = node.next._,\r\n      ab = a.r + b.r,\r\n      dx = (a.x * b.r + b.x * a.r) / ab,\r\n      dy = (a.y * b.r + b.y * a.r) / ab;\r\n  return dx * dx + dy * dy;\r\n}\r\n\r\nfunction Node(circle) {\r\n  this._ = circle;\r\n  this.next = null;\r\n  this.previous = null;\r\n}\r\n\r\nexport function packSiblingsRandom(circles, random) {\r\n  if (!(n = (circles = array(circles)).length)) return 0;\r\n\r\n  var a, b, c, n, aa, ca, i, j, k, sj, sk;\r\n\r\n  // Place the first circle.\r\n  a = circles[0], a.x = 0, a.y = 0;\r\n  if (!(n > 1)) return a.r;\r\n\r\n  // Place the second circle.\r\n  b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\r\n  if (!(n > 2)) return a.r + b.r;\r\n\r\n  // Place the third circle.\r\n  place(b, a, c = circles[2]);\r\n\r\n  // Initialize the front-chain using the first three circles a, b and c.\r\n  a = new Node(a), b = new Node(b), c = new Node(c);\r\n  a.next = c.previous = b;\r\n  b.next = a.previous = c;\r\n  c.next = b.previous = a;\r\n\r\n  // Attempt to place each remaining circle…\r\n  pack: for (i = 3; i < n; ++i) {\r\n    place(a._, b._, c = circles[i]), c = new Node(c);\r\n\r\n    // Find the closest intersecting circle on the front-chain, if any.\r\n    // “Closeness” is determined by linear distance along the front-chain.\r\n    // “Ahead” or “behind” is likewise determined by linear distance.\r\n    j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\r\n    do {\r\n      if (sj <= sk) {\r\n        if (intersects(j._, c._)) {\r\n          b = j, a.next = b, b.previous = a, --i;\r\n          continue pack;\r\n        }\r\n        sj += j._.r, j = j.next;\r\n      } else {\r\n        if (intersects(k._, c._)) {\r\n          a = k, a.next = b, b.previous = a, --i;\r\n          continue pack;\r\n        }\r\n        sk += k._.r, k = k.previous;\r\n      }\r\n    } while (j !== k.next);\r\n\r\n    // Success! Insert the new circle c between a and b.\r\n    c.previous = a, c.next = b, a.next = b.previous = b = c;\r\n\r\n    // Compute the new closest circle pair to the centroid.\r\n    aa = score(a);\r\n    while ((c = c.next) !== b) {\r\n      if ((ca = score(c)) < aa) {\r\n        a = c, aa = ca;\r\n      }\r\n    }\r\n    b = a.next;\r\n  }\r\n\r\n  // Compute the enclosing circle of the front chain.\r\n  a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = packEncloseRandom(a, random);\r\n\r\n  // Translate the circles to put the enclosing circle around the origin.\r\n  for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\r\n\r\n  return c.r;\r\n}\r\n\r\nexport default function(circles) {\r\n  packSiblingsRandom(circles, lcg());\r\n  return circles;\r\n}\r\n","import {optional} from \"../accessors.js\";\r\nimport constant, {constantZero} from \"../constant.js\";\r\nimport lcg from \"../lcg.js\";\r\nimport {packSiblingsRandom} from \"./siblings.js\";\r\n\r\nfunction defaultRadius(d) {\r\n  return Math.sqrt(d.value);\r\n}\r\n\r\nexport default function() {\r\n  var radius = null,\r\n      dx = 1,\r\n      dy = 1,\r\n      padding = constantZero;\r\n\r\n  function pack(root) {\r\n    const random = lcg();\r\n    root.x = dx / 2, root.y = dy / 2;\r\n    if (radius) {\r\n      root.eachBefore(radiusLeaf(radius))\r\n          .eachAfter(packChildrenRandom(padding, 0.5, random))\r\n          .eachBefore(translateChild(1));\r\n    } else {\r\n      root.eachBefore(radiusLeaf(defaultRadius))\r\n          .eachAfter(packChildrenRandom(constantZero, 1, random))\r\n          .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))\r\n          .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\r\n    }\r\n    return root;\r\n  }\r\n\r\n  pack.radius = function(x) {\r\n    return arguments.length ? (radius = optional(x), pack) : radius;\r\n  };\r\n\r\n  pack.size = function(x) {\r\n    return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\r\n  };\r\n\r\n  pack.padding = function(x) {\r\n    return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\r\n  };\r\n\r\n  return pack;\r\n}\r\n\r\nfunction radiusLeaf(radius) {\r\n  return function(node) {\r\n    if (!node.children) {\r\n      node.r = Math.max(0, +radius(node) || 0);\r\n    }\r\n  };\r\n}\r\n\r\nfunction packChildrenRandom(padding, k, random) {\r\n  return function(node) {\r\n    if (children = node.children) {\r\n      var children,\r\n          i,\r\n          n = children.length,\r\n          r = padding(node) * k || 0,\r\n          e;\r\n\r\n      if (r) for (i = 0; i < n; ++i) children[i].r += r;\r\n      e = packSiblingsRandom(children, random);\r\n      if (r) for (i = 0; i < n; ++i) children[i].r -= r;\r\n      node.r = e + r;\r\n    }\r\n  };\r\n}\r\n\r\nfunction translateChild(k) {\r\n  return function(node) {\r\n    var parent = node.parent;\r\n    node.r *= k;\r\n    if (parent) {\r\n      node.x = parent.x + k * node.x;\r\n      node.y = parent.y + k * node.y;\r\n    }\r\n  };\r\n}\r\n","export default function(node) {\r\n  node.x0 = Math.round(node.x0);\r\n  node.y0 = Math.round(node.y0);\r\n  node.x1 = Math.round(node.x1);\r\n  node.y1 = Math.round(node.y1);\r\n}\r\n","export default function(parent, x0, y0, x1, y1) {\r\n  var nodes = parent.children,\r\n      node,\r\n      i = -1,\r\n      n = nodes.length,\r\n      k = parent.value && (x1 - x0) / parent.value;\r\n\r\n  while (++i < n) {\r\n    node = nodes[i], node.y0 = y0, node.y1 = y1;\r\n    node.x0 = x0, node.x1 = x0 += node.value * k;\r\n  }\r\n}\r\n","import {optional} from \"./accessors.js\";\r\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\r\n\r\nvar preroot = {depth: -1},\r\n    ambiguous = {},\r\n    imputed = {};\r\n\r\nfunction defaultId(d) {\r\n  return d.id;\r\n}\r\n\r\nfunction defaultParentId(d) {\r\n  return d.parentId;\r\n}\r\n\r\nexport default function() {\r\n  var id = defaultId,\r\n      parentId = defaultParentId,\r\n      path;\r\n\r\n  function stratify(data) {\r\n    var nodes = Array.from(data),\r\n        currentId = id,\r\n        currentParentId = parentId,\r\n        n,\r\n        d,\r\n        i,\r\n        root,\r\n        parent,\r\n        node,\r\n        nodeId,\r\n        nodeKey,\r\n        nodeByKey = new Map;\r\n\r\n    if (path != null) {\r\n      const I = nodes.map((d, i) => normalize(path(d, i, data)));\r\n      const P = I.map(parentof);\r\n      const S = new Set(I).add(\"\");\r\n      for (const i of P) {\r\n        if (!S.has(i)) {\r\n          S.add(i);\r\n          I.push(i);\r\n          P.push(parentof(i));\r\n          nodes.push(imputed);\r\n        }\r\n      }\r\n      currentId = (_, i) => I[i];\r\n      currentParentId = (_, i) => P[i];\r\n    }\r\n\r\n    for (i = 0, n = nodes.length; i < n; ++i) {\r\n      d = nodes[i], node = nodes[i] = new Node(d);\r\n      if ((nodeId = currentId(d, i, data)) != null && (nodeId += \"\")) {\r\n        nodeKey = node.id = nodeId;\r\n        nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\r\n      }\r\n      if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += \"\")) {\r\n        node.parent = nodeId;\r\n      }\r\n    }\r\n\r\n    for (i = 0; i < n; ++i) {\r\n      node = nodes[i];\r\n      if (nodeId = node.parent) {\r\n        parent = nodeByKey.get(nodeId);\r\n        if (!parent) throw new Error(\"missing: \" + nodeId);\r\n        if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\r\n        if (parent.children) parent.children.push(node);\r\n        else parent.children = [node];\r\n        node.parent = parent;\r\n      } else {\r\n        if (root) throw new Error(\"multiple roots\");\r\n        root = node;\r\n      }\r\n    }\r\n\r\n    if (!root) throw new Error(\"no root\");\r\n\r\n    // When imputing internal nodes, only introduce roots if needed.\r\n    // Then replace the imputed marker data with null.\r\n    if (path != null) {\r\n      while (root.data === imputed && root.children.length === 1) {\r\n        root = root.children[0], --n;\r\n      }\r\n      for (let i = nodes.length - 1; i >= 0; --i) {\r\n        node = nodes[i];\r\n        if (node.data !== imputed) break;\r\n        node.data = null;\r\n      }\r\n    }\r\n\r\n    root.parent = preroot;\r\n    root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\r\n    root.parent = null;\r\n    if (n > 0) throw new Error(\"cycle\");\r\n\r\n    return root;\r\n  }\r\n\r\n  stratify.id = function(x) {\r\n    return arguments.length ? (id = optional(x), stratify) : id;\r\n  };\r\n\r\n  stratify.parentId = function(x) {\r\n    return arguments.length ? (parentId = optional(x), stratify) : parentId;\r\n  };\r\n\r\n  stratify.path = function(x) {\r\n    return arguments.length ? (path = optional(x), stratify) : path;\r\n  };\r\n\r\n  return stratify;\r\n}\r\n\r\n// To normalize a path, we coerce to a string, strip the trailing slash if any\r\n// (as long as the trailing slash is not immediately preceded by another slash),\r\n// and add leading slash if missing.\r\nfunction normalize(path) {\r\n  path = `${path}`;\r\n  let i = path.length;\r\n  if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);\r\n  return path[0] === \"/\" ? path : `/${path}`;\r\n}\r\n\r\n// Walk backwards to find the first slash that is not the leading slash, e.g.:\r\n// \"/foo/bar\" ⇥ \"/foo\", \"/foo\" ⇥ \"/\", \"/\" ↦ \"\". (The root is special-cased\r\n// because the id of the root must be a truthy value.)\r\nfunction parentof(path) {\r\n  let i = path.length;\r\n  if (i < 2) return \"\";\r\n  while (--i > 1) if (slash(path, i)) break;\r\n  return path.slice(0, i);\r\n}\r\n\r\n// Slashes can be escaped; to determine whether a slash is a path delimiter, we\r\n// count the number of preceding backslashes escaping the forward slash: an odd\r\n// number indicates an escaped forward slash.\r\nfunction slash(path, i) {\r\n  if (path[i] === \"/\") {\r\n    let k = 0;\r\n    while (i > 0 && path[--i] === \"\\\\\") ++k;\r\n    if ((k & 1) === 0) return true;\r\n  }\r\n  return false;\r\n}\r\n","import {Node} from \"./hierarchy/index.js\";\r\n\r\nfunction defaultSeparation(a, b) {\r\n  return a.parent === b.parent ? 1 : 2;\r\n}\r\n\r\n// function radialSeparation(a, b) {\r\n//   return (a.parent === b.parent ? 1 : 2) / a.depth;\r\n// }\r\n\r\n// This function is used to traverse the left contour of a subtree (or\r\n// subforest). It returns the successor of v on this contour. This successor is\r\n// either given by the leftmost child of v or by the thread of v. The function\r\n// returns null if and only if v is on the highest level of its subtree.\r\nfunction nextLeft(v) {\r\n  var children = v.children;\r\n  return children ? children[0] : v.t;\r\n}\r\n\r\n// This function works analogously to nextLeft.\r\nfunction nextRight(v) {\r\n  var children = v.children;\r\n  return children ? children[children.length - 1] : v.t;\r\n}\r\n\r\n// Shifts the current subtree rooted at w+. This is done by increasing\r\n// prelim(w+) and mod(w+) by shift.\r\nfunction moveSubtree(wm, wp, shift) {\r\n  var change = shift / (wp.i - wm.i);\r\n  wp.c -= change;\r\n  wp.s += shift;\r\n  wm.c += change;\r\n  wp.z += shift;\r\n  wp.m += shift;\r\n}\r\n\r\n// All other shifts, applied to the smaller subtrees between w- and w+, are\r\n// performed by this function. To prepare the shifts, we have to adjust\r\n// change(w+), shift(w+), and change(w-).\r\nfunction executeShifts(v) {\r\n  var shift = 0,\r\n      change = 0,\r\n      children = v.children,\r\n      i = children.length,\r\n      w;\r\n  while (--i >= 0) {\r\n    w = children[i];\r\n    w.z += shift;\r\n    w.m += shift;\r\n    shift += w.s + (change += w.c);\r\n  }\r\n}\r\n\r\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\r\n// returns the specified (default) ancestor.\r\nfunction nextAncestor(vim, v, ancestor) {\r\n  return vim.a.parent === v.parent ? vim.a : ancestor;\r\n}\r\n\r\nfunction TreeNode(node, i) {\r\n  this._ = node;\r\n  this.parent = null;\r\n  this.children = null;\r\n  this.A = null; // default ancestor\r\n  this.a = this; // ancestor\r\n  this.z = 0; // prelim\r\n  this.m = 0; // mod\r\n  this.c = 0; // change\r\n  this.s = 0; // shift\r\n  this.t = null; // thread\r\n  this.i = i; // number\r\n}\r\n\r\nTreeNode.prototype = Object.create(Node.prototype);\r\n\r\nfunction treeRoot(root) {\r\n  var tree = new TreeNode(root, 0),\r\n      node,\r\n      nodes = [tree],\r\n      child,\r\n      children,\r\n      i,\r\n      n;\r\n\r\n  while (node = nodes.pop()) {\r\n    if (children = node._.children) {\r\n      node.children = new Array(n = children.length);\r\n      for (i = n - 1; i >= 0; --i) {\r\n        nodes.push(child = node.children[i] = new TreeNode(children[i], i));\r\n        child.parent = node;\r\n      }\r\n    }\r\n  }\r\n\r\n  (tree.parent = new TreeNode(null, 0)).children = [tree];\r\n  return tree;\r\n}\r\n\r\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\r\nexport default function() {\r\n  var separation = defaultSeparation,\r\n      dx = 1,\r\n      dy = 1,\r\n      nodeSize = null;\r\n\r\n  function tree(root) {\r\n    var t = treeRoot(root);\r\n\r\n    // Compute the layout using Buchheim et al.’s algorithm.\r\n    t.eachAfter(firstWalk), t.parent.m = -t.z;\r\n    t.eachBefore(secondWalk);\r\n\r\n    // If a fixed node size is specified, scale x and y.\r\n    if (nodeSize) root.eachBefore(sizeNode);\r\n\r\n    // If a fixed tree size is specified, scale x and y based on the extent.\r\n    // Compute the left-most, right-most, and depth-most nodes for extents.\r\n    else {\r\n      var left = root,\r\n          right = root,\r\n          bottom = root;\r\n      root.eachBefore(function(node) {\r\n        if (node.x < left.x) left = node;\r\n        if (node.x > right.x) right = node;\r\n        if (node.depth > bottom.depth) bottom = node;\r\n      });\r\n      var s = left === right ? 1 : separation(left, right) / 2,\r\n          tx = s - left.x,\r\n          kx = dx / (right.x + s + tx),\r\n          ky = dy / (bottom.depth || 1);\r\n      root.eachBefore(function(node) {\r\n        node.x = (node.x + tx) * kx;\r\n        node.y = node.depth * ky;\r\n      });\r\n    }\r\n\r\n    return root;\r\n  }\r\n\r\n  // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\r\n  // applied recursively to the children of v, as well as the function\r\n  // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\r\n  // node v is placed to the midpoint of its outermost children.\r\n  function firstWalk(v) {\r\n    var children = v.children,\r\n        siblings = v.parent.children,\r\n        w = v.i ? siblings[v.i - 1] : null;\r\n    if (children) {\r\n      executeShifts(v);\r\n      var midpoint = (children[0].z + children[children.length - 1].z) / 2;\r\n      if (w) {\r\n        v.z = w.z + separation(v._, w._);\r\n        v.m = v.z - midpoint;\r\n      } else {\r\n        v.z = midpoint;\r\n      }\r\n    } else if (w) {\r\n      v.z = w.z + separation(v._, w._);\r\n    }\r\n    v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\r\n  }\r\n\r\n  // Computes all real x-coordinates by summing up the modifiers recursively.\r\n  function secondWalk(v) {\r\n    v._.x = v.z + v.parent.m;\r\n    v.m += v.parent.m;\r\n  }\r\n\r\n  // The core of the algorithm. Here, a new subtree is combined with the\r\n  // previous subtrees. Threads are used to traverse the inside and outside\r\n  // contours of the left and right subtree up to the highest common level. The\r\n  // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\r\n  // superscript o means outside and i means inside, the subscript - means left\r\n  // subtree and + means right subtree. For summing up the modifiers along the\r\n  // contour, we use respective variables si+, si-, so-, and so+. Whenever two\r\n  // nodes of the inside contours conflict, we compute the left one of the\r\n  // greatest uncommon ancestors using the function ANCESTOR and call MOVE\r\n  // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\r\n  // Finally, we add a new thread (if necessary).\r\n  function apportion(v, w, ancestor) {\r\n    if (w) {\r\n      var vip = v,\r\n          vop = v,\r\n          vim = w,\r\n          vom = vip.parent.children[0],\r\n          sip = vip.m,\r\n          sop = vop.m,\r\n          sim = vim.m,\r\n          som = vom.m,\r\n          shift;\r\n      while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\r\n        vom = nextLeft(vom);\r\n        vop = nextRight(vop);\r\n        vop.a = v;\r\n        shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\r\n        if (shift > 0) {\r\n          moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\r\n          sip += shift;\r\n          sop += shift;\r\n        }\r\n        sim += vim.m;\r\n        sip += vip.m;\r\n        som += vom.m;\r\n        sop += vop.m;\r\n      }\r\n      if (vim && !nextRight(vop)) {\r\n        vop.t = vim;\r\n        vop.m += sim - sop;\r\n      }\r\n      if (vip && !nextLeft(vom)) {\r\n        vom.t = vip;\r\n        vom.m += sip - som;\r\n        ancestor = v;\r\n      }\r\n    }\r\n    return ancestor;\r\n  }\r\n\r\n  function sizeNode(node) {\r\n    node.x *= dx;\r\n    node.y = node.depth * dy;\r\n  }\r\n\r\n  tree.separation = function(x) {\r\n    return arguments.length ? (separation = x, tree) : separation;\r\n  };\r\n\r\n  tree.size = function(x) {\r\n    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\r\n  };\r\n\r\n  tree.nodeSize = function(x) {\r\n    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\r\n  };\r\n\r\n  return tree;\r\n}\r\n","export default function(parent, x0, y0, x1, y1) {\r\n  var nodes = parent.children,\r\n      node,\r\n      i = -1,\r\n      n = nodes.length,\r\n      k = parent.value && (y1 - y0) / parent.value;\r\n\r\n  while (++i < n) {\r\n    node = nodes[i], node.x0 = x0, node.x1 = x1;\r\n    node.y0 = y0, node.y1 = y0 += node.value * k;\r\n  }\r\n}\r\n","import treemapDice from \"./dice.js\";\r\nimport treemapSlice from \"./slice.js\";\r\n\r\nexport var phi = (1 + Math.sqrt(5)) / 2;\r\n\r\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\r\n  var rows = [],\r\n      nodes = parent.children,\r\n      row,\r\n      nodeValue,\r\n      i0 = 0,\r\n      i1 = 0,\r\n      n = nodes.length,\r\n      dx, dy,\r\n      value = parent.value,\r\n      sumValue,\r\n      minValue,\r\n      maxValue,\r\n      newRatio,\r\n      minRatio,\r\n      alpha,\r\n      beta;\r\n\r\n  while (i0 < n) {\r\n    dx = x1 - x0, dy = y1 - y0;\r\n\r\n    // Find the next non-empty node.\r\n    do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\r\n    minValue = maxValue = sumValue;\r\n    alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\r\n    beta = sumValue * sumValue * alpha;\r\n    minRatio = Math.max(maxValue / beta, beta / minValue);\r\n\r\n    // Keep adding nodes while the aspect ratio maintains or improves.\r\n    for (; i1 < n; ++i1) {\r\n      sumValue += nodeValue = nodes[i1].value;\r\n      if (nodeValue < minValue) minValue = nodeValue;\r\n      if (nodeValue > maxValue) maxValue = nodeValue;\r\n      beta = sumValue * sumValue * alpha;\r\n      newRatio = Math.max(maxValue / beta, beta / minValue);\r\n      if (newRatio > minRatio) { sumValue -= nodeValue; break; }\r\n      minRatio = newRatio;\r\n    }\r\n\r\n    // Position and record the row orientation.\r\n    rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\r\n    if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\r\n    else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\r\n    value -= sumValue, i0 = i1;\r\n  }\r\n\r\n  return rows;\r\n}\r\n\r\nexport default (function custom(ratio) {\r\n\r\n  function squarify(parent, x0, y0, x1, y1) {\r\n    squarifyRatio(ratio, parent, x0, y0, x1, y1);\r\n  }\r\n\r\n  squarify.ratio = function(x) {\r\n    return custom((x = +x) > 1 ? x : 1);\r\n  };\r\n\r\n  return squarify;\r\n})(phi);\r\n","import treemapDice from \"./dice.js\";\r\nimport treemapSlice from \"./slice.js\";\r\nimport {phi, squarifyRatio} from \"./squarify.js\";\r\n\r\nexport default (function custom(ratio) {\r\n\r\n  function resquarify(parent, x0, y0, x1, y1) {\r\n    if ((rows = parent._squarify) && (rows.ratio === ratio)) {\r\n      var rows,\r\n          row,\r\n          nodes,\r\n          i,\r\n          j = -1,\r\n          n,\r\n          m = rows.length,\r\n          value = parent.value;\r\n\r\n      while (++j < m) {\r\n        row = rows[j], nodes = row.children;\r\n        for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\r\n        if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\r\n        else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\r\n        value -= row.value;\r\n      }\r\n    } else {\r\n      parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\r\n      rows.ratio = ratio;\r\n    }\r\n  }\r\n\r\n  resquarify.ratio = function(x) {\r\n    return custom((x = +x) > 1 ? x : 1);\r\n  };\r\n\r\n  return resquarify;\r\n})(phi);\r\n","// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of\r\n// the 3D cross product in a quadrant I Cartesian coordinate system (+x is\r\n// right, +y is up). Returns a positive value if ABC is counter-clockwise,\r\n// negative if clockwise, and zero if the points are collinear.\r\nexport default function(a, b, c) {\r\n  return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\r\n}\r\n","import cross from \"./cross.js\";\r\n\r\nfunction lexicographicOrder(a, b) {\r\n  return a[0] - b[0] || a[1] - b[1];\r\n}\r\n\r\n// Computes the upper convex hull per the monotone chain algorithm.\r\n// Assumes points.length >= 3, is sorted by x, unique in y.\r\n// Returns an array of indices into points in left-to-right order.\r\nfunction computeUpperHullIndexes(points) {\r\n  const n = points.length,\r\n      indexes = [0, 1];\r\n  let size = 2, i;\r\n\r\n  for (i = 2; i < n; ++i) {\r\n    while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;\r\n    indexes[size++] = i;\r\n  }\r\n\r\n  return indexes.slice(0, size); // remove popped points\r\n}\r\n\r\nexport default function(points) {\r\n  if ((n = points.length) < 3) return null;\r\n\r\n  var i,\r\n      n,\r\n      sortedPoints = new Array(n),\r\n      flippedPoints = new Array(n);\r\n\r\n  for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];\r\n  sortedPoints.sort(lexicographicOrder);\r\n  for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];\r\n\r\n  var upperIndexes = computeUpperHullIndexes(sortedPoints),\r\n      lowerIndexes = computeUpperHullIndexes(flippedPoints);\r\n\r\n  // Construct the hull polygon, removing possible duplicate endpoints.\r\n  var skipLeft = lowerIndexes[0] === upperIndexes[0],\r\n      skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],\r\n      hull = [];\r\n\r\n  // Add upper hull in right-to-l order.\r\n  // Then add lower hull in left-to-right order.\r\n  for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);\r\n  for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);\r\n\r\n  return hull;\r\n}\r\n","export default Math.random;\r\n","import defaultSource from \"./defaultSource.js\";\r\n\r\nexport default (function sourceRandomUniform(source) {\r\n  function randomUniform(min, max) {\r\n    min = min == null ? 0 : +min;\r\n    max = max == null ? 1 : +max;\r\n    if (arguments.length === 1) max = min, min = 0;\r\n    else max -= min;\r\n    return function() {\r\n      return source() * max + min;\r\n    };\r\n  }\r\n\r\n  randomUniform.source = sourceRandomUniform;\r\n\r\n  return randomUniform;\r\n})(defaultSource);\r\n","import defaultSource from \"./defaultSource.js\";\r\n\r\nexport default (function sourceRandomInt(source) {\r\n  function randomInt(min, max) {\r\n    if (arguments.length < 2) max = min, min = 0;\r\n    min = Math.floor(min);\r\n    max = Math.floor(max) - min;\r\n    return function() {\r\n      return Math.floor(source() * max + min);\r\n    };\r\n  }\r\n\r\n  randomInt.source = sourceRandomInt;\r\n\r\n  return randomInt;\r\n})(defaultSource);\r\n","import defaultSource from \"./defaultSource.js\";\r\n\r\nexport default (function sourceRandomNormal(source) {\r\n  function randomNormal(mu, sigma) {\r\n    var x, r;\r\n    mu = mu == null ? 0 : +mu;\r\n    sigma = sigma == null ? 1 : +sigma;\r\n    return function() {\r\n      var y;\r\n\r\n      // If available, use the second previously-generated uniform random.\r\n      if (x != null) y = x, x = null;\r\n\r\n      // Otherwise, generate a new x and y.\r\n      else do {\r\n        x = source() * 2 - 1;\r\n        y = source() * 2 - 1;\r\n        r = x * x + y * y;\r\n      } while (!r || r > 1);\r\n\r\n      return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\r\n    };\r\n  }\r\n\r\n  randomNormal.source = sourceRandomNormal;\r\n\r\n  return randomNormal;\r\n})(defaultSource);\r\n","import defaultSource from \"./defaultSource.js\";\r\nimport normal from \"./normal.js\";\r\n\r\nexport default (function sourceRandomLogNormal(source) {\r\n  var N = normal.source(source);\r\n\r\n  function randomLogNormal() {\r\n    var randomNormal = N.apply(this, arguments);\r\n    return function() {\r\n      return Math.exp(randomNormal());\r\n    };\r\n  }\r\n\r\n  randomLogNormal.source = sourceRandomLogNormal;\r\n\r\n  return randomLogNormal;\r\n})(defaultSource);\r\n","import defaultSource from \"./defaultSource.js\";\r\n\r\nexport default (function sourceRandomIrwinHall(source) {\r\n  function randomIrwinHall(n) {\r\n    if ((n = +n) <= 0) return () => 0;\r\n    return function() {\r\n      for (var sum = 0, i = n; i > 1; --i) sum += source();\r\n      return sum + i * source();\r\n    };\r\n  }\r\n\r\n  randomIrwinHall.source = sourceRandomIrwinHall;\r\n\r\n  return randomIrwinHall;\r\n})(defaultSource);\r\n","import defaultSource from \"./defaultSource.js\";\r\nimport irwinHall from \"./irwinHall.js\";\r\n\r\nexport default (function sourceRandomBates(source) {\r\n  var I = irwinHall.source(source);\r\n\r\n  function randomBates(n) {\r\n    // use limiting distribution at n === 0\r\n    if ((n = +n) === 0) return source;\r\n    var randomIrwinHall = I(n);\r\n    return function() {\r\n      return randomIrwinHall() / n;\r\n    };\r\n  }\r\n\r\n  randomBates.source = sourceRandomBates;\r\n\r\n  return randomBates;\r\n})(defaultSource);\r\n","import defaultSource from \"./defaultSource.js\";\r\n\r\nexport default (function sourceRandomExponential(source) {\r\n  function randomExponential(lambda) {\r\n    return function() {\r\n      return -Math.log1p(-source()) / lambda;\r\n    };\r\n  }\r\n\r\n  randomExponential.source = sourceRandomExponential;\r\n\r\n  return randomExponential;\r\n})(defaultSource);\r\n","import defaultSource from \"./defaultSource.js\";\r\n\r\nexport default (function sourceRandomPareto(source) {\r\n  function randomPareto(alpha) {\r\n    if ((alpha = +alpha) < 0) throw new RangeError(\"invalid alpha\");\r\n    alpha = 1 / -alpha;\r\n    return function() {\r\n      return Math.pow(1 - source(), alpha);\r\n    };\r\n  }\r\n\r\n  randomPareto.source = sourceRandomPareto;\r\n\r\n  return randomPareto;\r\n})(defaultSource);\r\n","import defaultSource from \"./defaultSource.js\";\r\n\r\nexport default (function sourceRandomBernoulli(source) {\r\n  function randomBernoulli(p) {\r\n    if ((p = +p) < 0 || p > 1) throw new RangeError(\"invalid p\");\r\n    return function() {\r\n      return Math.floor(source() + p);\r\n    };\r\n  }\r\n\r\n  randomBernoulli.source = sourceRandomBernoulli;\r\n\r\n  return randomBernoulli;\r\n})(defaultSource);\r\n","import defaultSource from \"./defaultSource.js\";\r\n\r\nexport default (function sourceRandomGeometric(source) {\r\n  function randomGeometric(p) {\r\n    if ((p = +p) < 0 || p > 1) throw new RangeError(\"invalid p\");\r\n    if (p === 0) return () => Infinity;\r\n    if (p === 1) return () => 1;\r\n    p = Math.log1p(-p);\r\n    return function() {\r\n      return 1 + Math.floor(Math.log1p(-source()) / p);\r\n    };\r\n  }\r\n\r\n  randomGeometric.source = sourceRandomGeometric;\r\n\r\n  return randomGeometric;\r\n})(defaultSource);\r\n","import defaultSource from \"./defaultSource.js\";\r\nimport normal from \"./normal.js\";\r\n\r\nexport default (function sourceRandomGamma(source) {\r\n  var randomNormal = normal.source(source)();\r\n\r\n  function randomGamma(k, theta) {\r\n    if ((k = +k) < 0) throw new RangeError(\"invalid k\");\r\n    // degenerate distribution if k === 0\r\n    if (k === 0) return () => 0;\r\n    theta = theta == null ? 1 : +theta;\r\n    // exponential distribution if k === 1\r\n    if (k === 1) return () => -Math.log1p(-source()) * theta;\r\n\r\n    var d = (k < 1 ? k + 1 : k) - 1 / 3,\r\n        c = 1 / (3 * Math.sqrt(d)),\r\n        multiplier = k < 1 ? () => Math.pow(source(), 1 / k) : () => 1;\r\n    return function() {\r\n      do {\r\n        do {\r\n          var x = randomNormal(),\r\n              v = 1 + c * x;\r\n        } while (v <= 0);\r\n        v *= v * v;\r\n        var u = 1 - source();\r\n      } while (u >= 1 - 0.0331 * x * x * x * x && Math.log(u) >= 0.5 * x * x + d * (1 - v + Math.log(v)));\r\n      return d * v * multiplier() * theta;\r\n    };\r\n  }\r\n\r\n  randomGamma.source = sourceRandomGamma;\r\n\r\n  return randomGamma;\r\n})(defaultSource);\r\n","import defaultSource from \"./defaultSource.js\";\r\nimport gamma from \"./gamma.js\";\r\n\r\nexport default (function sourceRandomBeta(source) {\r\n  var G = gamma.source(source);\r\n\r\n  function randomBeta(alpha, beta) {\r\n    var X = G(alpha),\r\n        Y = G(beta);\r\n    return function() {\r\n      var x = X();\r\n      return x === 0 ? 0 : x / (x + Y());\r\n    };\r\n  }\r\n\r\n  randomBeta.source = sourceRandomBeta;\r\n\r\n  return randomBeta;\r\n})(defaultSource);\r\n","import defaultSource from \"./defaultSource.js\";\r\nimport beta from \"./beta.js\";\r\nimport geometric from \"./geometric.js\";\r\n\r\nexport default (function sourceRandomBinomial(source) {\r\n  var G = geometric.source(source),\r\n      B = beta.source(source);\r\n\r\n  function randomBinomial(n, p) {\r\n    n = +n;\r\n    if ((p = +p) >= 1) return () => n;\r\n    if (p <= 0) return () => 0;\r\n    return function() {\r\n      var acc = 0, nn = n, pp = p;\r\n      while (nn * pp > 16 && nn * (1 - pp) > 16) {\r\n        var i = Math.floor((nn + 1) * pp),\r\n            y = B(i, nn - i + 1)();\r\n        if (y <= pp) {\r\n          acc += i;\r\n          nn -= i;\r\n          pp = (pp - y) / (1 - y);\r\n        } else {\r\n          nn = i - 1;\r\n          pp /= y;\r\n        }\r\n      }\r\n      var sign = pp < 0.5,\r\n          pFinal = sign ? pp : 1 - pp,\r\n          g = G(pFinal);\r\n      for (var s = g(), k = 0; s <= nn; ++k) s += g();\r\n      return acc + (sign ? k : nn - k);\r\n    };\r\n  }\r\n\r\n  randomBinomial.source = sourceRandomBinomial;\r\n\r\n  return randomBinomial;\r\n})(defaultSource);\r\n","import defaultSource from \"./defaultSource.js\";\r\n\r\nexport default (function sourceRandomWeibull(source) {\r\n  function randomWeibull(k, a, b) {\r\n    var outerFunc;\r\n    if ((k = +k) === 0) {\r\n      outerFunc = x => -Math.log(x);\r\n    } else {\r\n      k = 1 / k;\r\n      outerFunc = x => Math.pow(x, k);\r\n    }\r\n    a = a == null ? 0 : +a;\r\n    b = b == null ? 1 : +b;\r\n    return function() {\r\n      return a + b * outerFunc(-Math.log1p(-source()));\r\n    };\r\n  }\r\n\r\n  randomWeibull.source = sourceRandomWeibull;\r\n\r\n  return randomWeibull;\r\n})(defaultSource);\r\n","import defaultSource from \"./defaultSource.js\";\r\n\r\nexport default (function sourceRandomCauchy(source) {\r\n  function randomCauchy(a, b) {\r\n    a = a == null ? 0 : +a;\r\n    b = b == null ? 1 : +b;\r\n    return function() {\r\n      return a + b * Math.tan(Math.PI * source());\r\n    };\r\n  }\r\n\r\n  randomCauchy.source = sourceRandomCauchy;\r\n\r\n  return randomCauchy;\r\n})(defaultSource);\r\n","import defaultSource from \"./defaultSource.js\";\r\n\r\nexport default (function sourceRandomLogistic(source) {\r\n  function randomLogistic(a, b) {\r\n    a = a == null ? 0 : +a;\r\n    b = b == null ? 1 : +b;\r\n    return function() {\r\n      var u = source();\r\n      return a + b * Math.log(u / (1 - u));\r\n    };\r\n  }\r\n\r\n  randomLogistic.source = sourceRandomLogistic;\r\n\r\n  return randomLogistic;\r\n})(defaultSource);\r\n","import defaultSource from \"./defaultSource.js\";\r\nimport binomial from \"./binomial.js\";\r\nimport gamma from \"./gamma.js\";\r\n\r\nexport default (function sourceRandomPoisson(source) {\r\n  var G = gamma.source(source),\r\n      B = binomial.source(source);\r\n\r\n  function randomPoisson(lambda) {\r\n    return function() {\r\n      var acc = 0, l = lambda;\r\n      while (l > 16) {\r\n        var n = Math.floor(0.875 * l),\r\n            t = G(n)();\r\n        if (t > l) return acc + B(n - 1, l / t)();\r\n        acc += n;\r\n        l -= t;\r\n      }\r\n      for (var s = -Math.log1p(-source()), k = 0; s <= l; ++k) s -= Math.log1p(-source());\r\n      return acc + k;\r\n    };\r\n  }\r\n\r\n  randomPoisson.source = sourceRandomPoisson;\r\n\r\n  return randomPoisson;\r\n})(defaultSource);\r\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\r\nconst mul = 0x19660D;\r\nconst inc = 0x3C6EF35F;\r\nconst eps = 1 / 0x100000000;\r\n\r\nexport default function lcg(seed = Math.random()) {\r\n  let state = (0 <= seed && seed < 1 ? seed / eps : Math.abs(seed)) | 0;\r\n  return () => (state = mul * state + inc | 0, eps * (state >>> 0));\r\n}\r\n","export function initRange(domain, range) {\r\n  switch (arguments.length) {\r\n    case 0: break;\r\n    case 1: this.range(domain); break;\r\n    default: this.range(range).domain(domain); break;\r\n  }\r\n  return this;\r\n}\r\n\r\nexport function initInterpolator(domain, interpolator) {\r\n  switch (arguments.length) {\r\n    case 0: break;\r\n    case 1: {\r\n      if (typeof domain === \"function\") this.interpolator(domain);\r\n      else this.range(domain);\r\n      break;\r\n    }\r\n    default: {\r\n      this.domain(domain);\r\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\r\n      else this.range(interpolator);\r\n      break;\r\n    }\r\n  }\r\n  return this;\r\n}\r\n","import {InternMap} from \"d3-array\";\r\nimport {initRange} from \"./init.js\";\r\n\r\nexport const implicit = Symbol(\"implicit\");\r\n\r\nexport default function ordinal() {\r\n  var index = new InternMap(),\r\n      domain = [],\r\n      range = [],\r\n      unknown = implicit;\r\n\r\n  function scale(d) {\r\n    let i = index.get(d);\r\n    if (i === undefined) {\r\n      if (unknown !== implicit) return unknown;\r\n      index.set(d, i = domain.push(d) - 1);\r\n    }\r\n    return range[i % range.length];\r\n  }\r\n\r\n  scale.domain = function(_) {\r\n    if (!arguments.length) return domain.slice();\r\n    domain = [], index = new InternMap();\r\n    for (const value of _) {\r\n      if (index.has(value)) continue;\r\n      index.set(value, domain.push(value) - 1);\r\n    }\r\n    return scale;\r\n  };\r\n\r\n  scale.range = function(_) {\r\n    return arguments.length ? (range = Array.from(_), scale) : range.slice();\r\n  };\r\n\r\n  scale.unknown = function(_) {\r\n    return arguments.length ? (unknown = _, scale) : unknown;\r\n  };\r\n\r\n  scale.copy = function() {\r\n    return ordinal(domain, range).unknown(unknown);\r\n  };\r\n\r\n  initRange.apply(scale, arguments);\r\n\r\n  return scale;\r\n}\r\n","import {range as sequence} from \"d3-array\";\r\nimport {initRange} from \"./init.js\";\r\nimport ordinal from \"./ordinal.js\";\r\n\r\nexport default function band() {\r\n  var scale = ordinal().unknown(undefined),\r\n      domain = scale.domain,\r\n      ordinalRange = scale.range,\r\n      r0 = 0,\r\n      r1 = 1,\r\n      step,\r\n      bandwidth,\r\n      round = false,\r\n      paddingInner = 0,\r\n      paddingOuter = 0,\r\n      align = 0.5;\r\n\r\n  delete scale.unknown;\r\n\r\n  function rescale() {\r\n    var n = domain().length,\r\n        reverse = r1 < r0,\r\n        start = reverse ? r1 : r0,\r\n        stop = reverse ? r0 : r1;\r\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\r\n    if (round) step = Math.floor(step);\r\n    start += (stop - start - step * (n - paddingInner)) * align;\r\n    bandwidth = step * (1 - paddingInner);\r\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\r\n    var values = sequence(n).map(function(i) { return start + step * i; });\r\n    return ordinalRange(reverse ? values.reverse() : values);\r\n  }\r\n\r\n  scale.domain = function(_) {\r\n    return arguments.length ? (domain(_), rescale()) : domain();\r\n  };\r\n\r\n  scale.range = function(_) {\r\n    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\r\n  };\r\n\r\n  scale.rangeRound = function(_) {\r\n    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\r\n  };\r\n\r\n  scale.bandwidth = function() {\r\n    return bandwidth;\r\n  };\r\n\r\n  scale.step = function() {\r\n    return step;\r\n  };\r\n\r\n  scale.round = function(_) {\r\n    return arguments.length ? (round = !!_, rescale()) : round;\r\n  };\r\n\r\n  scale.padding = function(_) {\r\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\r\n  };\r\n\r\n  scale.paddingInner = function(_) {\r\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\r\n  };\r\n\r\n  scale.paddingOuter = function(_) {\r\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\r\n  };\r\n\r\n  scale.align = function(_) {\r\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\r\n  };\r\n\r\n  scale.copy = function() {\r\n    return band(domain(), [r0, r1])\r\n        .round(round)\r\n        .paddingInner(paddingInner)\r\n        .paddingOuter(paddingOuter)\r\n        .align(align);\r\n  };\r\n\r\n  return initRange.apply(rescale(), arguments);\r\n}\r\n\r\nfunction pointish(scale) {\r\n  var copy = scale.copy;\r\n\r\n  scale.padding = scale.paddingOuter;\r\n  delete scale.paddingInner;\r\n  delete scale.paddingOuter;\r\n\r\n  scale.copy = function() {\r\n    return pointish(copy());\r\n  };\r\n\r\n  return scale;\r\n}\r\n\r\nexport function point() {\r\n  return pointish(band.apply(null, arguments).paddingInner(1));\r\n}\r\n","export default function number(x) {\r\n  return +x;\r\n}\r\n","import {bisect} from \"d3-array\";\r\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\r\nimport constant from \"./constant.js\";\r\nimport number from \"./number.js\";\r\n\r\nvar unit = [0, 1];\r\n\r\nexport function identity(x) {\r\n  return x;\r\n}\r\n\r\nfunction normalize(a, b) {\r\n  return (b -= (a = +a))\r\n      ? function(x) { return (x - a) / b; }\r\n      : constant(isNaN(b) ? NaN : 0.5);\r\n}\r\n\r\nfunction clamper(a, b) {\r\n  var t;\r\n  if (a > b) t = a, a = b, b = t;\r\n  return function(x) { return Math.max(a, Math.min(b, x)); };\r\n}\r\n\r\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\r\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\r\nfunction bimap(domain, range, interpolate) {\r\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\r\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\r\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\r\n  return function(x) { return r0(d0(x)); };\r\n}\r\n\r\nfunction polymap(domain, range, interpolate) {\r\n  var j = Math.min(domain.length, range.length) - 1,\r\n      d = new Array(j),\r\n      r = new Array(j),\r\n      i = -1;\r\n\r\n  // Reverse descending domains.\r\n  if (domain[j] < domain[0]) {\r\n    domain = domain.slice().reverse();\r\n    range = range.slice().reverse();\r\n  }\r\n\r\n  while (++i < j) {\r\n    d[i] = normalize(domain[i], domain[i + 1]);\r\n    r[i] = interpolate(range[i], range[i + 1]);\r\n  }\r\n\r\n  return function(x) {\r\n    var i = bisect(domain, x, 1, j) - 1;\r\n    return r[i](d[i](x));\r\n  };\r\n}\r\n\r\nexport function copy(source, target) {\r\n  return target\r\n      .domain(source.domain())\r\n      .range(source.range())\r\n      .interpolate(source.interpolate())\r\n      .clamp(source.clamp())\r\n      .unknown(source.unknown());\r\n}\r\n\r\nexport function transformer() {\r\n  var domain = unit,\r\n      range = unit,\r\n      interpolate = interpolateValue,\r\n      transform,\r\n      untransform,\r\n      unknown,\r\n      clamp = identity,\r\n      piecewise,\r\n      output,\r\n      input;\r\n\r\n  function rescale() {\r\n    var n = Math.min(domain.length, range.length);\r\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\r\n    piecewise = n > 2 ? polymap : bimap;\r\n    output = input = null;\r\n    return scale;\r\n  }\r\n\r\n  function scale(x) {\r\n    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\r\n  }\r\n\r\n  scale.invert = function(y) {\r\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\r\n  };\r\n\r\n  scale.domain = function(_) {\r\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\r\n  };\r\n\r\n  scale.range = function(_) {\r\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\r\n  };\r\n\r\n  scale.rangeRound = function(_) {\r\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\r\n  };\r\n\r\n  scale.clamp = function(_) {\r\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\r\n  };\r\n\r\n  scale.interpolate = function(_) {\r\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\r\n  };\r\n\r\n  scale.unknown = function(_) {\r\n    return arguments.length ? (unknown = _, scale) : unknown;\r\n  };\r\n\r\n  return function(t, u) {\r\n    transform = t, untransform = u;\r\n    return rescale();\r\n  };\r\n}\r\n\r\nexport default function continuous() {\r\n  return transformer()(identity, identity);\r\n}\r\n","export default function constants(x) {\r\n  return function() {\r\n    return x;\r\n  };\r\n}\r\n","import {tickStep} from \"d3-array\";\r\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\r\n\r\nexport default function tickFormat(start, stop, count, specifier) {\r\n  var step = tickStep(start, stop, count),\r\n      precision;\r\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\r\n  switch (specifier.type) {\r\n    case \"s\": {\r\n      var value = Math.max(Math.abs(start), Math.abs(stop));\r\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\r\n      return formatPrefix(specifier, value);\r\n    }\r\n    case \"\":\r\n    case \"e\":\r\n    case \"g\":\r\n    case \"p\":\r\n    case \"r\": {\r\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\r\n      break;\r\n    }\r\n    case \"f\":\r\n    case \"%\": {\r\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\r\n      break;\r\n    }\r\n  }\r\n  return format(specifier);\r\n}\r\n","import {ticks, tickIncrement} from \"d3-array\";\r\nimport continuous, {copy} from \"./continuous.js\";\r\nimport {initRange} from \"./init.js\";\r\nimport tickFormat from \"./tickFormat.js\";\r\n\r\nexport function linearish(scale) {\r\n  var domain = scale.domain;\r\n\r\n  scale.ticks = function(count) {\r\n    var d = domain();\r\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\r\n  };\r\n\r\n  scale.tickFormat = function(count, specifier) {\r\n    var d = domain();\r\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\r\n  };\r\n\r\n  scale.nice = function(count) {\r\n    if (count == null) count = 10;\r\n\r\n    var d = domain();\r\n    var i0 = 0;\r\n    var i1 = d.length - 1;\r\n    var start = d[i0];\r\n    var stop = d[i1];\r\n    var prestep;\r\n    var step;\r\n    var maxIter = 10;\r\n\r\n    if (stop < start) {\r\n      step = start, start = stop, stop = step;\r\n      step = i0, i0 = i1, i1 = step;\r\n    }\r\n    \r\n    while (maxIter-- > 0) {\r\n      step = tickIncrement(start, stop, count);\r\n      if (step === prestep) {\r\n        d[i0] = start\r\n        d[i1] = stop\r\n        return domain(d);\r\n      } else if (step > 0) {\r\n        start = Math.floor(start / step) * step;\r\n        stop = Math.ceil(stop / step) * step;\r\n      } else if (step < 0) {\r\n        start = Math.ceil(start * step) / step;\r\n        stop = Math.floor(stop * step) / step;\r\n      } else {\r\n        break;\r\n      }\r\n      prestep = step;\r\n    }\r\n\r\n    return scale;\r\n  };\r\n\r\n  return scale;\r\n}\r\n\r\nexport default function linear() {\r\n  var scale = continuous();\r\n\r\n  scale.copy = function() {\r\n    return copy(scale, linear());\r\n  };\r\n\r\n  initRange.apply(scale, arguments);\r\n\r\n  return linearish(scale);\r\n}\r\n","export default function nice(domain, interval) {\r\n  domain = domain.slice();\r\n\r\n  var i0 = 0,\r\n      i1 = domain.length - 1,\r\n      x0 = domain[i0],\r\n      x1 = domain[i1],\r\n      t;\r\n\r\n  if (x1 < x0) {\r\n    t = i0, i0 = i1, i1 = t;\r\n    t = x0, x0 = x1, x1 = t;\r\n  }\r\n\r\n  domain[i0] = interval.floor(x0);\r\n  domain[i1] = interval.ceil(x1);\r\n  return domain;\r\n}\r\n","import {ticks} from \"d3-array\";\r\nimport {format, formatSpecifier} from \"d3-format\";\r\nimport nice from \"./nice.js\";\r\nimport {copy, transformer} from \"./continuous.js\";\r\nimport {initRange} from \"./init.js\";\r\n\r\nfunction transformLog(x) {\r\n  return Math.log(x);\r\n}\r\n\r\nfunction transformExp(x) {\r\n  return Math.exp(x);\r\n}\r\n\r\nfunction transformLogn(x) {\r\n  return -Math.log(-x);\r\n}\r\n\r\nfunction transformExpn(x) {\r\n  return -Math.exp(-x);\r\n}\r\n\r\nfunction pow10(x) {\r\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\r\n}\r\n\r\nfunction powp(base) {\r\n  return base === 10 ? pow10\r\n      : base === Math.E ? Math.exp\r\n      : x => Math.pow(base, x);\r\n}\r\n\r\nfunction logp(base) {\r\n  return base === Math.E ? Math.log\r\n      : base === 10 && Math.log10\r\n      || base === 2 && Math.log2\r\n      || (base = Math.log(base), x => Math.log(x) / base);\r\n}\r\n\r\nfunction reflect(f) {\r\n  return (x, k) => -f(-x, k);\r\n}\r\n\r\nexport function loggish(transform) {\r\n  const scale = transform(transformLog, transformExp);\r\n  const domain = scale.domain;\r\n  let base = 10;\r\n  let logs;\r\n  let pows;\r\n\r\n  function rescale() {\r\n    logs = logp(base), pows = powp(base);\r\n    if (domain()[0] < 0) {\r\n      logs = reflect(logs), pows = reflect(pows);\r\n      transform(transformLogn, transformExpn);\r\n    } else {\r\n      transform(transformLog, transformExp);\r\n    }\r\n    return scale;\r\n  }\r\n\r\n  scale.base = function(_) {\r\n    return arguments.length ? (base = +_, rescale()) : base;\r\n  };\r\n\r\n  scale.domain = function(_) {\r\n    return arguments.length ? (domain(_), rescale()) : domain();\r\n  };\r\n\r\n  scale.ticks = count => {\r\n    const d = domain();\r\n    let u = d[0];\r\n    let v = d[d.length - 1];\r\n    const r = v < u;\r\n\r\n    if (r) ([u, v] = [v, u]);\r\n\r\n    let i = logs(u);\r\n    let j = logs(v);\r\n    let k;\r\n    let t;\r\n    const n = count == null ? 10 : +count;\r\n    let z = [];\r\n\r\n    if (!(base % 1) && j - i < n) {\r\n      i = Math.floor(i), j = Math.ceil(j);\r\n      if (u > 0) for (; i <= j; ++i) {\r\n        for (k = 1; k < base; ++k) {\r\n          t = i < 0 ? k / pows(-i) : k * pows(i);\r\n          if (t < u) continue;\r\n          if (t > v) break;\r\n          z.push(t);\r\n        }\r\n      } else for (; i <= j; ++i) {\r\n        for (k = base - 1; k >= 1; --k) {\r\n          t = i > 0 ? k / pows(-i) : k * pows(i);\r\n          if (t < u) continue;\r\n          if (t > v) break;\r\n          z.push(t);\r\n        }\r\n      }\r\n      if (z.length * 2 < n) z = ticks(u, v, n);\r\n    } else {\r\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\r\n    }\r\n    return r ? z.reverse() : z;\r\n  };\r\n\r\n  scale.tickFormat = (count, specifier) => {\r\n    if (count == null) count = 10;\r\n    if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\r\n    if (typeof specifier !== \"function\") {\r\n      if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\r\n      specifier = format(specifier);\r\n    }\r\n    if (count === Infinity) return specifier;\r\n    const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\r\n    return d => {\r\n      let i = d / pows(Math.round(logs(d)));\r\n      if (i * base < base - 0.5) i *= base;\r\n      return i <= k ? specifier(d) : \"\";\r\n    };\r\n  };\r\n\r\n  scale.nice = () => {\r\n    return domain(nice(domain(), {\r\n      floor: x => pows(Math.floor(logs(x))),\r\n      ceil: x => pows(Math.ceil(logs(x)))\r\n    }));\r\n  };\r\n\r\n  return scale;\r\n}\r\n\r\nexport default function log() {\r\n  const scale = loggish(transformer()).domain([1, 10]);\r\n  scale.copy = () => copy(scale, log()).base(scale.base());\r\n  initRange.apply(scale, arguments);\r\n  return scale;\r\n}\r\n","import {linearish} from \"./linear.js\";\r\nimport {copy, transformer} from \"./continuous.js\";\r\nimport {initRange} from \"./init.js\";\r\n\r\nfunction transformSymlog(c) {\r\n  return function(x) {\r\n    return Math.sign(x) * Math.log1p(Math.abs(x / c));\r\n  };\r\n}\r\n\r\nfunction transformSymexp(c) {\r\n  return function(x) {\r\n    return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\r\n  };\r\n}\r\n\r\nexport function symlogish(transform) {\r\n  var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\r\n\r\n  scale.constant = function(_) {\r\n    return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\r\n  };\r\n\r\n  return linearish(scale);\r\n}\r\n\r\nexport default function symlog() {\r\n  var scale = symlogish(transformer());\r\n\r\n  scale.copy = function() {\r\n    return copy(scale, symlog()).constant(scale.constant());\r\n  };\r\n\r\n  return initRange.apply(scale, arguments);\r\n}\r\n","import {linearish} from \"./linear.js\";\r\nimport {copy, identity, transformer} from \"./continuous.js\";\r\nimport {initRange} from \"./init.js\";\r\n\r\nfunction transformPow(exponent) {\r\n  return function(x) {\r\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\r\n  };\r\n}\r\n\r\nfunction transformSqrt(x) {\r\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\r\n}\r\n\r\nfunction transformSquare(x) {\r\n  return x < 0 ? -x * x : x * x;\r\n}\r\n\r\nexport function powish(transform) {\r\n  var scale = transform(identity, identity),\r\n      exponent = 1;\r\n\r\n  function rescale() {\r\n    return exponent === 1 ? transform(identity, identity)\r\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\r\n        : transform(transformPow(exponent), transformPow(1 / exponent));\r\n  }\r\n\r\n  scale.exponent = function(_) {\r\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\r\n  };\r\n\r\n  return linearish(scale);\r\n}\r\n\r\nexport default function pow() {\r\n  var scale = powish(transformer());\r\n\r\n  scale.copy = function() {\r\n    return copy(scale, pow()).exponent(scale.exponent());\r\n  };\r\n\r\n  initRange.apply(scale, arguments);\r\n\r\n  return scale;\r\n}\r\n\r\nexport function sqrt() {\r\n  return pow.apply(null, arguments).exponent(0.5);\r\n}\r\n","import continuous from \"./continuous.js\";\r\nimport {initRange} from \"./init.js\";\r\nimport {linearish} from \"./linear.js\";\r\nimport number from \"./number.js\";\r\n\r\nfunction square(x) {\r\n  return Math.sign(x) * x * x;\r\n}\r\n\r\nfunction unsquare(x) {\r\n  return Math.sign(x) * Math.sqrt(Math.abs(x));\r\n}\r\n\r\nexport default function radial() {\r\n  var squared = continuous(),\r\n      range = [0, 1],\r\n      round = false,\r\n      unknown;\r\n\r\n  function scale(x) {\r\n    var y = unsquare(squared(x));\r\n    return isNaN(y) ? unknown : round ? Math.round(y) : y;\r\n  }\r\n\r\n  scale.invert = function(y) {\r\n    return squared.invert(square(y));\r\n  };\r\n\r\n  scale.domain = function(_) {\r\n    return arguments.length ? (squared.domain(_), scale) : squared.domain();\r\n  };\r\n\r\n  scale.range = function(_) {\r\n    return arguments.length ? (squared.range((range = Array.from(_, number)).map(square)), scale) : range.slice();\r\n  };\r\n\r\n  scale.rangeRound = function(_) {\r\n    return scale.range(_).round(true);\r\n  };\r\n\r\n  scale.round = function(_) {\r\n    return arguments.length ? (round = !!_, scale) : round;\r\n  };\r\n\r\n  scale.clamp = function(_) {\r\n    return arguments.length ? (squared.clamp(_), scale) : squared.clamp();\r\n  };\r\n\r\n  scale.unknown = function(_) {\r\n    return arguments.length ? (unknown = _, scale) : unknown;\r\n  };\r\n\r\n  scale.copy = function() {\r\n    return radial(squared.domain(), range)\r\n        .round(round)\r\n        .clamp(squared.clamp())\r\n        .unknown(unknown);\r\n  };\r\n\r\n  initRange.apply(scale, arguments);\r\n\r\n  return linearish(scale);\r\n}\r\n","const t0 = new Date, t1 = new Date;\r\n\r\nexport function timeInterval(floori, offseti, count, field) {\r\n\r\n  function interval(date) {\r\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\r\n  }\r\n\r\n  interval.floor = (date) => {\r\n    return floori(date = new Date(+date)), date;\r\n  };\r\n\r\n  interval.ceil = (date) => {\r\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\r\n  };\r\n\r\n  interval.round = (date) => {\r\n    const d0 = interval(date), d1 = interval.ceil(date);\r\n    return date - d0 < d1 - date ? d0 : d1;\r\n  };\r\n\r\n  interval.offset = (date, step) => {\r\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\r\n  };\r\n\r\n  interval.range = (start, stop, step) => {\r\n    const range = [];\r\n    start = interval.ceil(start);\r\n    step = step == null ? 1 : Math.floor(step);\r\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\r\n    let previous;\r\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\r\n    while (previous < start && start < stop);\r\n    return range;\r\n  };\r\n\r\n  interval.filter = (test) => {\r\n    return timeInterval((date) => {\r\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\r\n    }, (date, step) => {\r\n      if (date >= date) {\r\n        if (step < 0) while (++step <= 0) {\r\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\r\n        } else while (--step >= 0) {\r\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\r\n        }\r\n      }\r\n    });\r\n  };\r\n\r\n  if (count) {\r\n    interval.count = (start, end) => {\r\n      t0.setTime(+start), t1.setTime(+end);\r\n      floori(t0), floori(t1);\r\n      return Math.floor(count(t0, t1));\r\n    };\r\n\r\n    interval.every = (step) => {\r\n      step = Math.floor(step);\r\n      return !isFinite(step) || !(step > 0) ? null\r\n          : !(step > 1) ? interval\r\n          : interval.filter(field\r\n              ? (d) => field(d) % step === 0\r\n              : (d) => interval.count(0, d) % step === 0);\r\n    };\r\n  }\r\n\r\n  return interval;\r\n}\r\n","import {timeInterval} from \"./interval.js\";\r\n\r\nexport const millisecond = timeInterval(() => {\r\n  // noop\r\n}, (date, step) => {\r\n  date.setTime(+date + step);\r\n}, (start, end) => {\r\n  return end - start;\r\n});\r\n\r\n// An optimized implementation for this simple case.\r\nmillisecond.every = (k) => {\r\n  k = Math.floor(k);\r\n  if (!isFinite(k) || !(k > 0)) return null;\r\n  if (!(k > 1)) return millisecond;\r\n  return timeInterval((date) => {\r\n    date.setTime(Math.floor(date / k) * k);\r\n  }, (date, step) => {\r\n    date.setTime(+date + step * k);\r\n  }, (start, end) => {\r\n    return (end - start) / k;\r\n  });\r\n};\r\n\r\nexport const milliseconds = millisecond.range;\r\n","export const durationSecond = 1000;\r\nexport const durationMinute = durationSecond * 60;\r\nexport const durationHour = durationMinute * 60;\r\nexport const durationDay = durationHour * 24;\r\nexport const durationWeek = durationDay * 7;\r\nexport const durationMonth = durationDay * 30;\r\nexport const durationYear = durationDay * 365;\r\n","import {timeInterval} from \"./interval.js\";\r\nimport {durationSecond} from \"./duration.js\";\r\n\r\nexport const second = timeInterval((date) => {\r\n  date.setTime(date - date.getMilliseconds());\r\n}, (date, step) => {\r\n  date.setTime(+date + step * durationSecond);\r\n}, (start, end) => {\r\n  return (end - start) / durationSecond;\r\n}, (date) => {\r\n  return date.getUTCSeconds();\r\n});\r\n\r\nexport const seconds = second.range;\r\n","import {timeInterval} from \"./interval.js\";\r\nimport {durationMinute, durationSecond} from \"./duration.js\";\r\n\r\nexport const timeMinute = timeInterval((date) => {\r\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\r\n}, (date, step) => {\r\n  date.setTime(+date + step * durationMinute);\r\n}, (start, end) => {\r\n  return (end - start) / durationMinute;\r\n}, (date) => {\r\n  return date.getMinutes();\r\n});\r\n\r\nexport const timeMinutes = timeMinute.range;\r\n\r\nexport const utcMinute = timeInterval((date) => {\r\n  date.setUTCSeconds(0, 0);\r\n}, (date, step) => {\r\n  date.setTime(+date + step * durationMinute);\r\n}, (start, end) => {\r\n  return (end - start) / durationMinute;\r\n}, (date) => {\r\n  return date.getUTCMinutes();\r\n});\r\n\r\nexport const utcMinutes = utcMinute.range;\r\n","import {timeInterval} from \"./interval.js\";\r\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\r\n\r\nexport const timeHour = timeInterval((date) => {\r\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\r\n}, (date, step) => {\r\n  date.setTime(+date + step * durationHour);\r\n}, (start, end) => {\r\n  return (end - start) / durationHour;\r\n}, (date) => {\r\n  return date.getHours();\r\n});\r\n\r\nexport const timeHours = timeHour.range;\r\n\r\nexport const utcHour = timeInterval((date) => {\r\n  date.setUTCMinutes(0, 0, 0);\r\n}, (date, step) => {\r\n  date.setTime(+date + step * durationHour);\r\n}, (start, end) => {\r\n  return (end - start) / durationHour;\r\n}, (date) => {\r\n  return date.getUTCHours();\r\n});\r\n\r\nexport const utcHours = utcHour.range;\r\n","import {timeInterval} from \"./interval.js\";\r\nimport {durationDay, durationMinute} from \"./duration.js\";\r\n\r\nexport const timeDay = timeInterval(\r\n  date => date.setHours(0, 0, 0, 0),\r\n  (date, step) => date.setDate(date.getDate() + step),\r\n  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\r\n  date => date.getDate() - 1\r\n);\r\n\r\nexport const timeDays = timeDay.range;\r\n\r\nexport const utcDay = timeInterval((date) => {\r\n  date.setUTCHours(0, 0, 0, 0);\r\n}, (date, step) => {\r\n  date.setUTCDate(date.getUTCDate() + step);\r\n}, (start, end) => {\r\n  return (end - start) / durationDay;\r\n}, (date) => {\r\n  return date.getUTCDate() - 1;\r\n});\r\n\r\nexport const utcDays = utcDay.range;\r\n\r\nexport const unixDay = timeInterval((date) => {\r\n  date.setUTCHours(0, 0, 0, 0);\r\n}, (date, step) => {\r\n  date.setUTCDate(date.getUTCDate() + step);\r\n}, (start, end) => {\r\n  return (end - start) / durationDay;\r\n}, (date) => {\r\n  return Math.floor(date / durationDay);\r\n});\r\n\r\nexport const unixDays = unixDay.range;\r\n","import {timeInterval} from \"./interval.js\";\r\nimport {durationMinute, durationWeek} from \"./duration.js\";\r\n\r\nfunction timeWeekday(i) {\r\n  return timeInterval((date) => {\r\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\r\n    date.setHours(0, 0, 0, 0);\r\n  }, (date, step) => {\r\n    date.setDate(date.getDate() + step * 7);\r\n  }, (start, end) => {\r\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\r\n  });\r\n}\r\n\r\nexport const timeSunday = timeWeekday(0);\r\nexport const timeMonday = timeWeekday(1);\r\nexport const timeTuesday = timeWeekday(2);\r\nexport const timeWednesday = timeWeekday(3);\r\nexport const timeThursday = timeWeekday(4);\r\nexport const timeFriday = timeWeekday(5);\r\nexport const timeSaturday = timeWeekday(6);\r\n\r\nexport const timeSundays = timeSunday.range;\r\nexport const timeMondays = timeMonday.range;\r\nexport const timeTuesdays = timeTuesday.range;\r\nexport const timeWednesdays = timeWednesday.range;\r\nexport const timeThursdays = timeThursday.range;\r\nexport const timeFridays = timeFriday.range;\r\nexport const timeSaturdays = timeSaturday.range;\r\n\r\nfunction utcWeekday(i) {\r\n  return timeInterval((date) => {\r\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\r\n    date.setUTCHours(0, 0, 0, 0);\r\n  }, (date, step) => {\r\n    date.setUTCDate(date.getUTCDate() + step * 7);\r\n  }, (start, end) => {\r\n    return (end - start) / durationWeek;\r\n  });\r\n}\r\n\r\nexport const utcSunday = utcWeekday(0);\r\nexport const utcMonday = utcWeekday(1);\r\nexport const utcTuesday = utcWeekday(2);\r\nexport const utcWednesday = utcWeekday(3);\r\nexport const utcThursday = utcWeekday(4);\r\nexport const utcFriday = utcWeekday(5);\r\nexport const utcSaturday = utcWeekday(6);\r\n\r\nexport const utcSundays = utcSunday.range;\r\nexport const utcMondays = utcMonday.range;\r\nexport const utcTuesdays = utcTuesday.range;\r\nexport const utcWednesdays = utcWednesday.range;\r\nexport const utcThursdays = utcThursday.range;\r\nexport const utcFridays = utcFriday.range;\r\nexport const utcSaturdays = utcSaturday.range;\r\n","import {timeInterval} from \"./interval.js\";\r\n\r\nexport const timeMonth = timeInterval((date) => {\r\n  date.setDate(1);\r\n  date.setHours(0, 0, 0, 0);\r\n}, (date, step) => {\r\n  date.setMonth(date.getMonth() + step);\r\n}, (start, end) => {\r\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\r\n}, (date) => {\r\n  return date.getMonth();\r\n});\r\n\r\nexport const timeMonths = timeMonth.range;\r\n\r\nexport const utcMonth = timeInterval((date) => {\r\n  date.setUTCDate(1);\r\n  date.setUTCHours(0, 0, 0, 0);\r\n}, (date, step) => {\r\n  date.setUTCMonth(date.getUTCMonth() + step);\r\n}, (start, end) => {\r\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\r\n}, (date) => {\r\n  return date.getUTCMonth();\r\n});\r\n\r\nexport const utcMonths = utcMonth.range;\r\n","import {timeInterval} from \"./interval.js\";\r\n\r\nexport const timeYear = timeInterval((date) => {\r\n  date.setMonth(0, 1);\r\n  date.setHours(0, 0, 0, 0);\r\n}, (date, step) => {\r\n  date.setFullYear(date.getFullYear() + step);\r\n}, (start, end) => {\r\n  return end.getFullYear() - start.getFullYear();\r\n}, (date) => {\r\n  return date.getFullYear();\r\n});\r\n\r\n// An optimized implementation for this simple case.\r\ntimeYear.every = (k) => {\r\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\r\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\r\n    date.setMonth(0, 1);\r\n    date.setHours(0, 0, 0, 0);\r\n  }, (date, step) => {\r\n    date.setFullYear(date.getFullYear() + step * k);\r\n  });\r\n};\r\n\r\nexport const timeYears = timeYear.range;\r\n\r\nexport const utcYear = timeInterval((date) => {\r\n  date.setUTCMonth(0, 1);\r\n  date.setUTCHours(0, 0, 0, 0);\r\n}, (date, step) => {\r\n  date.setUTCFullYear(date.getUTCFullYear() + step);\r\n}, (start, end) => {\r\n  return end.getUTCFullYear() - start.getUTCFullYear();\r\n}, (date) => {\r\n  return date.getUTCFullYear();\r\n});\r\n\r\n// An optimized implementation for this simple case.\r\nutcYear.every = (k) => {\r\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\r\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\r\n    date.setUTCMonth(0, 1);\r\n    date.setUTCHours(0, 0, 0, 0);\r\n  }, (date, step) => {\r\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\r\n  });\r\n};\r\n\r\nexport const utcYears = utcYear.range;\r\n","import {bisector, tickStep} from \"d3-array\";\r\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\r\nimport {millisecond} from \"./millisecond.js\";\r\nimport {second} from \"./second.js\";\r\nimport {timeMinute, utcMinute} from \"./minute.js\";\r\nimport {timeHour, utcHour} from \"./hour.js\";\r\nimport {timeDay, unixDay} from \"./day.js\";\r\nimport {timeSunday, utcSunday} from \"./week.js\";\r\nimport {timeMonth, utcMonth} from \"./month.js\";\r\nimport {timeYear, utcYear} from \"./year.js\";\r\n\r\nfunction ticker(year, month, week, day, hour, minute) {\r\n\r\n  const tickIntervals = [\r\n    [second,  1,      durationSecond],\r\n    [second,  5,  5 * durationSecond],\r\n    [second, 15, 15 * durationSecond],\r\n    [second, 30, 30 * durationSecond],\r\n    [minute,  1,      durationMinute],\r\n    [minute,  5,  5 * durationMinute],\r\n    [minute, 15, 15 * durationMinute],\r\n    [minute, 30, 30 * durationMinute],\r\n    [  hour,  1,      durationHour  ],\r\n    [  hour,  3,  3 * durationHour  ],\r\n    [  hour,  6,  6 * durationHour  ],\r\n    [  hour, 12, 12 * durationHour  ],\r\n    [   day,  1,      durationDay   ],\r\n    [   day,  2,  2 * durationDay   ],\r\n    [  week,  1,      durationWeek  ],\r\n    [ month,  1,      durationMonth ],\r\n    [ month,  3,  3 * durationMonth ],\r\n    [  year,  1,      durationYear  ]\r\n  ];\r\n\r\n  function ticks(start, stop, count) {\r\n    const reverse = stop < start;\r\n    if (reverse) [start, stop] = [stop, start];\r\n    const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\r\n    const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\r\n    return reverse ? ticks.reverse() : ticks;\r\n  }\r\n\r\n  function tickInterval(start, stop, count) {\r\n    const target = Math.abs(stop - start) / count;\r\n    const i = bisector(([,, step]) => step).right(tickIntervals, target);\r\n    if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\r\n    if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\r\n    const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\r\n    return t.every(step);\r\n  }\r\n\r\n  return [ticks, tickInterval];\r\n}\r\n\r\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\r\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\r\n\r\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\r\n","import {\r\n  timeDay,\r\n  timeSunday,\r\n  timeMonday,\r\n  timeThursday,\r\n  timeYear,\r\n  utcDay,\r\n  utcSunday,\r\n  utcMonday,\r\n  utcThursday,\r\n  utcYear\r\n} from \"d3-time\";\r\n\r\nfunction localDate(d) {\r\n  if (0 <= d.y && d.y < 100) {\r\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\r\n    date.setFullYear(d.y);\r\n    return date;\r\n  }\r\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\r\n}\r\n\r\nfunction utcDate(d) {\r\n  if (0 <= d.y && d.y < 100) {\r\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\r\n    date.setUTCFullYear(d.y);\r\n    return date;\r\n  }\r\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\r\n}\r\n\r\nfunction newDate(y, m, d) {\r\n  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\r\n}\r\n\r\nexport default function formatLocale(locale) {\r\n  var locale_dateTime = locale.dateTime,\r\n      locale_date = locale.date,\r\n      locale_time = locale.time,\r\n      locale_periods = locale.periods,\r\n      locale_weekdays = locale.days,\r\n      locale_shortWeekdays = locale.shortDays,\r\n      locale_months = locale.months,\r\n      locale_shortMonths = locale.shortMonths;\r\n\r\n  var periodRe = formatRe(locale_periods),\r\n      periodLookup = formatLookup(locale_periods),\r\n      weekdayRe = formatRe(locale_weekdays),\r\n      weekdayLookup = formatLookup(locale_weekdays),\r\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\r\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\r\n      monthRe = formatRe(locale_months),\r\n      monthLookup = formatLookup(locale_months),\r\n      shortMonthRe = formatRe(locale_shortMonths),\r\n      shortMonthLookup = formatLookup(locale_shortMonths);\r\n\r\n  var formats = {\r\n    \"a\": formatShortWeekday,\r\n    \"A\": formatWeekday,\r\n    \"b\": formatShortMonth,\r\n    \"B\": formatMonth,\r\n    \"c\": null,\r\n    \"d\": formatDayOfMonth,\r\n    \"e\": formatDayOfMonth,\r\n    \"f\": formatMicroseconds,\r\n    \"g\": formatYearISO,\r\n    \"G\": formatFullYearISO,\r\n    \"H\": formatHour24,\r\n    \"I\": formatHour12,\r\n    \"j\": formatDayOfYear,\r\n    \"L\": formatMilliseconds,\r\n    \"m\": formatMonthNumber,\r\n    \"M\": formatMinutes,\r\n    \"p\": formatPeriod,\r\n    \"q\": formatQuarter,\r\n    \"Q\": formatUnixTimestamp,\r\n    \"s\": formatUnixTimestampSeconds,\r\n    \"S\": formatSeconds,\r\n    \"u\": formatWeekdayNumberMonday,\r\n    \"U\": formatWeekNumberSunday,\r\n    \"V\": formatWeekNumberISO,\r\n    \"w\": formatWeekdayNumberSunday,\r\n    \"W\": formatWeekNumberMonday,\r\n    \"x\": null,\r\n    \"X\": null,\r\n    \"y\": formatYear,\r\n    \"Y\": formatFullYear,\r\n    \"Z\": formatZone,\r\n    \"%\": formatLiteralPercent\r\n  };\r\n\r\n  var utcFormats = {\r\n    \"a\": formatUTCShortWeekday,\r\n    \"A\": formatUTCWeekday,\r\n    \"b\": formatUTCShortMonth,\r\n    \"B\": formatUTCMonth,\r\n    \"c\": null,\r\n    \"d\": formatUTCDayOfMonth,\r\n    \"e\": formatUTCDayOfMonth,\r\n    \"f\": formatUTCMicroseconds,\r\n    \"g\": formatUTCYearISO,\r\n    \"G\": formatUTCFullYearISO,\r\n    \"H\": formatUTCHour24,\r\n    \"I\": formatUTCHour12,\r\n    \"j\": formatUTCDayOfYear,\r\n    \"L\": formatUTCMilliseconds,\r\n    \"m\": formatUTCMonthNumber,\r\n    \"M\": formatUTCMinutes,\r\n    \"p\": formatUTCPeriod,\r\n    \"q\": formatUTCQuarter,\r\n    \"Q\": formatUnixTimestamp,\r\n    \"s\": formatUnixTimestampSeconds,\r\n    \"S\": formatUTCSeconds,\r\n    \"u\": formatUTCWeekdayNumberMonday,\r\n    \"U\": formatUTCWeekNumberSunday,\r\n    \"V\": formatUTCWeekNumberISO,\r\n    \"w\": formatUTCWeekdayNumberSunday,\r\n    \"W\": formatUTCWeekNumberMonday,\r\n    \"x\": null,\r\n    \"X\": null,\r\n    \"y\": formatUTCYear,\r\n    \"Y\": formatUTCFullYear,\r\n    \"Z\": formatUTCZone,\r\n    \"%\": formatLiteralPercent\r\n  };\r\n\r\n  var parses = {\r\n    \"a\": parseShortWeekday,\r\n    \"A\": parseWeekday,\r\n    \"b\": parseShortMonth,\r\n    \"B\": parseMonth,\r\n    \"c\": parseLocaleDateTime,\r\n    \"d\": parseDayOfMonth,\r\n    \"e\": parseDayOfMonth,\r\n    \"f\": parseMicroseconds,\r\n    \"g\": parseYear,\r\n    \"G\": parseFullYear,\r\n    \"H\": parseHour24,\r\n    \"I\": parseHour24,\r\n    \"j\": parseDayOfYear,\r\n    \"L\": parseMilliseconds,\r\n    \"m\": parseMonthNumber,\r\n    \"M\": parseMinutes,\r\n    \"p\": parsePeriod,\r\n    \"q\": parseQuarter,\r\n    \"Q\": parseUnixTimestamp,\r\n    \"s\": parseUnixTimestampSeconds,\r\n    \"S\": parseSeconds,\r\n    \"u\": parseWeekdayNumberMonday,\r\n    \"U\": parseWeekNumberSunday,\r\n    \"V\": parseWeekNumberISO,\r\n    \"w\": parseWeekdayNumberSunday,\r\n    \"W\": parseWeekNumberMonday,\r\n    \"x\": parseLocaleDate,\r\n    \"X\": parseLocaleTime,\r\n    \"y\": parseYear,\r\n    \"Y\": parseFullYear,\r\n    \"Z\": parseZone,\r\n    \"%\": parseLiteralPercent\r\n  };\r\n\r\n  // These recursive directive definitions must be deferred.\r\n  formats.x = newFormat(locale_date, formats);\r\n  formats.X = newFormat(locale_time, formats);\r\n  formats.c = newFormat(locale_dateTime, formats);\r\n  utcFormats.x = newFormat(locale_date, utcFormats);\r\n  utcFormats.X = newFormat(locale_time, utcFormats);\r\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\r\n\r\n  function newFormat(specifier, formats) {\r\n    return function(date) {\r\n      var string = [],\r\n          i = -1,\r\n          j = 0,\r\n          n = specifier.length,\r\n          c,\r\n          pad,\r\n          format;\r\n\r\n      if (!(date instanceof Date)) date = new Date(+date);\r\n\r\n      while (++i < n) {\r\n        if (specifier.charCodeAt(i) === 37) {\r\n          string.push(specifier.slice(j, i));\r\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\r\n          else pad = c === \"e\" ? \" \" : \"0\";\r\n          if (format = formats[c]) c = format(date, pad);\r\n          string.push(c);\r\n          j = i + 1;\r\n        }\r\n      }\r\n\r\n      string.push(specifier.slice(j, i));\r\n      return string.join(\"\");\r\n    };\r\n  }\r\n\r\n  function newParse(specifier, Z) {\r\n    return function(string) {\r\n      var d = newDate(1900, undefined, 1),\r\n          i = parseSpecifier(d, specifier, string += \"\", 0),\r\n          week, day;\r\n      if (i != string.length) return null;\r\n\r\n      // If a UNIX timestamp is specified, return it.\r\n      if (\"Q\" in d) return new Date(d.Q);\r\n      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\r\n\r\n      // If this is utcParse, never use the local timezone.\r\n      if (Z && !(\"Z\" in d)) d.Z = 0;\r\n\r\n      // The am-pm flag is 0 for AM, and 1 for PM.\r\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\r\n\r\n      // If the month was not specified, inherit from the quarter.\r\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\r\n\r\n      // Convert day-of-week and week-of-year to day-of-year.\r\n      if (\"V\" in d) {\r\n        if (d.V < 1 || d.V > 53) return null;\r\n        if (!(\"w\" in d)) d.w = 1;\r\n        if (\"Z\" in d) {\r\n          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\r\n          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\r\n          week = utcDay.offset(week, (d.V - 1) * 7);\r\n          d.y = week.getUTCFullYear();\r\n          d.m = week.getUTCMonth();\r\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\r\n        } else {\r\n          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\r\n          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\r\n          week = timeDay.offset(week, (d.V - 1) * 7);\r\n          d.y = week.getFullYear();\r\n          d.m = week.getMonth();\r\n          d.d = week.getDate() + (d.w + 6) % 7;\r\n        }\r\n      } else if (\"W\" in d || \"U\" in d) {\r\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\r\n        day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\r\n        d.m = 0;\r\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\r\n      }\r\n\r\n      // If a time zone is specified, all fields are interpreted as UTC and then\r\n      // offset according to the specified time zone.\r\n      if (\"Z\" in d) {\r\n        d.H += d.Z / 100 | 0;\r\n        d.M += d.Z % 100;\r\n        return utcDate(d);\r\n      }\r\n\r\n      // Otherwise, all fields are in local time.\r\n      return localDate(d);\r\n    };\r\n  }\r\n\r\n  function parseSpecifier(d, specifier, string, j) {\r\n    var i = 0,\r\n        n = specifier.length,\r\n        m = string.length,\r\n        c,\r\n        parse;\r\n\r\n    while (i < n) {\r\n      if (j >= m) return -1;\r\n      c = specifier.charCodeAt(i++);\r\n      if (c === 37) {\r\n        c = specifier.charAt(i++);\r\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\r\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\r\n      } else if (c != string.charCodeAt(j++)) {\r\n        return -1;\r\n      }\r\n    }\r\n\r\n    return j;\r\n  }\r\n\r\n  function parsePeriod(d, string, i) {\r\n    var n = periodRe.exec(string.slice(i));\r\n    return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\r\n  }\r\n\r\n  function parseShortWeekday(d, string, i) {\r\n    var n = shortWeekdayRe.exec(string.slice(i));\r\n    return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\r\n  }\r\n\r\n  function parseWeekday(d, string, i) {\r\n    var n = weekdayRe.exec(string.slice(i));\r\n    return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\r\n  }\r\n\r\n  function parseShortMonth(d, string, i) {\r\n    var n = shortMonthRe.exec(string.slice(i));\r\n    return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\r\n  }\r\n\r\n  function parseMonth(d, string, i) {\r\n    var n = monthRe.exec(string.slice(i));\r\n    return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\r\n  }\r\n\r\n  function parseLocaleDateTime(d, string, i) {\r\n    return parseSpecifier(d, locale_dateTime, string, i);\r\n  }\r\n\r\n  function parseLocaleDate(d, string, i) {\r\n    return parseSpecifier(d, locale_date, string, i);\r\n  }\r\n\r\n  function parseLocaleTime(d, string, i) {\r\n    return parseSpecifier(d, locale_time, string, i);\r\n  }\r\n\r\n  function formatShortWeekday(d) {\r\n    return locale_shortWeekdays[d.getDay()];\r\n  }\r\n\r\n  function formatWeekday(d) {\r\n    return locale_weekdays[d.getDay()];\r\n  }\r\n\r\n  function formatShortMonth(d) {\r\n    return locale_shortMonths[d.getMonth()];\r\n  }\r\n\r\n  function formatMonth(d) {\r\n    return locale_months[d.getMonth()];\r\n  }\r\n\r\n  function formatPeriod(d) {\r\n    return locale_periods[+(d.getHours() >= 12)];\r\n  }\r\n\r\n  function formatQuarter(d) {\r\n    return 1 + ~~(d.getMonth() / 3);\r\n  }\r\n\r\n  function formatUTCShortWeekday(d) {\r\n    return locale_shortWeekdays[d.getUTCDay()];\r\n  }\r\n\r\n  function formatUTCWeekday(d) {\r\n    return locale_weekdays[d.getUTCDay()];\r\n  }\r\n\r\n  function formatUTCShortMonth(d) {\r\n    return locale_shortMonths[d.getUTCMonth()];\r\n  }\r\n\r\n  function formatUTCMonth(d) {\r\n    return locale_months[d.getUTCMonth()];\r\n  }\r\n\r\n  function formatUTCPeriod(d) {\r\n    return locale_periods[+(d.getUTCHours() >= 12)];\r\n  }\r\n\r\n  function formatUTCQuarter(d) {\r\n    return 1 + ~~(d.getUTCMonth() / 3);\r\n  }\r\n\r\n  return {\r\n    format: function(specifier) {\r\n      var f = newFormat(specifier += \"\", formats);\r\n      f.toString = function() { return specifier; };\r\n      return f;\r\n    },\r\n    parse: function(specifier) {\r\n      var p = newParse(specifier += \"\", false);\r\n      p.toString = function() { return specifier; };\r\n      return p;\r\n    },\r\n    utcFormat: function(specifier) {\r\n      var f = newFormat(specifier += \"\", utcFormats);\r\n      f.toString = function() { return specifier; };\r\n      return f;\r\n    },\r\n    utcParse: function(specifier) {\r\n      var p = newParse(specifier += \"\", true);\r\n      p.toString = function() { return specifier; };\r\n      return p;\r\n    }\r\n  };\r\n}\r\n\r\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\r\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\r\n    percentRe = /^%/,\r\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\r\n\r\nfunction pad(value, fill, width) {\r\n  var sign = value < 0 ? \"-\" : \"\",\r\n      string = (sign ? -value : value) + \"\",\r\n      length = string.length;\r\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\r\n}\r\n\r\nfunction requote(s) {\r\n  return s.replace(requoteRe, \"\\\\$&\");\r\n}\r\n\r\nfunction formatRe(names) {\r\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\r\n}\r\n\r\nfunction formatLookup(names) {\r\n  return new Map(names.map((name, i) => [name.toLowerCase(), i]));\r\n}\r\n\r\nfunction parseWeekdayNumberSunday(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i, i + 1));\r\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseWeekdayNumberMonday(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i, i + 1));\r\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseWeekNumberSunday(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i, i + 2));\r\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseWeekNumberISO(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i, i + 2));\r\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseWeekNumberMonday(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i, i + 2));\r\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseFullYear(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i, i + 4));\r\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseYear(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i, i + 2));\r\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseZone(d, string, i) {\r\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\r\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseQuarter(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i, i + 1));\r\n  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseMonthNumber(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i, i + 2));\r\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseDayOfMonth(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i, i + 2));\r\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseDayOfYear(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i, i + 3));\r\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseHour24(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i, i + 2));\r\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseMinutes(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i, i + 2));\r\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseSeconds(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i, i + 2));\r\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseMilliseconds(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i, i + 3));\r\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseMicroseconds(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i, i + 6));\r\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseLiteralPercent(d, string, i) {\r\n  var n = percentRe.exec(string.slice(i, i + 1));\r\n  return n ? i + n[0].length : -1;\r\n}\r\n\r\nfunction parseUnixTimestamp(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i));\r\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\r\n}\r\n\r\nfunction parseUnixTimestampSeconds(d, string, i) {\r\n  var n = numberRe.exec(string.slice(i));\r\n  return n ? (d.s = +n[0], i + n[0].length) : -1;\r\n}\r\n\r\nfunction formatDayOfMonth(d, p) {\r\n  return pad(d.getDate(), p, 2);\r\n}\r\n\r\nfunction formatHour24(d, p) {\r\n  return pad(d.getHours(), p, 2);\r\n}\r\n\r\nfunction formatHour12(d, p) {\r\n  return pad(d.getHours() % 12 || 12, p, 2);\r\n}\r\n\r\nfunction formatDayOfYear(d, p) {\r\n  return pad(1 + timeDay.count(timeYear(d), d), p, 3);\r\n}\r\n\r\nfunction formatMilliseconds(d, p) {\r\n  return pad(d.getMilliseconds(), p, 3);\r\n}\r\n\r\nfunction formatMicroseconds(d, p) {\r\n  return formatMilliseconds(d, p) + \"000\";\r\n}\r\n\r\nfunction formatMonthNumber(d, p) {\r\n  return pad(d.getMonth() + 1, p, 2);\r\n}\r\n\r\nfunction formatMinutes(d, p) {\r\n  return pad(d.getMinutes(), p, 2);\r\n}\r\n\r\nfunction formatSeconds(d, p) {\r\n  return pad(d.getSeconds(), p, 2);\r\n}\r\n\r\nfunction formatWeekdayNumberMonday(d) {\r\n  var day = d.getDay();\r\n  return day === 0 ? 7 : day;\r\n}\r\n\r\nfunction formatWeekNumberSunday(d, p) {\r\n  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\r\n}\r\n\r\nfunction dISO(d) {\r\n  var day = d.getDay();\r\n  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\r\n}\r\n\r\nfunction formatWeekNumberISO(d, p) {\r\n  d = dISO(d);\r\n  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\r\n}\r\n\r\nfunction formatWeekdayNumberSunday(d) {\r\n  return d.getDay();\r\n}\r\n\r\nfunction formatWeekNumberMonday(d, p) {\r\n  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\r\n}\r\n\r\nfunction formatYear(d, p) {\r\n  return pad(d.getFullYear() % 100, p, 2);\r\n}\r\n\r\nfunction formatYearISO(d, p) {\r\n  d = dISO(d);\r\n  return pad(d.getFullYear() % 100, p, 2);\r\n}\r\n\r\nfunction formatFullYear(d, p) {\r\n  return pad(d.getFullYear() % 10000, p, 4);\r\n}\r\n\r\nfunction formatFullYearISO(d, p) {\r\n  var day = d.getDay();\r\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\r\n  return pad(d.getFullYear() % 10000, p, 4);\r\n}\r\n\r\nfunction formatZone(d) {\r\n  var z = d.getTimezoneOffset();\r\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\r\n      + pad(z / 60 | 0, \"0\", 2)\r\n      + pad(z % 60, \"0\", 2);\r\n}\r\n\r\nfunction formatUTCDayOfMonth(d, p) {\r\n  return pad(d.getUTCDate(), p, 2);\r\n}\r\n\r\nfunction formatUTCHour24(d, p) {\r\n  return pad(d.getUTCHours(), p, 2);\r\n}\r\n\r\nfunction formatUTCHour12(d, p) {\r\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\r\n}\r\n\r\nfunction formatUTCDayOfYear(d, p) {\r\n  return pad(1 + utcDay.count(utcYear(d), d), p, 3);\r\n}\r\n\r\nfunction formatUTCMilliseconds(d, p) {\r\n  return pad(d.getUTCMilliseconds(), p, 3);\r\n}\r\n\r\nfunction formatUTCMicroseconds(d, p) {\r\n  return formatUTCMilliseconds(d, p) + \"000\";\r\n}\r\n\r\nfunction formatUTCMonthNumber(d, p) {\r\n  return pad(d.getUTCMonth() + 1, p, 2);\r\n}\r\n\r\nfunction formatUTCMinutes(d, p) {\r\n  return pad(d.getUTCMinutes(), p, 2);\r\n}\r\n\r\nfunction formatUTCSeconds(d, p) {\r\n  return pad(d.getUTCSeconds(), p, 2);\r\n}\r\n\r\nfunction formatUTCWeekdayNumberMonday(d) {\r\n  var dow = d.getUTCDay();\r\n  return dow === 0 ? 7 : dow;\r\n}\r\n\r\nfunction formatUTCWeekNumberSunday(d, p) {\r\n  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\r\n}\r\n\r\nfunction UTCdISO(d) {\r\n  var day = d.getUTCDay();\r\n  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\r\n}\r\n\r\nfunction formatUTCWeekNumberISO(d, p) {\r\n  d = UTCdISO(d);\r\n  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\r\n}\r\n\r\nfunction formatUTCWeekdayNumberSunday(d) {\r\n  return d.getUTCDay();\r\n}\r\n\r\nfunction formatUTCWeekNumberMonday(d, p) {\r\n  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\r\n}\r\n\r\nfunction formatUTCYear(d, p) {\r\n  return pad(d.getUTCFullYear() % 100, p, 2);\r\n}\r\n\r\nfunction formatUTCYearISO(d, p) {\r\n  d = UTCdISO(d);\r\n  return pad(d.getUTCFullYear() % 100, p, 2);\r\n}\r\n\r\nfunction formatUTCFullYear(d, p) {\r\n  return pad(d.getUTCFullYear() % 10000, p, 4);\r\n}\r\n\r\nfunction formatUTCFullYearISO(d, p) {\r\n  var day = d.getUTCDay();\r\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\r\n  return pad(d.getUTCFullYear() % 10000, p, 4);\r\n}\r\n\r\nfunction formatUTCZone() {\r\n  return \"+0000\";\r\n}\r\n\r\nfunction formatLiteralPercent() {\r\n  return \"%\";\r\n}\r\n\r\nfunction formatUnixTimestamp(d) {\r\n  return +d;\r\n}\r\n\r\nfunction formatUnixTimestampSeconds(d) {\r\n  return Math.floor(+d / 1000);\r\n}\r\n","import formatLocale from \"./locale.js\";\r\n\r\nvar locale;\r\nexport var timeFormat;\r\nexport var timeParse;\r\nexport var utcFormat;\r\nexport var utcParse;\r\n\r\ndefaultLocale({\r\n  dateTime: \"%x, %X\",\r\n  date: \"%-m/%-d/%Y\",\r\n  time: \"%-I:%M:%S %p\",\r\n  periods: [\"AM\", \"PM\"],\r\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\r\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\r\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\r\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\r\n});\r\n\r\nexport default function defaultLocale(definition) {\r\n  locale = formatLocale(definition);\r\n  timeFormat = locale.format;\r\n  timeParse = locale.parse;\r\n  utcFormat = locale.utcFormat;\r\n  utcParse = locale.utcParse;\r\n  return locale;\r\n}\r\n","import {utcFormat} from \"./defaultLocale.js\";\r\n\r\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\r\n\r\nfunction formatIsoNative(date) {\r\n  return date.toISOString();\r\n}\r\n\r\nvar formatIso = Date.prototype.toISOString\r\n    ? formatIsoNative\r\n    : utcFormat(isoSpecifier);\r\n\r\nexport default formatIso;\r\n","import {isoSpecifier} from \"./isoFormat.js\";\r\nimport {utcParse} from \"./defaultLocale.js\";\r\n\r\nfunction parseIsoNative(string) {\r\n  var date = new Date(string);\r\n  return isNaN(date) ? null : date;\r\n}\r\n\r\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\r\n    ? parseIsoNative\r\n    : utcParse(isoSpecifier);\r\n\r\nexport default parseIso;\r\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\r\nimport {timeFormat} from \"d3-time-format\";\r\nimport continuous, {copy} from \"./continuous.js\";\r\nimport {initRange} from \"./init.js\";\r\nimport nice from \"./nice.js\";\r\n\r\nfunction date(t) {\r\n  return new Date(t);\r\n}\r\n\r\nfunction number(t) {\r\n  return t instanceof Date ? +t : +new Date(+t);\r\n}\r\n\r\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\r\n  var scale = continuous(),\r\n      invert = scale.invert,\r\n      domain = scale.domain;\r\n\r\n  var formatMillisecond = format(\".%L\"),\r\n      formatSecond = format(\":%S\"),\r\n      formatMinute = format(\"%I:%M\"),\r\n      formatHour = format(\"%I %p\"),\r\n      formatDay = format(\"%a %d\"),\r\n      formatWeek = format(\"%b %d\"),\r\n      formatMonth = format(\"%B\"),\r\n      formatYear = format(\"%Y\");\r\n\r\n  function tickFormat(date) {\r\n    return (second(date) < date ? formatMillisecond\r\n        : minute(date) < date ? formatSecond\r\n        : hour(date) < date ? formatMinute\r\n        : day(date) < date ? formatHour\r\n        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\r\n        : year(date) < date ? formatMonth\r\n        : formatYear)(date);\r\n  }\r\n\r\n  scale.invert = function(y) {\r\n    return new Date(invert(y));\r\n  };\r\n\r\n  scale.domain = function(_) {\r\n    return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\r\n  };\r\n\r\n  scale.ticks = function(interval) {\r\n    var d = domain();\r\n    return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\r\n  };\r\n\r\n  scale.tickFormat = function(count, specifier) {\r\n    return specifier == null ? tickFormat : format(specifier);\r\n  };\r\n\r\n  scale.nice = function(interval) {\r\n    var d = domain();\r\n    if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\r\n    return interval ? domain(nice(d, interval)) : scale;\r\n  };\r\n\r\n  scale.copy = function() {\r\n    return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\r\n  };\r\n\r\n  return scale;\r\n}\r\n\r\nexport default function time() {\r\n  return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\r\n}\r\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\r\nimport {identity} from \"./continuous.js\";\r\nimport {initInterpolator} from \"./init.js\";\r\nimport {linearish} from \"./linear.js\";\r\nimport {loggish} from \"./log.js\";\r\nimport {symlogish} from \"./symlog.js\";\r\nimport {powish} from \"./pow.js\";\r\n\r\nfunction transformer() {\r\n  var x0 = 0,\r\n      x1 = 1,\r\n      t0,\r\n      t1,\r\n      k10,\r\n      transform,\r\n      interpolator = identity,\r\n      clamp = false,\r\n      unknown;\r\n\r\n  function scale(x) {\r\n    return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\r\n  }\r\n\r\n  scale.domain = function(_) {\r\n    return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\r\n  };\r\n\r\n  scale.clamp = function(_) {\r\n    return arguments.length ? (clamp = !!_, scale) : clamp;\r\n  };\r\n\r\n  scale.interpolator = function(_) {\r\n    return arguments.length ? (interpolator = _, scale) : interpolator;\r\n  };\r\n\r\n  function range(interpolate) {\r\n    return function(_) {\r\n      var r0, r1;\r\n      return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\r\n    };\r\n  }\r\n\r\n  scale.range = range(interpolate);\r\n\r\n  scale.rangeRound = range(interpolateRound);\r\n\r\n  scale.unknown = function(_) {\r\n    return arguments.length ? (unknown = _, scale) : unknown;\r\n  };\r\n\r\n  return function(t) {\r\n    transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\r\n    return scale;\r\n  };\r\n}\r\n\r\nexport function copy(source, target) {\r\n  return target\r\n      .domain(source.domain())\r\n      .interpolator(source.interpolator())\r\n      .clamp(source.clamp())\r\n      .unknown(source.unknown());\r\n}\r\n\r\nexport default function sequential() {\r\n  var scale = linearish(transformer()(identity));\r\n\r\n  scale.copy = function() {\r\n    return copy(scale, sequential());\r\n  };\r\n\r\n  return initInterpolator.apply(scale, arguments);\r\n}\r\n\r\nexport function sequentialLog() {\r\n  var scale = loggish(transformer()).domain([1, 10]);\r\n\r\n  scale.copy = function() {\r\n    return copy(scale, sequentialLog()).base(scale.base());\r\n  };\r\n\r\n  return initInterpolator.apply(scale, arguments);\r\n}\r\n\r\nexport function sequentialSymlog() {\r\n  var scale = symlogish(transformer());\r\n\r\n  scale.copy = function() {\r\n    return copy(scale, sequentialSymlog()).constant(scale.constant());\r\n  };\r\n\r\n  return initInterpolator.apply(scale, arguments);\r\n}\r\n\r\nexport function sequentialPow() {\r\n  var scale = powish(transformer());\r\n\r\n  scale.copy = function() {\r\n    return copy(scale, sequentialPow()).exponent(scale.exponent());\r\n  };\r\n\r\n  return initInterpolator.apply(scale, arguments);\r\n}\r\n\r\nexport function sequentialSqrt() {\r\n  return sequentialPow.apply(null, arguments).exponent(0.5);\r\n}\r\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\r\nimport {identity} from \"./continuous.js\";\r\nimport {initInterpolator} from \"./init.js\";\r\nimport {linearish} from \"./linear.js\";\r\nimport {loggish} from \"./log.js\";\r\nimport {copy} from \"./sequential.js\";\r\nimport {symlogish} from \"./symlog.js\";\r\nimport {powish} from \"./pow.js\";\r\n\r\nfunction transformer() {\r\n  var x0 = 0,\r\n      x1 = 0.5,\r\n      x2 = 1,\r\n      s = 1,\r\n      t0,\r\n      t1,\r\n      t2,\r\n      k10,\r\n      k21,\r\n      interpolator = identity,\r\n      transform,\r\n      clamp = false,\r\n      unknown;\r\n\r\n  function scale(x) {\r\n    return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\r\n  }\r\n\r\n  scale.domain = function(_) {\r\n    return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\r\n  };\r\n\r\n  scale.clamp = function(_) {\r\n    return arguments.length ? (clamp = !!_, scale) : clamp;\r\n  };\r\n\r\n  scale.interpolator = function(_) {\r\n    return arguments.length ? (interpolator = _, scale) : interpolator;\r\n  };\r\n\r\n  function range(interpolate) {\r\n    return function(_) {\r\n      var r0, r1, r2;\r\n      return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\r\n    };\r\n  }\r\n\r\n  scale.range = range(interpolate);\r\n\r\n  scale.rangeRound = range(interpolateRound);\r\n\r\n  scale.unknown = function(_) {\r\n    return arguments.length ? (unknown = _, scale) : unknown;\r\n  };\r\n\r\n  return function(t) {\r\n    transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\r\n    return scale;\r\n  };\r\n}\r\n\r\nexport default function diverging() {\r\n  var scale = linearish(transformer()(identity));\r\n\r\n  scale.copy = function() {\r\n    return copy(scale, diverging());\r\n  };\r\n\r\n  return initInterpolator.apply(scale, arguments);\r\n}\r\n\r\nexport function divergingLog() {\r\n  var scale = loggish(transformer()).domain([0.1, 1, 10]);\r\n\r\n  scale.copy = function() {\r\n    return copy(scale, divergingLog()).base(scale.base());\r\n  };\r\n\r\n  return initInterpolator.apply(scale, arguments);\r\n}\r\n\r\nexport function divergingSymlog() {\r\n  var scale = symlogish(transformer());\r\n\r\n  scale.copy = function() {\r\n    return copy(scale, divergingSymlog()).constant(scale.constant());\r\n  };\r\n\r\n  return initInterpolator.apply(scale, arguments);\r\n}\r\n\r\nexport function divergingPow() {\r\n  var scale = powish(transformer());\r\n\r\n  scale.copy = function() {\r\n    return copy(scale, divergingPow()).exponent(scale.exponent());\r\n  };\r\n\r\n  return initInterpolator.apply(scale, arguments);\r\n}\r\n\r\nexport function divergingSqrt() {\r\n  return divergingPow.apply(null, arguments).exponent(0.5);\r\n}\r\n","export default function(specifier) {\r\n  var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\r\n  while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\r\n  return colors;\r\n}\r\n","import colors from \"../colors.js\";\r\n\r\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\r\n","import colors from \"../colors.js\";\r\n\r\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\r\n","import colors from \"../colors.js\";\r\n\r\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\r\n","import colors from \"../colors.js\";\r\n\r\nexport default colors(\"4269d0efb118ff725c6cc5b03ca951ff8ab7a463f297bbf59c6b4e9498a0\");\r\n","import colors from \"../colors.js\";\r\n\r\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\r\n","import colors from \"../colors.js\";\r\n\r\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\r\n","import colors from \"../colors.js\";\r\n\r\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\r\n","import colors from \"../colors.js\";\r\n\r\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\r\n","import colors from \"../colors.js\";\r\n\r\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\r\n","import colors from \"../colors.js\";\r\n\r\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\r\n","import colors from \"../colors.js\";\r\n\r\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\r\n","import {interpolateRgbBasis} from \"d3-interpolate\";\r\n\r\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"d8b365f5f5f55ab4ac\",\r\n  \"a6611adfc27d80cdc1018571\",\r\n  \"a6611adfc27df5f5f580cdc1018571\",\r\n  \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\r\n  \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\r\n  \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\r\n  \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\r\n  \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\r\n  \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"af8dc3f7f7f77fbf7b\",\r\n  \"7b3294c2a5cfa6dba0008837\",\r\n  \"7b3294c2a5cff7f7f7a6dba0008837\",\r\n  \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\r\n  \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\r\n  \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\r\n  \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\r\n  \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\r\n  \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"e9a3c9f7f7f7a1d76a\",\r\n  \"d01c8bf1b6dab8e1864dac26\",\r\n  \"d01c8bf1b6daf7f7f7b8e1864dac26\",\r\n  \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\r\n  \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\r\n  \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\r\n  \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\r\n  \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\r\n  \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"998ec3f7f7f7f1a340\",\r\n  \"5e3c99b2abd2fdb863e66101\",\r\n  \"5e3c99b2abd2f7f7f7fdb863e66101\",\r\n  \"542788998ec3d8daebfee0b6f1a340b35806\",\r\n  \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\r\n  \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\r\n  \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\r\n  \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\r\n  \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"ef8a62f7f7f767a9cf\",\r\n  \"ca0020f4a58292c5de0571b0\",\r\n  \"ca0020f4a582f7f7f792c5de0571b0\",\r\n  \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\r\n  \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\r\n  \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\r\n  \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\r\n  \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\r\n  \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"ef8a62ffffff999999\",\r\n  \"ca0020f4a582bababa404040\",\r\n  \"ca0020f4a582ffffffbababa404040\",\r\n  \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\r\n  \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\r\n  \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\r\n  \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\r\n  \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\r\n  \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"fc8d59ffffbf91bfdb\",\r\n  \"d7191cfdae61abd9e92c7bb6\",\r\n  \"d7191cfdae61ffffbfabd9e92c7bb6\",\r\n  \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\r\n  \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\r\n  \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\r\n  \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\r\n  \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\r\n  \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"fc8d59ffffbf91cf60\",\r\n  \"d7191cfdae61a6d96a1a9641\",\r\n  \"d7191cfdae61ffffbfa6d96a1a9641\",\r\n  \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\r\n  \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\r\n  \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\r\n  \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\r\n  \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\r\n  \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"fc8d59ffffbf99d594\",\r\n  \"d7191cfdae61abdda42b83ba\",\r\n  \"d7191cfdae61ffffbfabdda42b83ba\",\r\n  \"d53e4ffc8d59fee08be6f59899d5943288bd\",\r\n  \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\r\n  \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\r\n  \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\r\n  \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\r\n  \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"e5f5f999d8c92ca25f\",\r\n  \"edf8fbb2e2e266c2a4238b45\",\r\n  \"edf8fbb2e2e266c2a42ca25f006d2c\",\r\n  \"edf8fbccece699d8c966c2a42ca25f006d2c\",\r\n  \"edf8fbccece699d8c966c2a441ae76238b45005824\",\r\n  \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\r\n  \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"e0ecf49ebcda8856a7\",\r\n  \"edf8fbb3cde38c96c688419d\",\r\n  \"edf8fbb3cde38c96c68856a7810f7c\",\r\n  \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\r\n  \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\r\n  \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\r\n  \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"e0f3dba8ddb543a2ca\",\r\n  \"f0f9e8bae4bc7bccc42b8cbe\",\r\n  \"f0f9e8bae4bc7bccc443a2ca0868ac\",\r\n  \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\r\n  \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\r\n  \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\r\n  \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"fee8c8fdbb84e34a33\",\r\n  \"fef0d9fdcc8afc8d59d7301f\",\r\n  \"fef0d9fdcc8afc8d59e34a33b30000\",\r\n  \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\r\n  \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\r\n  \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\r\n  \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"ece2f0a6bddb1c9099\",\r\n  \"f6eff7bdc9e167a9cf02818a\",\r\n  \"f6eff7bdc9e167a9cf1c9099016c59\",\r\n  \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\r\n  \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\r\n  \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\r\n  \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"ece7f2a6bddb2b8cbe\",\r\n  \"f1eef6bdc9e174a9cf0570b0\",\r\n  \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\r\n  \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\r\n  \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\r\n  \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\r\n  \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"e7e1efc994c7dd1c77\",\r\n  \"f1eef6d7b5d8df65b0ce1256\",\r\n  \"f1eef6d7b5d8df65b0dd1c77980043\",\r\n  \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\r\n  \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\r\n  \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\r\n  \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"fde0ddfa9fb5c51b8a\",\r\n  \"feebe2fbb4b9f768a1ae017e\",\r\n  \"feebe2fbb4b9f768a1c51b8a7a0177\",\r\n  \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\r\n  \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\r\n  \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\r\n  \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"edf8b17fcdbb2c7fb8\",\r\n  \"ffffcca1dab441b6c4225ea8\",\r\n  \"ffffcca1dab441b6c42c7fb8253494\",\r\n  \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\r\n  \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\r\n  \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\r\n  \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"f7fcb9addd8e31a354\",\r\n  \"ffffccc2e69978c679238443\",\r\n  \"ffffccc2e69978c67931a354006837\",\r\n  \"ffffccd9f0a3addd8e78c67931a354006837\",\r\n  \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\r\n  \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\r\n  \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"fff7bcfec44fd95f0e\",\r\n  \"ffffd4fed98efe9929cc4c02\",\r\n  \"ffffd4fed98efe9929d95f0e993404\",\r\n  \"ffffd4fee391fec44ffe9929d95f0e993404\",\r\n  \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\r\n  \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\r\n  \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"ffeda0feb24cf03b20\",\r\n  \"ffffb2fecc5cfd8d3ce31a1c\",\r\n  \"ffffb2fecc5cfd8d3cf03b20bd0026\",\r\n  \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\r\n  \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\r\n  \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\r\n  \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"deebf79ecae13182bd\",\r\n  \"eff3ffbdd7e76baed62171b5\",\r\n  \"eff3ffbdd7e76baed63182bd08519c\",\r\n  \"eff3ffc6dbef9ecae16baed63182bd08519c\",\r\n  \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\r\n  \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\r\n  \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"e5f5e0a1d99b31a354\",\r\n  \"edf8e9bae4b374c476238b45\",\r\n  \"edf8e9bae4b374c47631a354006d2c\",\r\n  \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\r\n  \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\r\n  \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\r\n  \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"f0f0f0bdbdbd636363\",\r\n  \"f7f7f7cccccc969696525252\",\r\n  \"f7f7f7cccccc969696636363252525\",\r\n  \"f7f7f7d9d9d9bdbdbd969696636363252525\",\r\n  \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\r\n  \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\r\n  \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"efedf5bcbddc756bb1\",\r\n  \"f2f0f7cbc9e29e9ac86a51a3\",\r\n  \"f2f0f7cbc9e29e9ac8756bb154278f\",\r\n  \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\r\n  \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\r\n  \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\r\n  \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"fee0d2fc9272de2d26\",\r\n  \"fee5d9fcae91fb6a4acb181d\",\r\n  \"fee5d9fcae91fb6a4ade2d26a50f15\",\r\n  \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\r\n  \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\r\n  \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\r\n  \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import colors from \"../colors.js\";\r\nimport ramp from \"../ramp.js\";\r\n\r\nexport var scheme = new Array(3).concat(\r\n  \"fee6cefdae6be6550d\",\r\n  \"feeddefdbe85fd8d3cd94701\",\r\n  \"feeddefdbe85fd8d3ce6550da63603\",\r\n  \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\r\n  \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\r\n  \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\r\n  \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\r\n).map(colors);\r\n\r\nexport default ramp(scheme);\r\n","import {cubehelix} from \"d3-color\";\r\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\r\n\r\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\r\n","import {cubehelix} from \"d3-color\";\r\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\r\n\r\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\r\n\r\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\r\n\r\nvar c = cubehelix();\r\n\r\nexport default function(t) {\r\n  if (t < 0 || t > 1) t -= Math.floor(t);\r\n  var ts = Math.abs(t - 0.5);\r\n  c.h = 360 * t - 100;\r\n  c.s = 1.5 - 1.5 * ts;\r\n  c.l = 0.8 - 0.9 * ts;\r\n  return c + \"\";\r\n}\r\n","import {rgb} from \"d3-color\";\r\n\r\nvar c = rgb(),\r\n    pi_1_3 = Math.PI / 3,\r\n    pi_2_3 = Math.PI * 2 / 3;\r\n\r\nexport default function(t) {\r\n  var x;\r\n  t = (0.5 - t) * Math.PI;\r\n  c.r = 255 * (x = Math.sin(t)) * x;\r\n  c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\r\n  c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\r\n  return c + \"\";\r\n}\r\n","import colors from \"../colors.js\";\r\n\r\nfunction ramp(range) {\r\n  var n = range.length;\r\n  return function(t) {\r\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\r\n  };\r\n}\r\n\r\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\r\n\r\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\r\n\r\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\r\n\r\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\r\n","export default function(x) {\r\n  return function constant() {\r\n    return x;\r\n  };\r\n}\r\n","export const abs = Math.abs;\r\nexport const atan2 = Math.atan2;\r\nexport const cos = Math.cos;\r\nexport const max = Math.max;\r\nexport const min = Math.min;\r\nexport const sin = Math.sin;\r\nexport const sqrt = Math.sqrt;\r\n\r\nexport const epsilon = 1e-12;\r\nexport const pi = Math.PI;\r\nexport const halfPi = pi / 2;\r\nexport const tau = 2 * pi;\r\n\r\nexport function acos(x) {\r\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\r\n}\r\n\r\nexport function asin(x) {\r\n  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\r\n}\r\n","import {Path} from \"d3-path\";\r\n\r\nexport function withPath(shape) {\r\n  let digits = 3;\r\n\r\n  shape.digits = function(_) {\r\n    if (!arguments.length) return digits;\r\n    if (_ == null) {\r\n      digits = null;\r\n    } else {\r\n      const d = Math.floor(_);\r\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\r\n      digits = d;\r\n    }\r\n    return shape;\r\n  };\r\n\r\n  return () => new Path(digits);\r\n}\r\n","import constant from \"./constant.js\";\r\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\r\nimport {withPath} from \"./path.js\";\r\n\r\nfunction arcInnerRadius(d) {\r\n  return d.innerRadius;\r\n}\r\n\r\nfunction arcOuterRadius(d) {\r\n  return d.outerRadius;\r\n}\r\n\r\nfunction arcStartAngle(d) {\r\n  return d.startAngle;\r\n}\r\n\r\nfunction arcEndAngle(d) {\r\n  return d.endAngle;\r\n}\r\n\r\nfunction arcPadAngle(d) {\r\n  return d && d.padAngle; // Note: optional!\r\n}\r\n\r\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\r\n  var x10 = x1 - x0, y10 = y1 - y0,\r\n      x32 = x3 - x2, y32 = y3 - y2,\r\n      t = y32 * x10 - x32 * y10;\r\n  if (t * t < epsilon) return;\r\n  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\r\n  return [x0 + t * x10, y0 + t * y10];\r\n}\r\n\r\n// Compute perpendicular offset line of length rc.\r\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\r\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\r\n  var x01 = x0 - x1,\r\n      y01 = y0 - y1,\r\n      lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\r\n      ox = lo * y01,\r\n      oy = -lo * x01,\r\n      x11 = x0 + ox,\r\n      y11 = y0 + oy,\r\n      x10 = x1 + ox,\r\n      y10 = y1 + oy,\r\n      x00 = (x11 + x10) / 2,\r\n      y00 = (y11 + y10) / 2,\r\n      dx = x10 - x11,\r\n      dy = y10 - y11,\r\n      d2 = dx * dx + dy * dy,\r\n      r = r1 - rc,\r\n      D = x11 * y10 - x10 * y11,\r\n      d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\r\n      cx0 = (D * dy - dx * d) / d2,\r\n      cy0 = (-D * dx - dy * d) / d2,\r\n      cx1 = (D * dy + dx * d) / d2,\r\n      cy1 = (-D * dx + dy * d) / d2,\r\n      dx0 = cx0 - x00,\r\n      dy0 = cy0 - y00,\r\n      dx1 = cx1 - x00,\r\n      dy1 = cy1 - y00;\r\n\r\n  // Pick the closer of the two intersection points.\r\n  // TODO Is there a faster way to determine which intersection to use?\r\n  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\r\n\r\n  return {\r\n    cx: cx0,\r\n    cy: cy0,\r\n    x01: -ox,\r\n    y01: -oy,\r\n    x11: cx0 * (r1 / r - 1),\r\n    y11: cy0 * (r1 / r - 1)\r\n  };\r\n}\r\n\r\nexport default function() {\r\n  var innerRadius = arcInnerRadius,\r\n      outerRadius = arcOuterRadius,\r\n      cornerRadius = constant(0),\r\n      padRadius = null,\r\n      startAngle = arcStartAngle,\r\n      endAngle = arcEndAngle,\r\n      padAngle = arcPadAngle,\r\n      context = null,\r\n      path = withPath(arc);\r\n\r\n  function arc() {\r\n    var buffer,\r\n        r,\r\n        r0 = +innerRadius.apply(this, arguments),\r\n        r1 = +outerRadius.apply(this, arguments),\r\n        a0 = startAngle.apply(this, arguments) - halfPi,\r\n        a1 = endAngle.apply(this, arguments) - halfPi,\r\n        da = abs(a1 - a0),\r\n        cw = a1 > a0;\r\n\r\n    if (!context) context = buffer = path();\r\n\r\n    // Ensure that the outer radius is always larger than the inner radius.\r\n    if (r1 < r0) r = r1, r1 = r0, r0 = r;\r\n\r\n    // Is it a point?\r\n    if (!(r1 > epsilon)) context.moveTo(0, 0);\r\n\r\n    // Or is it a circle or annulus?\r\n    else if (da > tau - epsilon) {\r\n      context.moveTo(r1 * cos(a0), r1 * sin(a0));\r\n      context.arc(0, 0, r1, a0, a1, !cw);\r\n      if (r0 > epsilon) {\r\n        context.moveTo(r0 * cos(a1), r0 * sin(a1));\r\n        context.arc(0, 0, r0, a1, a0, cw);\r\n      }\r\n    }\r\n\r\n    // Or is it a circular or annular sector?\r\n    else {\r\n      var a01 = a0,\r\n          a11 = a1,\r\n          a00 = a0,\r\n          a10 = a1,\r\n          da0 = da,\r\n          da1 = da,\r\n          ap = padAngle.apply(this, arguments) / 2,\r\n          rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\r\n          rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\r\n          rc0 = rc,\r\n          rc1 = rc,\r\n          t0,\r\n          t1;\r\n\r\n      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\r\n      if (rp > epsilon) {\r\n        var p0 = asin(rp / r0 * sin(ap)),\r\n            p1 = asin(rp / r1 * sin(ap));\r\n        if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\r\n        else da0 = 0, a00 = a10 = (a0 + a1) / 2;\r\n        if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\r\n        else da1 = 0, a01 = a11 = (a0 + a1) / 2;\r\n      }\r\n\r\n      var x01 = r1 * cos(a01),\r\n          y01 = r1 * sin(a01),\r\n          x10 = r0 * cos(a10),\r\n          y10 = r0 * sin(a10);\r\n\r\n      // Apply rounded corners?\r\n      if (rc > epsilon) {\r\n        var x11 = r1 * cos(a11),\r\n            y11 = r1 * sin(a11),\r\n            x00 = r0 * cos(a00),\r\n            y00 = r0 * sin(a00),\r\n            oc;\r\n\r\n        // Restrict the corner radius according to the sector angle. If this\r\n        // intersection fails, it’s probably because the arc is too small, so\r\n        // disable the corner radius entirely.\r\n        if (da < pi) {\r\n          if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\r\n            var ax = x01 - oc[0],\r\n                ay = y01 - oc[1],\r\n                bx = x11 - oc[0],\r\n                by = y11 - oc[1],\r\n                kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\r\n                lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\r\n            rc0 = min(rc, (r0 - lc) / (kc - 1));\r\n            rc1 = min(rc, (r1 - lc) / (kc + 1));\r\n          } else {\r\n            rc0 = rc1 = 0;\r\n          }\r\n        }\r\n      }\r\n\r\n      // Is the sector collapsed to a line?\r\n      if (!(da1 > epsilon)) context.moveTo(x01, y01);\r\n\r\n      // Does the sector’s outer ring have rounded corners?\r\n      else if (rc1 > epsilon) {\r\n        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\r\n        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\r\n\r\n        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\r\n\r\n        // Have the corners merged?\r\n        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\r\n\r\n        // Otherwise, draw the two corners and the ring.\r\n        else {\r\n          context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\r\n          context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\r\n          context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\r\n        }\r\n      }\r\n\r\n      // Or is the outer ring just a circular arc?\r\n      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\r\n\r\n      // Is there no inner ring, and it’s a circular sector?\r\n      // Or perhaps it’s an annular sector collapsed due to padding?\r\n      if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\r\n\r\n      // Does the sector’s inner ring (or point) have rounded corners?\r\n      else if (rc0 > epsilon) {\r\n        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\r\n        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\r\n\r\n        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\r\n\r\n        // Have the corners merged?\r\n        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\r\n\r\n        // Otherwise, draw the two corners and the ring.\r\n        else {\r\n          context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\r\n          context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\r\n          context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\r\n        }\r\n      }\r\n\r\n      // Or is the inner ring just a circular arc?\r\n      else context.arc(0, 0, r0, a10, a00, cw);\r\n    }\r\n\r\n    context.closePath();\r\n\r\n    if (buffer) return context = null, buffer + \"\" || null;\r\n  }\r\n\r\n  arc.centroid = function() {\r\n    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\r\n        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\r\n    return [cos(a) * r, sin(a) * r];\r\n  };\r\n\r\n  arc.innerRadius = function(_) {\r\n    return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\r\n  };\r\n\r\n  arc.outerRadius = function(_) {\r\n    return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\r\n  };\r\n\r\n  arc.cornerRadius = function(_) {\r\n    return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\r\n  };\r\n\r\n  arc.padRadius = function(_) {\r\n    return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\r\n  };\r\n\r\n  arc.startAngle = function(_) {\r\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\r\n  };\r\n\r\n  arc.endAngle = function(_) {\r\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\r\n  };\r\n\r\n  arc.padAngle = function(_) {\r\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\r\n  };\r\n\r\n  arc.context = function(_) {\r\n    return arguments.length ? ((context = _ == null ? null : _), arc) : context;\r\n  };\r\n\r\n  return arc;\r\n}\r\n","export var slice = Array.prototype.slice;\r\n\r\nexport default function(x) {\r\n  return typeof x === \"object\" && \"length\" in x\r\n    ? x // Array, TypedArray, NodeList, array-like\r\n    : Array.from(x); // Map, Set, iterable, string, or anything else\r\n}\r\n","function Linear(context) {\r\n  this._context = context;\r\n}\r\n\r\nLinear.prototype = {\r\n  areaStart: function() {\r\n    this._line = 0;\r\n  },\r\n  areaEnd: function() {\r\n    this._line = NaN;\r\n  },\r\n  lineStart: function() {\r\n    this._point = 0;\r\n  },\r\n  lineEnd: function() {\r\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\r\n    this._line = 1 - this._line;\r\n  },\r\n  point: function(x, y) {\r\n    x = +x, y = +y;\r\n    switch (this._point) {\r\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\r\n      case 1: this._point = 2; // falls through\r\n      default: this._context.lineTo(x, y); break;\r\n    }\r\n  }\r\n};\r\n\r\nexport default function(context) {\r\n  return new Linear(context);\r\n}\r\n","export function x(p) {\r\n  return p[0];\r\n}\r\n\r\nexport function y(p) {\r\n  return p[1];\r\n}\r\n","import array from \"./array.js\";\r\nimport constant from \"./constant.js\";\r\nimport curveLinear from \"./curve/linear.js\";\r\nimport {withPath} from \"./path.js\";\r\nimport {x as pointX, y as pointY} from \"./point.js\";\r\n\r\nexport default function(x, y) {\r\n  var defined = constant(true),\r\n      context = null,\r\n      curve = curveLinear,\r\n      output = null,\r\n      path = withPath(line);\r\n\r\n  x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\r\n  y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\r\n\r\n  function line(data) {\r\n    var i,\r\n        n = (data = array(data)).length,\r\n        d,\r\n        defined0 = false,\r\n        buffer;\r\n\r\n    if (context == null) output = curve(buffer = path());\r\n\r\n    for (i = 0; i <= n; ++i) {\r\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\r\n        if (defined0 = !defined0) output.lineStart();\r\n        else output.lineEnd();\r\n      }\r\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\r\n    }\r\n\r\n    if (buffer) return output = null, buffer + \"\" || null;\r\n  }\r\n\r\n  line.x = function(_) {\r\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\r\n  };\r\n\r\n  line.y = function(_) {\r\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\r\n  };\r\n\r\n  line.defined = function(_) {\r\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\r\n  };\r\n\r\n  line.curve = function(_) {\r\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\r\n  };\r\n\r\n  line.context = function(_) {\r\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\r\n  };\r\n\r\n  return line;\r\n}\r\n","import array from \"./array.js\";\r\nimport constant from \"./constant.js\";\r\nimport curveLinear from \"./curve/linear.js\";\r\nimport line from \"./line.js\";\r\nimport {withPath} from \"./path.js\";\r\nimport {x as pointX, y as pointY} from \"./point.js\";\r\n\r\nexport default function(x0, y0, y1) {\r\n  var x1 = null,\r\n      defined = constant(true),\r\n      context = null,\r\n      curve = curveLinear,\r\n      output = null,\r\n      path = withPath(area);\r\n\r\n  x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\r\n  y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\r\n  y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\r\n\r\n  function area(data) {\r\n    var i,\r\n        j,\r\n        k,\r\n        n = (data = array(data)).length,\r\n        d,\r\n        defined0 = false,\r\n        buffer,\r\n        x0z = new Array(n),\r\n        y0z = new Array(n);\r\n\r\n    if (context == null) output = curve(buffer = path());\r\n\r\n    for (i = 0; i <= n; ++i) {\r\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\r\n        if (defined0 = !defined0) {\r\n          j = i;\r\n          output.areaStart();\r\n          output.lineStart();\r\n        } else {\r\n          output.lineEnd();\r\n          output.lineStart();\r\n          for (k = i - 1; k >= j; --k) {\r\n            output.point(x0z[k], y0z[k]);\r\n          }\r\n          output.lineEnd();\r\n          output.areaEnd();\r\n        }\r\n      }\r\n      if (defined0) {\r\n        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\r\n        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\r\n      }\r\n    }\r\n\r\n    if (buffer) return output = null, buffer + \"\" || null;\r\n  }\r\n\r\n  function arealine() {\r\n    return line().defined(defined).curve(curve).context(context);\r\n  }\r\n\r\n  area.x = function(_) {\r\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\r\n  };\r\n\r\n  area.x0 = function(_) {\r\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\r\n  };\r\n\r\n  area.x1 = function(_) {\r\n    return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\r\n  };\r\n\r\n  area.y = function(_) {\r\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\r\n  };\r\n\r\n  area.y0 = function(_) {\r\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\r\n  };\r\n\r\n  area.y1 = function(_) {\r\n    return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\r\n  };\r\n\r\n  area.lineX0 =\r\n  area.lineY0 = function() {\r\n    return arealine().x(x0).y(y0);\r\n  };\r\n\r\n  area.lineY1 = function() {\r\n    return arealine().x(x0).y(y1);\r\n  };\r\n\r\n  area.lineX1 = function() {\r\n    return arealine().x(x1).y(y0);\r\n  };\r\n\r\n  area.defined = function(_) {\r\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\r\n  };\r\n\r\n  area.curve = function(_) {\r\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\r\n  };\r\n\r\n  area.context = function(_) {\r\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\r\n  };\r\n\r\n  return area;\r\n}\r\n","export default function(a, b) {\r\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\r\n}\r\n","export default function(d) {\r\n  return d;\r\n}\r\n","import curveLinear from \"./linear.js\";\r\n\r\nexport var curveRadialLinear = curveRadial(curveLinear);\r\n\r\nfunction Radial(curve) {\r\n  this._curve = curve;\r\n}\r\n\r\nRadial.prototype = {\r\n  areaStart: function() {\r\n    this._curve.areaStart();\r\n  },\r\n  areaEnd: function() {\r\n    this._curve.areaEnd();\r\n  },\r\n  lineStart: function() {\r\n    this._curve.lineStart();\r\n  },\r\n  lineEnd: function() {\r\n    this._curve.lineEnd();\r\n  },\r\n  point: function(a, r) {\r\n    this._curve.point(r * Math.sin(a), r * -Math.cos(a));\r\n  }\r\n};\r\n\r\nexport default function curveRadial(curve) {\r\n\r\n  function radial(context) {\r\n    return new Radial(curve(context));\r\n  }\r\n\r\n  radial._curve = curve;\r\n\r\n  return radial;\r\n}\r\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\r\nimport line from \"./line.js\";\r\n\r\nexport function lineRadial(l) {\r\n  var c = l.curve;\r\n\r\n  l.angle = l.x, delete l.x;\r\n  l.radius = l.y, delete l.y;\r\n\r\n  l.curve = function(_) {\r\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\r\n  };\r\n\r\n  return l;\r\n}\r\n\r\nexport default function() {\r\n  return lineRadial(line().curve(curveRadialLinear));\r\n}\r\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\r\nimport area from \"./area.js\";\r\nimport {lineRadial} from \"./lineRadial.js\";\r\n\r\nexport default function() {\r\n  var a = area().curve(curveRadialLinear),\r\n      c = a.curve,\r\n      x0 = a.lineX0,\r\n      x1 = a.lineX1,\r\n      y0 = a.lineY0,\r\n      y1 = a.lineY1;\r\n\r\n  a.angle = a.x, delete a.x;\r\n  a.startAngle = a.x0, delete a.x0;\r\n  a.endAngle = a.x1, delete a.x1;\r\n  a.radius = a.y, delete a.y;\r\n  a.innerRadius = a.y0, delete a.y0;\r\n  a.outerRadius = a.y1, delete a.y1;\r\n  a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;\r\n  a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;\r\n  a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;\r\n  a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;\r\n\r\n  a.curve = function(_) {\r\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\r\n  };\r\n\r\n  return a;\r\n}\r\n","export default function(x, y) {\r\n  return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];\r\n}\r\n","import pointRadial from \"../pointRadial.js\";\r\n\r\nclass Bump {\r\n  constructor(context, x) {\r\n    this._context = context;\r\n    this._x = x;\r\n  }\r\n  areaStart() {\r\n    this._line = 0;\r\n  }\r\n  areaEnd() {\r\n    this._line = NaN;\r\n  }\r\n  lineStart() {\r\n    this._point = 0;\r\n  }\r\n  lineEnd() {\r\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\r\n    this._line = 1 - this._line;\r\n  }\r\n  point(x, y) {\r\n    x = +x, y = +y;\r\n    switch (this._point) {\r\n      case 0: {\r\n        this._point = 1;\r\n        if (this._line) this._context.lineTo(x, y);\r\n        else this._context.moveTo(x, y);\r\n        break;\r\n      }\r\n      case 1: this._point = 2; // falls through\r\n      default: {\r\n        if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);\r\n        else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);\r\n        break;\r\n      }\r\n    }\r\n    this._x0 = x, this._y0 = y;\r\n  }\r\n}\r\n\r\nclass BumpRadial {\r\n  constructor(context) {\r\n    this._context = context;\r\n  }\r\n  lineStart() {\r\n    this._point = 0;\r\n  }\r\n  lineEnd() {}\r\n  point(x, y) {\r\n    x = +x, y = +y;\r\n    if (this._point === 0) {\r\n      this._point = 1;\r\n    } else {\r\n      const p0 = pointRadial(this._x0, this._y0);\r\n      const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);\r\n      const p2 = pointRadial(x, this._y0);\r\n      const p3 = pointRadial(x, y);\r\n      this._context.moveTo(...p0);\r\n      this._context.bezierCurveTo(...p1, ...p2, ...p3);\r\n    }\r\n    this._x0 = x, this._y0 = y;\r\n  }\r\n}\r\n\r\nexport function bumpX(context) {\r\n  return new Bump(context, true);\r\n}\r\n\r\nexport function bumpY(context) {\r\n  return new Bump(context, false);\r\n}\r\n\r\nexport function bumpRadial(context) {\r\n  return new BumpRadial(context);\r\n}\r\n","import {slice} from \"./array.js\";\r\nimport constant from \"./constant.js\";\r\nimport {bumpX, bumpY, bumpRadial} from \"./curve/bump.js\";\r\nimport {withPath} from \"./path.js\";\r\nimport {x as pointX, y as pointY} from \"./point.js\";\r\n\r\nfunction linkSource(d) {\r\n  return d.source;\r\n}\r\n\r\nfunction linkTarget(d) {\r\n  return d.target;\r\n}\r\n\r\nexport function link(curve) {\r\n  let source = linkSource,\r\n      target = linkTarget,\r\n      x = pointX,\r\n      y = pointY,\r\n      context = null,\r\n      output = null,\r\n      path = withPath(link);\r\n\r\n  function link() {\r\n    let buffer;\r\n    const argv = slice.call(arguments);\r\n    const s = source.apply(this, argv);\r\n    const t = target.apply(this, argv);\r\n    if (context == null) output = curve(buffer = path());\r\n    output.lineStart();\r\n    argv[0] = s, output.point(+x.apply(this, argv), +y.apply(this, argv));\r\n    argv[0] = t, output.point(+x.apply(this, argv), +y.apply(this, argv));\r\n    output.lineEnd();\r\n    if (buffer) return output = null, buffer + \"\" || null;\r\n  }\r\n\r\n  link.source = function(_) {\r\n    return arguments.length ? (source = _, link) : source;\r\n  };\r\n\r\n  link.target = function(_) {\r\n    return arguments.length ? (target = _, link) : target;\r\n  };\r\n\r\n  link.x = function(_) {\r\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), link) : x;\r\n  };\r\n\r\n  link.y = function(_) {\r\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), link) : y;\r\n  };\r\n\r\n  link.context = function(_) {\r\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), link) : context;\r\n  };\r\n\r\n  return link;\r\n}\r\n\r\nexport function linkHorizontal() {\r\n  return link(bumpX);\r\n}\r\n\r\nexport function linkVertical() {\r\n  return link(bumpY);\r\n}\r\n\r\nexport function linkRadial() {\r\n  const l = link(bumpRadial);\r\n  l.angle = l.x, delete l.x;\r\n  l.radius = l.y, delete l.y;\r\n  return l;\r\n}\r\n","import {min, sqrt} from \"../math.js\";\r\n\r\nconst sqrt3 = sqrt(3);\r\n\r\nexport default {\r\n  draw(context, size) {\r\n    const r = sqrt(size + min(size / 28, 0.75)) * 0.59436;\r\n    const t = r / 2;\r\n    const u = t * sqrt3;\r\n    context.moveTo(0, r);\r\n    context.lineTo(0, -r);\r\n    context.moveTo(-u, -t);\r\n    context.lineTo(u, t);\r\n    context.moveTo(-u, t);\r\n    context.lineTo(u, -t);\r\n  }\r\n};\r\n","import {pi, sqrt, tau} from \"../math.js\";\r\n\r\nexport default {\r\n  draw(context, size) {\r\n    const r = sqrt(size / pi);\r\n    context.moveTo(r, 0);\r\n    context.arc(0, 0, r, 0, tau);\r\n  }\r\n};\r\n","import {sqrt} from \"../math.js\";\r\n\r\nexport default {\r\n  draw(context, size) {\r\n    const r = sqrt(size / 5) / 2;\r\n    context.moveTo(-3 * r, -r);\r\n    context.lineTo(-r, -r);\r\n    context.lineTo(-r, -3 * r);\r\n    context.lineTo(r, -3 * r);\r\n    context.lineTo(r, -r);\r\n    context.lineTo(3 * r, -r);\r\n    context.lineTo(3 * r, r);\r\n    context.lineTo(r, r);\r\n    context.lineTo(r, 3 * r);\r\n    context.lineTo(-r, 3 * r);\r\n    context.lineTo(-r, r);\r\n    context.lineTo(-3 * r, r);\r\n    context.closePath();\r\n  }\r\n};\r\n","import {sqrt} from \"../math.js\";\r\n\r\nconst tan30 = sqrt(1 / 3);\r\nconst tan30_2 = tan30 * 2;\r\n\r\nexport default {\r\n  draw(context, size) {\r\n    const y = sqrt(size / tan30_2);\r\n    const x = y * tan30;\r\n    context.moveTo(0, -y);\r\n    context.lineTo(x, 0);\r\n    context.lineTo(0, y);\r\n    context.lineTo(-x, 0);\r\n    context.closePath();\r\n  }\r\n};\r\n","import {sqrt} from \"../math.js\";\r\n\r\nexport default {\r\n  draw(context, size) {\r\n    const r = sqrt(size) * 0.62625;\r\n    context.moveTo(0, -r);\r\n    context.lineTo(r, 0);\r\n    context.lineTo(0, r);\r\n    context.lineTo(-r, 0);\r\n    context.closePath();\r\n  }\r\n};\r\n","import {min, sqrt} from \"../math.js\";\r\n\r\nexport default {\r\n  draw(context, size) {\r\n    const r = sqrt(size - min(size / 7, 2)) * 0.87559;\r\n    context.moveTo(-r, 0);\r\n    context.lineTo(r, 0);\r\n    context.moveTo(0, r);\r\n    context.lineTo(0, -r);\r\n  }\r\n};\r\n","import {sqrt} from \"../math.js\";\r\n\r\nexport default {\r\n  draw(context, size) {\r\n    const w = sqrt(size);\r\n    const x = -w / 2;\r\n    context.rect(x, x, w, w);\r\n  }\r\n};\r\n","import {sqrt} from \"../math.js\";\r\n\r\nexport default {\r\n  draw(context, size) {\r\n    const r = sqrt(size) * 0.4431;\r\n    context.moveTo(r, r);\r\n    context.lineTo(r, -r);\r\n    context.lineTo(-r, -r);\r\n    context.lineTo(-r, r);\r\n    context.closePath();\r\n  }\r\n};\r\n","import {sin, cos, sqrt, pi, tau} from \"../math.js\";\r\n\r\nconst ka = 0.89081309152928522810;\r\nconst kr = sin(pi / 10) / sin(7 * pi / 10);\r\nconst kx = sin(tau / 10) * kr;\r\nconst ky = -cos(tau / 10) * kr;\r\n\r\nexport default {\r\n  draw(context, size) {\r\n    const r = sqrt(size * ka);\r\n    const x = kx * r;\r\n    const y = ky * r;\r\n    context.moveTo(0, -r);\r\n    context.lineTo(x, y);\r\n    for (let i = 1; i < 5; ++i) {\r\n      const a = tau * i / 5;\r\n      const c = cos(a);\r\n      const s = sin(a);\r\n      context.lineTo(s * r, -c * r);\r\n      context.lineTo(c * x - s * y, s * x + c * y);\r\n    }\r\n    context.closePath();\r\n  }\r\n};\r\n","import {sqrt} from \"../math.js\";\r\n\r\nconst sqrt3 = sqrt(3);\r\n\r\nexport default {\r\n  draw(context, size) {\r\n    const y = -sqrt(size / (sqrt3 * 3));\r\n    context.moveTo(0, y * 2);\r\n    context.lineTo(-sqrt3 * y, -y);\r\n    context.lineTo(sqrt3 * y, -y);\r\n    context.closePath();\r\n  }\r\n};\r\n","import {sqrt} from \"../math.js\";\r\n\r\nconst sqrt3 = sqrt(3);\r\n\r\nexport default {\r\n  draw(context, size) {\r\n    const s = sqrt(size) * 0.6824;\r\n    const t = s  / 2;\r\n    const u = (s * sqrt3) / 2; // cos(Math.PI / 6)\r\n    context.moveTo(0, -s);\r\n    context.lineTo(u, t);\r\n    context.lineTo(-u, t);\r\n    context.closePath();\r\n  }\r\n};\r\n","import {sqrt} from \"../math.js\";\r\n\r\nconst c = -0.5;\r\nconst s = sqrt(3) / 2;\r\nconst k = 1 / sqrt(12);\r\nconst a = (k / 2 + 1) * 3;\r\n\r\nexport default {\r\n  draw(context, size) {\r\n    const r = sqrt(size / a);\r\n    const x0 = r / 2, y0 = r * k;\r\n    const x1 = x0, y1 = r * k + r;\r\n    const x2 = -x1, y2 = y1;\r\n    context.moveTo(x0, y0);\r\n    context.lineTo(x1, y1);\r\n    context.lineTo(x2, y2);\r\n    context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\r\n    context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\r\n    context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\r\n    context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\r\n    context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\r\n    context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\r\n    context.closePath();\r\n  }\r\n};\r\n","import {min, sqrt} from \"../math.js\";\r\n\r\nexport default {\r\n  draw(context, size) {\r\n    const r = sqrt(size - min(size / 6, 1.7)) * 0.6189;\r\n    context.moveTo(-r, -r);\r\n    context.lineTo(r, r);\r\n    context.moveTo(-r, r);\r\n    context.lineTo(r, -r);\r\n  }\r\n};\r\n","import constant from \"./constant.js\";\r\nimport {withPath} from \"./path.js\";\r\nimport asterisk from \"./symbol/asterisk.js\";\r\nimport circle from \"./symbol/circle.js\";\r\nimport cross from \"./symbol/cross.js\";\r\nimport diamond from \"./symbol/diamond.js\";\r\nimport diamond2 from \"./symbol/diamond2.js\";\r\nimport plus from \"./symbol/plus.js\";\r\nimport square from \"./symbol/square.js\";\r\nimport square2 from \"./symbol/square2.js\";\r\nimport star from \"./symbol/star.js\";\r\nimport triangle from \"./symbol/triangle.js\";\r\nimport triangle2 from \"./symbol/triangle2.js\";\r\nimport wye from \"./symbol/wye.js\";\r\nimport times from \"./symbol/times.js\";\r\n\r\n// These symbols are designed to be filled.\r\nexport const symbolsFill = [\r\n  circle,\r\n  cross,\r\n  diamond,\r\n  square,\r\n  star,\r\n  triangle,\r\n  wye\r\n];\r\n\r\n// These symbols are designed to be stroked (with a width of 1.5px and round caps).\r\nexport const symbolsStroke = [\r\n  circle,\r\n  plus,\r\n  times,\r\n  triangle2,\r\n  asterisk,\r\n  square2,\r\n  diamond2\r\n];\r\n\r\nexport default function Symbol(type, size) {\r\n  let context = null,\r\n      path = withPath(symbol);\r\n\r\n  type = typeof type === \"function\" ? type : constant(type || circle);\r\n  size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\r\n\r\n  function symbol() {\r\n    let buffer;\r\n    if (!context) context = buffer = path();\r\n    type.apply(this, arguments).draw(context, +size.apply(this, arguments));\r\n    if (buffer) return context = null, buffer + \"\" || null;\r\n  }\r\n\r\n  symbol.type = function(_) {\r\n    return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\r\n  };\r\n\r\n  symbol.size = function(_) {\r\n    return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\r\n  };\r\n\r\n  symbol.context = function(_) {\r\n    return arguments.length ? (context = _ == null ? null : _, symbol) : context;\r\n  };\r\n\r\n  return symbol;\r\n}\r\n","export default function() {}\r\n","export function point(that, x, y) {\r\n  that._context.bezierCurveTo(\r\n    (2 * that._x0 + that._x1) / 3,\r\n    (2 * that._y0 + that._y1) / 3,\r\n    (that._x0 + 2 * that._x1) / 3,\r\n    (that._y0 + 2 * that._y1) / 3,\r\n    (that._x0 + 4 * that._x1 + x) / 6,\r\n    (that._y0 + 4 * that._y1 + y) / 6\r\n  );\r\n}\r\n\r\nexport function Basis(context) {\r\n  this._context = context;\r\n}\r\n\r\nBasis.prototype = {\r\n  areaStart: function() {\r\n    this._line = 0;\r\n  },\r\n  areaEnd: function() {\r\n    this._line = NaN;\r\n  },\r\n  lineStart: function() {\r\n    this._x0 = this._x1 =\r\n    this._y0 = this._y1 = NaN;\r\n    this._point = 0;\r\n  },\r\n  lineEnd: function() {\r\n    switch (this._point) {\r\n      case 3: point(this, this._x1, this._y1); // falls through\r\n      case 2: this._context.lineTo(this._x1, this._y1); break;\r\n    }\r\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\r\n    this._line = 1 - this._line;\r\n  },\r\n  point: function(x, y) {\r\n    x = +x, y = +y;\r\n    switch (this._point) {\r\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\r\n      case 1: this._point = 2; break;\r\n      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\r\n      default: point(this, x, y); break;\r\n    }\r\n    this._x0 = this._x1, this._x1 = x;\r\n    this._y0 = this._y1, this._y1 = y;\r\n  }\r\n};\r\n\r\nexport default function(context) {\r\n  return new Basis(context);\r\n}\r\n","import noop from \"../noop.js\";\r\nimport {point} from \"./basis.js\";\r\n\r\nfunction BasisClosed(context) {\r\n  this._context = context;\r\n}\r\n\r\nBasisClosed.prototype = {\r\n  areaStart: noop,\r\n  areaEnd: noop,\r\n  lineStart: function() {\r\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\r\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\r\n    this._point = 0;\r\n  },\r\n  lineEnd: function() {\r\n    switch (this._point) {\r\n      case 1: {\r\n        this._context.moveTo(this._x2, this._y2);\r\n        this._context.closePath();\r\n        break;\r\n      }\r\n      case 2: {\r\n        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\r\n        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\r\n        this._context.closePath();\r\n        break;\r\n      }\r\n      case 3: {\r\n        this.point(this._x2, this._y2);\r\n        this.point(this._x3, this._y3);\r\n        this.point(this._x4, this._y4);\r\n        break;\r\n      }\r\n    }\r\n  },\r\n  point: function(x, y) {\r\n    x = +x, y = +y;\r\n    switch (this._point) {\r\n      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\r\n      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\r\n      case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\r\n      default: point(this, x, y); break;\r\n    }\r\n    this._x0 = this._x1, this._x1 = x;\r\n    this._y0 = this._y1, this._y1 = y;\r\n  }\r\n};\r\n\r\nexport default function(context) {\r\n  return new BasisClosed(context);\r\n}\r\n","import {point} from \"./basis.js\";\r\n\r\nfunction BasisOpen(context) {\r\n  this._context = context;\r\n}\r\n\r\nBasisOpen.prototype = {\r\n  areaStart: function() {\r\n    this._line = 0;\r\n  },\r\n  areaEnd: function() {\r\n    this._line = NaN;\r\n  },\r\n  lineStart: function() {\r\n    this._x0 = this._x1 =\r\n    this._y0 = this._y1 = NaN;\r\n    this._point = 0;\r\n  },\r\n  lineEnd: function() {\r\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\r\n    this._line = 1 - this._line;\r\n  },\r\n  point: function(x, y) {\r\n    x = +x, y = +y;\r\n    switch (this._point) {\r\n      case 0: this._point = 1; break;\r\n      case 1: this._point = 2; break;\r\n      case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\r\n      case 3: this._point = 4; // falls through\r\n      default: point(this, x, y); break;\r\n    }\r\n    this._x0 = this._x1, this._x1 = x;\r\n    this._y0 = this._y1, this._y1 = y;\r\n  }\r\n};\r\n\r\nexport default function(context) {\r\n  return new BasisOpen(context);\r\n}\r\n","import {Basis} from \"./basis.js\";\r\n\r\nfunction Bundle(context, beta) {\r\n  this._basis = new Basis(context);\r\n  this._beta = beta;\r\n}\r\n\r\nBundle.prototype = {\r\n  lineStart: function() {\r\n    this._x = [];\r\n    this._y = [];\r\n    this._basis.lineStart();\r\n  },\r\n  lineEnd: function() {\r\n    var x = this._x,\r\n        y = this._y,\r\n        j = x.length - 1;\r\n\r\n    if (j > 0) {\r\n      var x0 = x[0],\r\n          y0 = y[0],\r\n          dx = x[j] - x0,\r\n          dy = y[j] - y0,\r\n          i = -1,\r\n          t;\r\n\r\n      while (++i <= j) {\r\n        t = i / j;\r\n        this._basis.point(\r\n          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\r\n          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\r\n        );\r\n      }\r\n    }\r\n\r\n    this._x = this._y = null;\r\n    this._basis.lineEnd();\r\n  },\r\n  point: function(x, y) {\r\n    this._x.push(+x);\r\n    this._y.push(+y);\r\n  }\r\n};\r\n\r\nexport default (function custom(beta) {\r\n\r\n  function bundle(context) {\r\n    return beta === 1 ? new Basis(context) : new Bundle(context, beta);\r\n  }\r\n\r\n  bundle.beta = function(beta) {\r\n    return custom(+beta);\r\n  };\r\n\r\n  return bundle;\r\n})(0.85);\r\n","export function point(that, x, y) {\r\n  that._context.bezierCurveTo(\r\n    that._x1 + that._k * (that._x2 - that._x0),\r\n    that._y1 + that._k * (that._y2 - that._y0),\r\n    that._x2 + that._k * (that._x1 - x),\r\n    that._y2 + that._k * (that._y1 - y),\r\n    that._x2,\r\n    that._y2\r\n  );\r\n}\r\n\r\nexport function Cardinal(context, tension) {\r\n  this._context = context;\r\n  this._k = (1 - tension) / 6;\r\n}\r\n\r\nCardinal.prototype = {\r\n  areaStart: function() {\r\n    this._line = 0;\r\n  },\r\n  areaEnd: function() {\r\n    this._line = NaN;\r\n  },\r\n  lineStart: function() {\r\n    this._x0 = this._x1 = this._x2 =\r\n    this._y0 = this._y1 = this._y2 = NaN;\r\n    this._point = 0;\r\n  },\r\n  lineEnd: function() {\r\n    switch (this._point) {\r\n      case 2: this._context.lineTo(this._x2, this._y2); break;\r\n      case 3: point(this, this._x1, this._y1); break;\r\n    }\r\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\r\n    this._line = 1 - this._line;\r\n  },\r\n  point: function(x, y) {\r\n    x = +x, y = +y;\r\n    switch (this._point) {\r\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\r\n      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\r\n      case 2: this._point = 3; // falls through\r\n      default: point(this, x, y); break;\r\n    }\r\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\r\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\r\n  }\r\n};\r\n\r\nexport default (function custom(tension) {\r\n\r\n  function cardinal(context) {\r\n    return new Cardinal(context, tension);\r\n  }\r\n\r\n  cardinal.tension = function(tension) {\r\n    return custom(+tension);\r\n  };\r\n\r\n  return cardinal;\r\n})(0);\r\n","import noop from \"../noop.js\";\r\nimport {point} from \"./cardinal.js\";\r\n\r\nexport function CardinalClosed(context, tension) {\r\n  this._context = context;\r\n  this._k = (1 - tension) / 6;\r\n}\r\n\r\nCardinalClosed.prototype = {\r\n  areaStart: noop,\r\n  areaEnd: noop,\r\n  lineStart: function() {\r\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\r\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\r\n    this._point = 0;\r\n  },\r\n  lineEnd: function() {\r\n    switch (this._point) {\r\n      case 1: {\r\n        this._context.moveTo(this._x3, this._y3);\r\n        this._context.closePath();\r\n        break;\r\n      }\r\n      case 2: {\r\n        this._context.lineTo(this._x3, this._y3);\r\n        this._context.closePath();\r\n        break;\r\n      }\r\n      case 3: {\r\n        this.point(this._x3, this._y3);\r\n        this.point(this._x4, this._y4);\r\n        this.point(this._x5, this._y5);\r\n        break;\r\n      }\r\n    }\r\n  },\r\n  point: function(x, y) {\r\n    x = +x, y = +y;\r\n    switch (this._point) {\r\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\r\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\r\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\r\n      default: point(this, x, y); break;\r\n    }\r\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\r\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\r\n  }\r\n};\r\n\r\nexport default (function custom(tension) {\r\n\r\n  function cardinal(context) {\r\n    return new CardinalClosed(context, tension);\r\n  }\r\n\r\n  cardinal.tension = function(tension) {\r\n    return custom(+tension);\r\n  };\r\n\r\n  return cardinal;\r\n})(0);\r\n","import {point} from \"./cardinal.js\";\r\n\r\nexport function CardinalOpen(context, tension) {\r\n  this._context = context;\r\n  this._k = (1 - tension) / 6;\r\n}\r\n\r\nCardinalOpen.prototype = {\r\n  areaStart: function() {\r\n    this._line = 0;\r\n  },\r\n  areaEnd: function() {\r\n    this._line = NaN;\r\n  },\r\n  lineStart: function() {\r\n    this._x0 = this._x1 = this._x2 =\r\n    this._y0 = this._y1 = this._y2 = NaN;\r\n    this._point = 0;\r\n  },\r\n  lineEnd: function() {\r\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\r\n    this._line = 1 - this._line;\r\n  },\r\n  point: function(x, y) {\r\n    x = +x, y = +y;\r\n    switch (this._point) {\r\n      case 0: this._point = 1; break;\r\n      case 1: this._point = 2; break;\r\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\r\n      case 3: this._point = 4; // falls through\r\n      default: point(this, x, y); break;\r\n    }\r\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\r\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\r\n  }\r\n};\r\n\r\nexport default (function custom(tension) {\r\n\r\n  function cardinal(context) {\r\n    return new CardinalOpen(context, tension);\r\n  }\r\n\r\n  cardinal.tension = function(tension) {\r\n    return custom(+tension);\r\n  };\r\n\r\n  return cardinal;\r\n})(0);\r\n","import {epsilon} from \"../math.js\";\r\nimport {Cardinal} from \"./cardinal.js\";\r\n\r\nexport function point(that, x, y) {\r\n  var x1 = that._x1,\r\n      y1 = that._y1,\r\n      x2 = that._x2,\r\n      y2 = that._y2;\r\n\r\n  if (that._l01_a > epsilon) {\r\n    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\r\n        n = 3 * that._l01_a * (that._l01_a + that._l12_a);\r\n    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\r\n    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\r\n  }\r\n\r\n  if (that._l23_a > epsilon) {\r\n    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\r\n        m = 3 * that._l23_a * (that._l23_a + that._l12_a);\r\n    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\r\n    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\r\n  }\r\n\r\n  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\r\n}\r\n\r\nfunction CatmullRom(context, alpha) {\r\n  this._context = context;\r\n  this._alpha = alpha;\r\n}\r\n\r\nCatmullRom.prototype = {\r\n  areaStart: function() {\r\n    this._line = 0;\r\n  },\r\n  areaEnd: function() {\r\n    this._line = NaN;\r\n  },\r\n  lineStart: function() {\r\n    this._x0 = this._x1 = this._x2 =\r\n    this._y0 = this._y1 = this._y2 = NaN;\r\n    this._l01_a = this._l12_a = this._l23_a =\r\n    this._l01_2a = this._l12_2a = this._l23_2a =\r\n    this._point = 0;\r\n  },\r\n  lineEnd: function() {\r\n    switch (this._point) {\r\n      case 2: this._context.lineTo(this._x2, this._y2); break;\r\n      case 3: this.point(this._x2, this._y2); break;\r\n    }\r\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\r\n    this._line = 1 - this._line;\r\n  },\r\n  point: function(x, y) {\r\n    x = +x, y = +y;\r\n\r\n    if (this._point) {\r\n      var x23 = this._x2 - x,\r\n          y23 = this._y2 - y;\r\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\r\n    }\r\n\r\n    switch (this._point) {\r\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\r\n      case 1: this._point = 2; break;\r\n      case 2: this._point = 3; // falls through\r\n      default: point(this, x, y); break;\r\n    }\r\n\r\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\r\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\r\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\r\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\r\n  }\r\n};\r\n\r\nexport default (function custom(alpha) {\r\n\r\n  function catmullRom(context) {\r\n    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\r\n  }\r\n\r\n  catmullRom.alpha = function(alpha) {\r\n    return custom(+alpha);\r\n  };\r\n\r\n  return catmullRom;\r\n})(0.5);\r\n","import {CardinalClosed} from \"./cardinalClosed.js\";\r\nimport noop from \"../noop.js\";\r\nimport {point} from \"./catmullRom.js\";\r\n\r\nfunction CatmullRomClosed(context, alpha) {\r\n  this._context = context;\r\n  this._alpha = alpha;\r\n}\r\n\r\nCatmullRomClosed.prototype = {\r\n  areaStart: noop,\r\n  areaEnd: noop,\r\n  lineStart: function() {\r\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\r\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\r\n    this._l01_a = this._l12_a = this._l23_a =\r\n    this._l01_2a = this._l12_2a = this._l23_2a =\r\n    this._point = 0;\r\n  },\r\n  lineEnd: function() {\r\n    switch (this._point) {\r\n      case 1: {\r\n        this._context.moveTo(this._x3, this._y3);\r\n        this._context.closePath();\r\n        break;\r\n      }\r\n      case 2: {\r\n        this._context.lineTo(this._x3, this._y3);\r\n        this._context.closePath();\r\n        break;\r\n      }\r\n      case 3: {\r\n        this.point(this._x3, this._y3);\r\n        this.point(this._x4, this._y4);\r\n        this.point(this._x5, this._y5);\r\n        break;\r\n      }\r\n    }\r\n  },\r\n  point: function(x, y) {\r\n    x = +x, y = +y;\r\n\r\n    if (this._point) {\r\n      var x23 = this._x2 - x,\r\n          y23 = this._y2 - y;\r\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\r\n    }\r\n\r\n    switch (this._point) {\r\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\r\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\r\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\r\n      default: point(this, x, y); break;\r\n    }\r\n\r\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\r\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\r\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\r\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\r\n  }\r\n};\r\n\r\nexport default (function custom(alpha) {\r\n\r\n  function catmullRom(context) {\r\n    return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\r\n  }\r\n\r\n  catmullRom.alpha = function(alpha) {\r\n    return custom(+alpha);\r\n  };\r\n\r\n  return catmullRom;\r\n})(0.5);\r\n","import {CardinalOpen} from \"./cardinalOpen.js\";\r\nimport {point} from \"./catmullRom.js\";\r\n\r\nfunction CatmullRomOpen(context, alpha) {\r\n  this._context = context;\r\n  this._alpha = alpha;\r\n}\r\n\r\nCatmullRomOpen.prototype = {\r\n  areaStart: function() {\r\n    this._line = 0;\r\n  },\r\n  areaEnd: function() {\r\n    this._line = NaN;\r\n  },\r\n  lineStart: function() {\r\n    this._x0 = this._x1 = this._x2 =\r\n    this._y0 = this._y1 = this._y2 = NaN;\r\n    this._l01_a = this._l12_a = this._l23_a =\r\n    this._l01_2a = this._l12_2a = this._l23_2a =\r\n    this._point = 0;\r\n  },\r\n  lineEnd: function() {\r\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\r\n    this._line = 1 - this._line;\r\n  },\r\n  point: function(x, y) {\r\n    x = +x, y = +y;\r\n\r\n    if (this._point) {\r\n      var x23 = this._x2 - x,\r\n          y23 = this._y2 - y;\r\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\r\n    }\r\n\r\n    switch (this._point) {\r\n      case 0: this._point = 1; break;\r\n      case 1: this._point = 2; break;\r\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\r\n      case 3: this._point = 4; // falls through\r\n      default: point(this, x, y); break;\r\n    }\r\n\r\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\r\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\r\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\r\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\r\n  }\r\n};\r\n\r\nexport default (function custom(alpha) {\r\n\r\n  function catmullRom(context) {\r\n    return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\r\n  }\r\n\r\n  catmullRom.alpha = function(alpha) {\r\n    return custom(+alpha);\r\n  };\r\n\r\n  return catmullRom;\r\n})(0.5);\r\n","import noop from \"../noop.js\";\r\n\r\nfunction LinearClosed(context) {\r\n  this._context = context;\r\n}\r\n\r\nLinearClosed.prototype = {\r\n  areaStart: noop,\r\n  areaEnd: noop,\r\n  lineStart: function() {\r\n    this._point = 0;\r\n  },\r\n  lineEnd: function() {\r\n    if (this._point) this._context.closePath();\r\n  },\r\n  point: function(x, y) {\r\n    x = +x, y = +y;\r\n    if (this._point) this._context.lineTo(x, y);\r\n    else this._point = 1, this._context.moveTo(x, y);\r\n  }\r\n};\r\n\r\nexport default function(context) {\r\n  return new LinearClosed(context);\r\n}\r\n","function sign(x) {\r\n  return x < 0 ? -1 : 1;\r\n}\r\n\r\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\r\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\r\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\r\n// NOV(II), P. 443, 1990.\r\nfunction slope3(that, x2, y2) {\r\n  var h0 = that._x1 - that._x0,\r\n      h1 = x2 - that._x1,\r\n      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\r\n      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\r\n      p = (s0 * h1 + s1 * h0) / (h0 + h1);\r\n  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\r\n}\r\n\r\n// Calculate a one-sided slope.\r\nfunction slope2(that, t) {\r\n  var h = that._x1 - that._x0;\r\n  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\r\n}\r\n\r\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\r\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\r\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\r\nfunction point(that, t0, t1) {\r\n  var x0 = that._x0,\r\n      y0 = that._y0,\r\n      x1 = that._x1,\r\n      y1 = that._y1,\r\n      dx = (x1 - x0) / 3;\r\n  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\r\n}\r\n\r\nfunction MonotoneX(context) {\r\n  this._context = context;\r\n}\r\n\r\nMonotoneX.prototype = {\r\n  areaStart: function() {\r\n    this._line = 0;\r\n  },\r\n  areaEnd: function() {\r\n    this._line = NaN;\r\n  },\r\n  lineStart: function() {\r\n    this._x0 = this._x1 =\r\n    this._y0 = this._y1 =\r\n    this._t0 = NaN;\r\n    this._point = 0;\r\n  },\r\n  lineEnd: function() {\r\n    switch (this._point) {\r\n      case 2: this._context.lineTo(this._x1, this._y1); break;\r\n      case 3: point(this, this._t0, slope2(this, this._t0)); break;\r\n    }\r\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\r\n    this._line = 1 - this._line;\r\n  },\r\n  point: function(x, y) {\r\n    var t1 = NaN;\r\n\r\n    x = +x, y = +y;\r\n    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\r\n    switch (this._point) {\r\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\r\n      case 1: this._point = 2; break;\r\n      case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\r\n      default: point(this, this._t0, t1 = slope3(this, x, y)); break;\r\n    }\r\n\r\n    this._x0 = this._x1, this._x1 = x;\r\n    this._y0 = this._y1, this._y1 = y;\r\n    this._t0 = t1;\r\n  }\r\n}\r\n\r\nfunction MonotoneY(context) {\r\n  this._context = new ReflectContext(context);\r\n}\r\n\r\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\r\n  MonotoneX.prototype.point.call(this, y, x);\r\n};\r\n\r\nfunction ReflectContext(context) {\r\n  this._context = context;\r\n}\r\n\r\nReflectContext.prototype = {\r\n  moveTo: function(x, y) { this._context.moveTo(y, x); },\r\n  closePath: function() { this._context.closePath(); },\r\n  lineTo: function(x, y) { this._context.lineTo(y, x); },\r\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\r\n};\r\n\r\nexport function monotoneX(context) {\r\n  return new MonotoneX(context);\r\n}\r\n\r\nexport function monotoneY(context) {\r\n  return new MonotoneY(context);\r\n}\r\n","function Natural(context) {\r\n  this._context = context;\r\n}\r\n\r\nNatural.prototype = {\r\n  areaStart: function() {\r\n    this._line = 0;\r\n  },\r\n  areaEnd: function() {\r\n    this._line = NaN;\r\n  },\r\n  lineStart: function() {\r\n    this._x = [];\r\n    this._y = [];\r\n  },\r\n  lineEnd: function() {\r\n    var x = this._x,\r\n        y = this._y,\r\n        n = x.length;\r\n\r\n    if (n) {\r\n      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\r\n      if (n === 2) {\r\n        this._context.lineTo(x[1], y[1]);\r\n      } else {\r\n        var px = controlPoints(x),\r\n            py = controlPoints(y);\r\n        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\r\n          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\r\n    this._line = 1 - this._line;\r\n    this._x = this._y = null;\r\n  },\r\n  point: function(x, y) {\r\n    this._x.push(+x);\r\n    this._y.push(+y);\r\n  }\r\n};\r\n\r\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\r\nfunction controlPoints(x) {\r\n  var i,\r\n      n = x.length - 1,\r\n      m,\r\n      a = new Array(n),\r\n      b = new Array(n),\r\n      r = new Array(n);\r\n  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\r\n  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\r\n  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\r\n  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\r\n  a[n - 1] = r[n - 1] / b[n - 1];\r\n  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\r\n  b[n - 1] = (x[n] + a[n - 1]) / 2;\r\n  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\r\n  return [a, b];\r\n}\r\n\r\nexport default function(context) {\r\n  return new Natural(context);\r\n}\r\n","function Step(context, t) {\r\n  this._context = context;\r\n  this._t = t;\r\n}\r\n\r\nStep.prototype = {\r\n  areaStart: function() {\r\n    this._line = 0;\r\n  },\r\n  areaEnd: function() {\r\n    this._line = NaN;\r\n  },\r\n  lineStart: function() {\r\n    this._x = this._y = NaN;\r\n    this._point = 0;\r\n  },\r\n  lineEnd: function() {\r\n    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\r\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\r\n    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\r\n  },\r\n  point: function(x, y) {\r\n    x = +x, y = +y;\r\n    switch (this._point) {\r\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\r\n      case 1: this._point = 2; // falls through\r\n      default: {\r\n        if (this._t <= 0) {\r\n          this._context.lineTo(this._x, y);\r\n          this._context.lineTo(x, y);\r\n        } else {\r\n          var x1 = this._x * (1 - this._t) + x * this._t;\r\n          this._context.lineTo(x1, this._y);\r\n          this._context.lineTo(x1, y);\r\n        }\r\n        break;\r\n      }\r\n    }\r\n    this._x = x, this._y = y;\r\n  }\r\n};\r\n\r\nexport default function(context) {\r\n  return new Step(context, 0.5);\r\n}\r\n\r\nexport function stepBefore(context) {\r\n  return new Step(context, 0);\r\n}\r\n\r\nexport function stepAfter(context) {\r\n  return new Step(context, 1);\r\n}\r\n","export default function(series, order) {\r\n  if (!((n = series.length) > 1)) return;\r\n  for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\r\n    s0 = s1, s1 = series[order[i]];\r\n    for (j = 0; j < m; ++j) {\r\n      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\r\n    }\r\n  }\r\n}\r\n","export default function(series) {\r\n  var n = series.length, o = new Array(n);\r\n  while (--n >= 0) o[n] = n;\r\n  return o;\r\n}\r\n","import array from \"./array.js\";\r\nimport constant from \"./constant.js\";\r\nimport offsetNone from \"./offset/none.js\";\r\nimport orderNone from \"./order/none.js\";\r\n\r\nfunction stackValue(d, key) {\r\n  return d[key];\r\n}\r\n\r\nfunction stackSeries(key) {\r\n  const series = [];\r\n  series.key = key;\r\n  return series;\r\n}\r\n\r\nexport default function() {\r\n  var keys = constant([]),\r\n      order = orderNone,\r\n      offset = offsetNone,\r\n      value = stackValue;\r\n\r\n  function stack(data) {\r\n    var sz = Array.from(keys.apply(this, arguments), stackSeries),\r\n        i, n = sz.length, j = -1,\r\n        oz;\r\n\r\n    for (const d of data) {\r\n      for (i = 0, ++j; i < n; ++i) {\r\n        (sz[i][j] = [0, +value(d, sz[i].key, j, data)]).data = d;\r\n      }\r\n    }\r\n\r\n    for (i = 0, oz = array(order(sz)); i < n; ++i) {\r\n      sz[oz[i]].index = i;\r\n    }\r\n\r\n    offset(sz, oz);\r\n    return sz;\r\n  }\r\n\r\n  stack.keys = function(_) {\r\n    return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : keys;\r\n  };\r\n\r\n  stack.value = function(_) {\r\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\r\n  };\r\n\r\n  stack.order = function(_) {\r\n    return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : order;\r\n  };\r\n\r\n  stack.offset = function(_) {\r\n    return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\r\n  };\r\n\r\n  return stack;\r\n}\r\n","import none from \"./none.js\";\r\n\r\nexport default function(series) {\r\n  var peaks = series.map(peak);\r\n  return none(series).sort(function(a, b) { return peaks[a] - peaks[b]; });\r\n}\r\n\r\nfunction peak(series) {\r\n  var i = -1, j = 0, n = series.length, vi, vj = -Infinity;\r\n  while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;\r\n  return j;\r\n}\r\n","import none from \"./none.js\";\r\n\r\nexport default function(series) {\r\n  var sums = series.map(sum);\r\n  return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\r\n}\r\n\r\nexport function sum(series) {\r\n  var s = 0, i = -1, n = series.length, v;\r\n  while (++i < n) if (v = +series[i][1]) s += v;\r\n  return s;\r\n}\r\n","export default x => () => x;\r\n","export default function ZoomEvent(type, {\r\n  sourceEvent,\r\n  target,\r\n  transform,\r\n  dispatch\r\n}) {\r\n  Object.defineProperties(this, {\r\n    type: {value: type, enumerable: true, configurable: true},\r\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\r\n    target: {value: target, enumerable: true, configurable: true},\r\n    transform: {value: transform, enumerable: true, configurable: true},\r\n    _: {value: dispatch}\r\n  });\r\n}\r\n","export function Transform(k, x, y) {\r\n  this.k = k;\r\n  this.x = x;\r\n  this.y = y;\r\n}\r\n\r\nTransform.prototype = {\r\n  constructor: Transform,\r\n  scale: function(k) {\r\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\r\n  },\r\n  translate: function(x, y) {\r\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\r\n  },\r\n  apply: function(point) {\r\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\r\n  },\r\n  applyX: function(x) {\r\n    return x * this.k + this.x;\r\n  },\r\n  applyY: function(y) {\r\n    return y * this.k + this.y;\r\n  },\r\n  invert: function(location) {\r\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\r\n  },\r\n  invertX: function(x) {\r\n    return (x - this.x) / this.k;\r\n  },\r\n  invertY: function(y) {\r\n    return (y - this.y) / this.k;\r\n  },\r\n  rescaleX: function(x) {\r\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\r\n  },\r\n  rescaleY: function(y) {\r\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\r\n  },\r\n  toString: function() {\r\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\r\n  }\r\n};\r\n\r\nexport var identity = new Transform(1, 0, 0);\r\n\r\ntransform.prototype = Transform.prototype;\r\n\r\nexport default function transform(node) {\r\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\r\n  return node.__zoom;\r\n}\r\n","export function nopropagation(event) {\r\n  event.stopImmediatePropagation();\r\n}\r\n\r\nexport default function(event) {\r\n  event.preventDefault();\r\n  event.stopImmediatePropagation();\r\n}\r\n","import {dispatch} from \"d3-dispatch\";\r\nimport {dragDisable, dragEnable} from \"d3-drag\";\r\nimport {interpolateZoom} from \"d3-interpolate\";\r\nimport {select, pointer} from \"d3-selection\";\r\nimport {interrupt} from \"d3-transition\";\r\nimport constant from \"./constant.js\";\r\nimport ZoomEvent from \"./event.js\";\r\nimport {Transform, identity} from \"./transform.js\";\r\nimport noevent, {nopropagation} from \"./noevent.js\";\r\n\r\n// Ignore right-click, since that should open the context menu.\r\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\r\nfunction defaultFilter(event) {\r\n  return (!event.ctrlKey || event.type === 'wheel') && !event.button;\r\n}\r\n\r\nfunction defaultExtent() {\r\n  var e = this;\r\n  if (e instanceof SVGElement) {\r\n    e = e.ownerSVGElement || e;\r\n    if (e.hasAttribute(\"viewBox\")) {\r\n      e = e.viewBox.baseVal;\r\n      return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\r\n    }\r\n    return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\r\n  }\r\n  return [[0, 0], [e.clientWidth, e.clientHeight]];\r\n}\r\n\r\nfunction defaultTransform() {\r\n  return this.__zoom || identity;\r\n}\r\n\r\nfunction defaultWheelDelta(event) {\r\n  return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\r\n}\r\n\r\nfunction defaultTouchable() {\r\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\r\n}\r\n\r\nfunction defaultConstrain(transform, extent, translateExtent) {\r\n  var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\r\n      dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\r\n      dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\r\n      dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\r\n  return transform.translate(\r\n    dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\r\n    dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\r\n  );\r\n}\r\n\r\nexport default function() {\r\n  var filter = defaultFilter,\r\n      extent = defaultExtent,\r\n      constrain = defaultConstrain,\r\n      wheelDelta = defaultWheelDelta,\r\n      touchable = defaultTouchable,\r\n      scaleExtent = [0, Infinity],\r\n      translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\r\n      duration = 250,\r\n      interpolate = interpolateZoom,\r\n      listeners = dispatch(\"start\", \"zoom\", \"end\"),\r\n      touchstarting,\r\n      touchfirst,\r\n      touchending,\r\n      touchDelay = 500,\r\n      wheelDelay = 150,\r\n      clickDistance2 = 0,\r\n      tapDistance = 10;\r\n\r\n  function zoom(selection) {\r\n    selection\r\n        .property(\"__zoom\", defaultTransform)\r\n        .on(\"wheel.zoom\", wheeled, {passive: false})\r\n        .on(\"mousedown.zoom\", mousedowned)\r\n        .on(\"dblclick.zoom\", dblclicked)\r\n      .filter(touchable)\r\n        .on(\"touchstart.zoom\", touchstarted)\r\n        .on(\"touchmove.zoom\", touchmoved)\r\n        .on(\"touchend.zoom touchcancel.zoom\", touchended)\r\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\r\n  }\r\n\r\n  zoom.transform = function(collection, transform, point, event) {\r\n    var selection = collection.selection ? collection.selection() : collection;\r\n    selection.property(\"__zoom\", defaultTransform);\r\n    if (collection !== selection) {\r\n      schedule(collection, transform, point, event);\r\n    } else {\r\n      selection.interrupt().each(function() {\r\n        gesture(this, arguments)\r\n          .event(event)\r\n          .start()\r\n          .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\r\n          .end();\r\n      });\r\n    }\r\n  };\r\n\r\n  zoom.scaleBy = function(selection, k, p, event) {\r\n    zoom.scaleTo(selection, function() {\r\n      var k0 = this.__zoom.k,\r\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\r\n      return k0 * k1;\r\n    }, p, event);\r\n  };\r\n\r\n  zoom.scaleTo = function(selection, k, p, event) {\r\n    zoom.transform(selection, function() {\r\n      var e = extent.apply(this, arguments),\r\n          t0 = this.__zoom,\r\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\r\n          p1 = t0.invert(p0),\r\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\r\n      return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\r\n    }, p, event);\r\n  };\r\n\r\n  zoom.translateBy = function(selection, x, y, event) {\r\n    zoom.transform(selection, function() {\r\n      return constrain(this.__zoom.translate(\r\n        typeof x === \"function\" ? x.apply(this, arguments) : x,\r\n        typeof y === \"function\" ? y.apply(this, arguments) : y\r\n      ), extent.apply(this, arguments), translateExtent);\r\n    }, null, event);\r\n  };\r\n\r\n  zoom.translateTo = function(selection, x, y, p, event) {\r\n    zoom.transform(selection, function() {\r\n      var e = extent.apply(this, arguments),\r\n          t = this.__zoom,\r\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\r\n      return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\r\n        typeof x === \"function\" ? -x.apply(this, arguments) : -x,\r\n        typeof y === \"function\" ? -y.apply(this, arguments) : -y\r\n      ), e, translateExtent);\r\n    }, p, event);\r\n  };\r\n\r\n  function scale(transform, k) {\r\n    k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\r\n    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\r\n  }\r\n\r\n  function translate(transform, p0, p1) {\r\n    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\r\n    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\r\n  }\r\n\r\n  function centroid(extent) {\r\n    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\r\n  }\r\n\r\n  function schedule(transition, transform, point, event) {\r\n    transition\r\n        .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\r\n        .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\r\n        .tween(\"zoom\", function() {\r\n          var that = this,\r\n              args = arguments,\r\n              g = gesture(that, args).event(event),\r\n              e = extent.apply(that, args),\r\n              p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\r\n              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\r\n              a = that.__zoom,\r\n              b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\r\n              i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\r\n          return function(t) {\r\n            if (t === 1) t = b; // Avoid rounding error on end.\r\n            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\r\n            g.zoom(null, t);\r\n          };\r\n        });\r\n  }\r\n\r\n  function gesture(that, args, clean) {\r\n    return (!clean && that.__zooming) || new Gesture(that, args);\r\n  }\r\n\r\n  function Gesture(that, args) {\r\n    this.that = that;\r\n    this.args = args;\r\n    this.active = 0;\r\n    this.sourceEvent = null;\r\n    this.extent = extent.apply(that, args);\r\n    this.taps = 0;\r\n  }\r\n\r\n  Gesture.prototype = {\r\n    event: function(event) {\r\n      if (event) this.sourceEvent = event;\r\n      return this;\r\n    },\r\n    start: function() {\r\n      if (++this.active === 1) {\r\n        this.that.__zooming = this;\r\n        this.emit(\"start\");\r\n      }\r\n      return this;\r\n    },\r\n    zoom: function(key, transform) {\r\n      if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\r\n      if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\r\n      if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\r\n      this.that.__zoom = transform;\r\n      this.emit(\"zoom\");\r\n      return this;\r\n    },\r\n    end: function() {\r\n      if (--this.active === 0) {\r\n        delete this.that.__zooming;\r\n        this.emit(\"end\");\r\n      }\r\n      return this;\r\n    },\r\n    emit: function(type) {\r\n      var d = select(this.that).datum();\r\n      listeners.call(\r\n        type,\r\n        this.that,\r\n        new ZoomEvent(type, {\r\n          sourceEvent: this.sourceEvent,\r\n          target: zoom,\r\n          type,\r\n          transform: this.that.__zoom,\r\n          dispatch: listeners\r\n        }),\r\n        d\r\n      );\r\n    }\r\n  };\r\n\r\n  function wheeled(event, ...args) {\r\n    if (!filter.apply(this, arguments)) return;\r\n    var g = gesture(this, args).event(event),\r\n        t = this.__zoom,\r\n        k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\r\n        p = pointer(event);\r\n\r\n    // If the mouse is in the same location as before, reuse it.\r\n    // If there were recent wheel events, reset the wheel idle timeout.\r\n    if (g.wheel) {\r\n      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\r\n        g.mouse[1] = t.invert(g.mouse[0] = p);\r\n      }\r\n      clearTimeout(g.wheel);\r\n    }\r\n\r\n    // If this wheel event won’t trigger a transform change, ignore it.\r\n    else if (t.k === k) return;\r\n\r\n    // Otherwise, capture the mouse point and location at the start.\r\n    else {\r\n      g.mouse = [p, t.invert(p)];\r\n      interrupt(this);\r\n      g.start();\r\n    }\r\n\r\n    noevent(event);\r\n    g.wheel = setTimeout(wheelidled, wheelDelay);\r\n    g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\r\n\r\n    function wheelidled() {\r\n      g.wheel = null;\r\n      g.end();\r\n    }\r\n  }\r\n\r\n  function mousedowned(event, ...args) {\r\n    if (touchending || !filter.apply(this, arguments)) return;\r\n    var currentTarget = event.currentTarget,\r\n        g = gesture(this, args, true).event(event),\r\n        v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\r\n        p = pointer(event, currentTarget),\r\n        x0 = event.clientX,\r\n        y0 = event.clientY;\r\n\r\n    dragDisable(event.view);\r\n    nopropagation(event);\r\n    g.mouse = [p, this.__zoom.invert(p)];\r\n    interrupt(this);\r\n    g.start();\r\n\r\n    function mousemoved(event) {\r\n      noevent(event);\r\n      if (!g.moved) {\r\n        var dx = event.clientX - x0, dy = event.clientY - y0;\r\n        g.moved = dx * dx + dy * dy > clickDistance2;\r\n      }\r\n      g.event(event)\r\n       .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\r\n    }\r\n\r\n    function mouseupped(event) {\r\n      v.on(\"mousemove.zoom mouseup.zoom\", null);\r\n      dragEnable(event.view, g.moved);\r\n      noevent(event);\r\n      g.event(event).end();\r\n    }\r\n  }\r\n\r\n  function dblclicked(event, ...args) {\r\n    if (!filter.apply(this, arguments)) return;\r\n    var t0 = this.__zoom,\r\n        p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\r\n        p1 = t0.invert(p0),\r\n        k1 = t0.k * (event.shiftKey ? 0.5 : 2),\r\n        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\r\n\r\n    noevent(event);\r\n    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\r\n    else select(this).call(zoom.transform, t1, p0, event);\r\n  }\r\n\r\n  function touchstarted(event, ...args) {\r\n    if (!filter.apply(this, arguments)) return;\r\n    var touches = event.touches,\r\n        n = touches.length,\r\n        g = gesture(this, args, event.changedTouches.length === n).event(event),\r\n        started, i, t, p;\r\n\r\n    nopropagation(event);\r\n    for (i = 0; i < n; ++i) {\r\n      t = touches[i], p = pointer(t, this);\r\n      p = [p, this.__zoom.invert(p), t.identifier];\r\n      if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\r\n      else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\r\n    }\r\n\r\n    if (touchstarting) touchstarting = clearTimeout(touchstarting);\r\n\r\n    if (started) {\r\n      if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\r\n      interrupt(this);\r\n      g.start();\r\n    }\r\n  }\r\n\r\n  function touchmoved(event, ...args) {\r\n    if (!this.__zooming) return;\r\n    var g = gesture(this, args).event(event),\r\n        touches = event.changedTouches,\r\n        n = touches.length, i, t, p, l;\r\n\r\n    noevent(event);\r\n    for (i = 0; i < n; ++i) {\r\n      t = touches[i], p = pointer(t, this);\r\n      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\r\n      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\r\n    }\r\n    t = g.that.__zoom;\r\n    if (g.touch1) {\r\n      var p0 = g.touch0[0], l0 = g.touch0[1],\r\n          p1 = g.touch1[0], l1 = g.touch1[1],\r\n          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\r\n          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\r\n      t = scale(t, Math.sqrt(dp / dl));\r\n      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\r\n      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\r\n    }\r\n    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\r\n    else return;\r\n\r\n    g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\r\n  }\r\n\r\n  function touchended(event, ...args) {\r\n    if (!this.__zooming) return;\r\n    var g = gesture(this, args).event(event),\r\n        touches = event.changedTouches,\r\n        n = touches.length, i, t;\r\n\r\n    nopropagation(event);\r\n    if (touchending) clearTimeout(touchending);\r\n    touchending = setTimeout(function() { touchending = null; }, touchDelay);\r\n    for (i = 0; i < n; ++i) {\r\n      t = touches[i];\r\n      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\r\n      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\r\n    }\r\n    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\r\n    if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\r\n    else {\r\n      g.end();\r\n      // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\r\n      if (g.taps === 2) {\r\n        t = pointer(t, this);\r\n        if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\r\n          var p = select(this).on(\"dblclick.zoom\");\r\n          if (p) p.apply(this, arguments);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  zoom.wheelDelta = function(_) {\r\n    return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\r\n  };\r\n\r\n  zoom.filter = function(_) {\r\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\r\n  };\r\n\r\n  zoom.touchable = function(_) {\r\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\r\n  };\r\n\r\n  zoom.extent = function(_) {\r\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\r\n  };\r\n\r\n  zoom.scaleExtent = function(_) {\r\n    return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\r\n  };\r\n\r\n  zoom.translateExtent = function(_) {\r\n    return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\r\n  };\r\n\r\n  zoom.constrain = function(_) {\r\n    return arguments.length ? (constrain = _, zoom) : constrain;\r\n  };\r\n\r\n  zoom.duration = function(_) {\r\n    return arguments.length ? (duration = +_, zoom) : duration;\r\n  };\r\n\r\n  zoom.interpolate = function(_) {\r\n    return arguments.length ? (interpolate = _, zoom) : interpolate;\r\n  };\r\n\r\n  zoom.on = function() {\r\n    var value = listeners.on.apply(listeners, arguments);\r\n    return value === listeners ? zoom : value;\r\n  };\r\n\r\n  zoom.clickDistance = function(_) {\r\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\r\n  };\r\n\r\n  zoom.tapDistance = function(_) {\r\n    return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\r\n  };\r\n\r\n  return zoom;\r\n}\r\n","export default function cumsum(values, valueof) {\r\n  var sum = 0, index = 0;\r\n  return Float64Array.from(values, valueof === undefined\r\n    ? v => (sum += +v || 0)\r\n    : v => (sum += +valueof(v, index++, values) || 0));\r\n}","import {InternSet} from \"internmap\";\r\n\r\nexport default function difference(values, ...others) {\r\n  values = new InternSet(values);\r\n  for (const other of others) {\r\n    for (const value of other) {\r\n      values.delete(value);\r\n    }\r\n  }\r\n  return values;\r\n}\r\n","import {InternSet} from \"internmap\";\r\n\r\nexport default function disjoint(values, other) {\r\n  const iterator = other[Symbol.iterator](), set = new InternSet();\r\n  for (const v of values) {\r\n    if (set.has(v)) return false;\r\n    let value, done;\r\n    while (({value, done} = iterator.next())) {\r\n      if (done) break;\r\n      if (Object.is(v, value)) return false;\r\n      set.add(value);\r\n    }\r\n  }\r\n  return true;\r\n}\r\n","export const linear = t => +t;\r\n","export default function every(values, test) {\r\n  if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\r\n  let index = -1;\r\n  for (const value of values) {\r\n    if (!test(value, ++index, values)) {\r\n      return false;\r\n    }\r\n  }\r\n  return true;\r\n}\r\n","export default function filter(values, test) {\r\n  if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\r\n  const array = [];\r\n  let index = -1;\r\n  for (const value of values) {\r\n    if (test(value, ++index, values)) {\r\n      array.push(value);\r\n    }\r\n  }\r\n  return array;\r\n}\r\n","export default function(x, y) {\r\n  var nodes, strength = 1;\r\n\r\n  if (x == null) x = 0;\r\n  if (y == null) y = 0;\r\n\r\n  function force() {\r\n    var i,\r\n        n = nodes.length,\r\n        node,\r\n        sx = 0,\r\n        sy = 0;\r\n\r\n    for (i = 0; i < n; ++i) {\r\n      node = nodes[i], sx += node.x, sy += node.y;\r\n    }\r\n\r\n    for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\r\n      node = nodes[i], node.x -= sx, node.y -= sy;\r\n    }\r\n  }\r\n\r\n  force.initialize = function(_) {\r\n    nodes = _;\r\n  };\r\n\r\n  force.x = function(_) {\r\n    return arguments.length ? (x = +_, force) : x;\r\n  };\r\n\r\n  force.y = function(_) {\r\n    return arguments.length ? (y = +_, force) : y;\r\n  };\r\n\r\n  force.strength = function(_) {\r\n    return arguments.length ? (strength = +_, force) : strength;\r\n  };\r\n\r\n  return force;\r\n}\r\n","import {quadtree} from \"d3-quadtree\";\r\nimport constant from \"./constant.js\";\r\nimport jiggle from \"./jiggle.js\";\r\nimport {x, y} from \"./simulation.js\";\r\n\r\nexport default function() {\r\n  var nodes,\r\n      node,\r\n      random,\r\n      alpha,\r\n      strength = constant(-30),\r\n      strengths,\r\n      distanceMin2 = 1,\r\n      distanceMax2 = Infinity,\r\n      theta2 = 0.81;\r\n\r\n  function force(_) {\r\n    var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\r\n    for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\r\n  }\r\n\r\n  function initialize() {\r\n    if (!nodes) return;\r\n    var i, n = nodes.length, node;\r\n    strengths = new Array(n);\r\n    for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\r\n  }\r\n\r\n  function accumulate(quad) {\r\n    var strength = 0, q, c, weight = 0, x, y, i;\r\n\r\n    // For internal nodes, accumulate forces from child quadrants.\r\n    if (quad.length) {\r\n      for (x = y = i = 0; i < 4; ++i) {\r\n        if ((q = quad[i]) && (c = Math.abs(q.value))) {\r\n          strength += q.value, weight += c, x += c * q.x, y += c * q.y;\r\n        }\r\n      }\r\n      quad.x = x / weight;\r\n      quad.y = y / weight;\r\n    }\r\n\r\n    // For leaf nodes, accumulate forces from coincident quadrants.\r\n    else {\r\n      q = quad;\r\n      q.x = q.data.x;\r\n      q.y = q.data.y;\r\n      do strength += strengths[q.data.index];\r\n      while (q = q.next);\r\n    }\r\n\r\n    quad.value = strength;\r\n  }\r\n\r\n  function apply(quad, x1, _, x2) {\r\n    if (!quad.value) return true;\r\n\r\n    var x = quad.x - node.x,\r\n        y = quad.y - node.y,\r\n        w = x2 - x1,\r\n        l = x * x + y * y;\r\n\r\n    // Apply the Barnes-Hut approximation if possible.\r\n    // Limit forces for very close nodes; randomize direction if coincident.\r\n    if (w * w / theta2 < l) {\r\n      if (l < distanceMax2) {\r\n        if (x === 0) x = jiggle(random), l += x * x;\r\n        if (y === 0) y = jiggle(random), l += y * y;\r\n        if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\r\n        node.vx += x * quad.value * alpha / l;\r\n        node.vy += y * quad.value * alpha / l;\r\n      }\r\n      return true;\r\n    }\r\n\r\n    // Otherwise, process points directly.\r\n    else if (quad.length || l >= distanceMax2) return;\r\n\r\n    // Limit forces for very close nodes; randomize direction if coincident.\r\n    if (quad.data !== node || quad.next) {\r\n      if (x === 0) x = jiggle(random), l += x * x;\r\n      if (y === 0) y = jiggle(random), l += y * y;\r\n      if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\r\n    }\r\n\r\n    do if (quad.data !== node) {\r\n      w = strengths[quad.data.index] * alpha / l;\r\n      node.vx += x * w;\r\n      node.vy += y * w;\r\n    } while (quad = quad.next);\r\n  }\r\n\r\n  force.initialize = function(_nodes, _random) {\r\n    nodes = _nodes;\r\n    random = _random;\r\n    initialize();\r\n  };\r\n\r\n  force.strength = function(_) {\r\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\r\n  };\r\n\r\n  force.distanceMin = function(_) {\r\n    return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\r\n  };\r\n\r\n  force.distanceMax = function(_) {\r\n    return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\r\n  };\r\n\r\n  force.theta = function(_) {\r\n    return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\r\n  };\r\n\r\n  return force;\r\n}\r\n","import constant from \"./constant.js\";\r\n\r\nexport default function(radius, x, y) {\r\n  var nodes,\r\n      strength = constant(0.1),\r\n      strengths,\r\n      radiuses;\r\n\r\n  if (typeof radius !== \"function\") radius = constant(+radius);\r\n  if (x == null) x = 0;\r\n  if (y == null) y = 0;\r\n\r\n  function force(alpha) {\r\n    for (var i = 0, n = nodes.length; i < n; ++i) {\r\n      var node = nodes[i],\r\n          dx = node.x - x || 1e-6,\r\n          dy = node.y - y || 1e-6,\r\n          r = Math.sqrt(dx * dx + dy * dy),\r\n          k = (radiuses[i] - r) * strengths[i] * alpha / r;\r\n      node.vx += dx * k;\r\n      node.vy += dy * k;\r\n    }\r\n  }\r\n\r\n  function initialize() {\r\n    if (!nodes) return;\r\n    var i, n = nodes.length;\r\n    strengths = new Array(n);\r\n    radiuses = new Array(n);\r\n    for (i = 0; i < n; ++i) {\r\n      radiuses[i] = +radius(nodes[i], i, nodes);\r\n      strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);\r\n    }\r\n  }\r\n\r\n  force.initialize = function(_) {\r\n    nodes = _, initialize();\r\n  };\r\n\r\n  force.strength = function(_) {\r\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\r\n  };\r\n\r\n  force.radius = function(_) {\r\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\r\n  };\r\n\r\n  force.x = function(_) {\r\n    return arguments.length ? (x = +_, force) : x;\r\n  };\r\n\r\n  force.y = function(_) {\r\n    return arguments.length ? (y = +_, force) : y;\r\n  };\r\n\r\n  return force;\r\n}\r\n","import constant from \"./constant.js\";\r\n\r\nexport default function(x) {\r\n  var strength = constant(0.1),\r\n      nodes,\r\n      strengths,\r\n      xz;\r\n\r\n  if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\r\n\r\n  function force(alpha) {\r\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\r\n      node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\r\n    }\r\n  }\r\n\r\n  function initialize() {\r\n    if (!nodes) return;\r\n    var i, n = nodes.length;\r\n    strengths = new Array(n);\r\n    xz = new Array(n);\r\n    for (i = 0; i < n; ++i) {\r\n      strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\r\n    }\r\n  }\r\n\r\n  force.initialize = function(_) {\r\n    nodes = _;\r\n    initialize();\r\n  };\r\n\r\n  force.strength = function(_) {\r\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\r\n  };\r\n\r\n  force.x = function(_) {\r\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\r\n  };\r\n\r\n  return force;\r\n}\r\n","import constant from \"./constant.js\";\r\n\r\nexport default function(y) {\r\n  var strength = constant(0.1),\r\n      nodes,\r\n      strengths,\r\n      yz;\r\n\r\n  if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\r\n\r\n  function force(alpha) {\r\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\r\n      node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\r\n    }\r\n  }\r\n\r\n  function initialize() {\r\n    if (!nodes) return;\r\n    var i, n = nodes.length;\r\n    strengths = new Array(n);\r\n    yz = new Array(n);\r\n    for (i = 0; i < n; ++i) {\r\n      strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\r\n    }\r\n  }\r\n\r\n  force.initialize = function(_) {\r\n    nodes = _;\r\n    initialize();\r\n  };\r\n\r\n  force.strength = function(_) {\r\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\r\n  };\r\n\r\n  force.y = function(_) {\r\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\r\n  };\r\n\r\n  return force;\r\n}\r\n","import {epsilon} from \"../math.js\";\r\nimport albers from \"./albers.js\";\r\nimport conicEqualArea from \"./conicEqualArea.js\";\r\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\r\n\r\n// The projections must have mutually exclusive clip regions on the sphere,\r\n// as this will avoid emitting interleaving lines and polygons.\r\nfunction multiplex(streams) {\r\n  var n = streams.length;\r\n  return {\r\n    point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\r\n    sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\r\n    lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\r\n    lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\r\n    polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\r\n    polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\r\n  };\r\n}\r\n\r\n// A composite projection for the United States, configured by default for\r\n// 960×500. The projection also works quite well at 960×600 if you change the\r\n// scale to 1285 and adjust the translate accordingly. The set of standard\r\n// parallels for each region comes from USGS, which is published here:\r\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\r\nexport default function() {\r\n  var cache,\r\n      cacheStream,\r\n      lower48 = albers(), lower48Point,\r\n      alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\r\n      hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\r\n      point, pointStream = {point: function(x, y) { point = [x, y]; }};\r\n\r\n  function albersUsa(coordinates) {\r\n    var x = coordinates[0], y = coordinates[1];\r\n    return point = null,\r\n        (lower48Point.point(x, y), point)\r\n        || (alaskaPoint.point(x, y), point)\r\n        || (hawaiiPoint.point(x, y), point);\r\n  }\r\n\r\n  albersUsa.invert = function(coordinates) {\r\n    var k = lower48.scale(),\r\n        t = lower48.translate(),\r\n        x = (coordinates[0] - t[0]) / k,\r\n        y = (coordinates[1] - t[1]) / k;\r\n    return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\r\n        : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\r\n        : lower48).invert(coordinates);\r\n  };\r\n\r\n  albersUsa.stream = function(stream) {\r\n    return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\r\n  };\r\n\r\n  albersUsa.precision = function(_) {\r\n    if (!arguments.length) return lower48.precision();\r\n    lower48.precision(_), alaska.precision(_), hawaii.precision(_);\r\n    return reset();\r\n  };\r\n\r\n  albersUsa.scale = function(_) {\r\n    if (!arguments.length) return lower48.scale();\r\n    lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\r\n    return albersUsa.translate(lower48.translate());\r\n  };\r\n\r\n  albersUsa.translate = function(_) {\r\n    if (!arguments.length) return lower48.translate();\r\n    var k = lower48.scale(), x = +_[0], y = +_[1];\r\n\r\n    lower48Point = lower48\r\n        .translate(_)\r\n        .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\r\n        .stream(pointStream);\r\n\r\n    alaskaPoint = alaska\r\n        .translate([x - 0.307 * k, y + 0.201 * k])\r\n        .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\r\n        .stream(pointStream);\r\n\r\n    hawaiiPoint = hawaii\r\n        .translate([x - 0.205 * k, y + 0.212 * k])\r\n        .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\r\n        .stream(pointStream);\r\n\r\n    return reset();\r\n  };\r\n\r\n  albersUsa.fitExtent = function(extent, object) {\r\n    return fitExtent(albersUsa, extent, object);\r\n  };\r\n\r\n  albersUsa.fitSize = function(size, object) {\r\n    return fitSize(albersUsa, size, object);\r\n  };\r\n\r\n  albersUsa.fitWidth = function(width, object) {\r\n    return fitWidth(albersUsa, width, object);\r\n  };\r\n\r\n  albersUsa.fitHeight = function(height, object) {\r\n    return fitHeight(albersUsa, height, object);\r\n  };\r\n\r\n  function reset() {\r\n    cache = cacheStream = null;\r\n    return albersUsa;\r\n  }\r\n\r\n  return albersUsa.scale(1070);\r\n}\r\n","import clipRectangle from \"./rectangle.js\";\r\n\r\nexport default function() {\r\n  var x0 = 0,\r\n      y0 = 0,\r\n      x1 = 960,\r\n      y1 = 500,\r\n      cache,\r\n      cacheStream,\r\n      clip;\r\n\r\n  return clip = {\r\n    stream: function(stream) {\r\n      return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);\r\n    },\r\n    extent: function(_) {\r\n      return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\r\n    }\r\n  };\r\n}\r\n","import clipRectangle from \"../clip/rectangle.js\";\r\nimport identity from \"../identity.js\";\r\nimport {transformer} from \"../transform.js\";\r\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\r\nimport {cos, degrees, radians, sin} from \"../math.js\";\r\n\r\nexport default function() {\r\n  var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\r\n      alpha = 0, ca, sa, // angle\r\n      x0 = null, y0, x1, y1, // clip extent\r\n      kx = 1, ky = 1,\r\n      transform = transformer({\r\n        point: function(x, y) {\r\n          var p = projection([x, y])\r\n          this.stream.point(p[0], p[1]);\r\n        }\r\n      }),\r\n      postclip = identity,\r\n      cache,\r\n      cacheStream;\r\n\r\n  function reset() {\r\n    kx = k * sx;\r\n    ky = k * sy;\r\n    cache = cacheStream = null;\r\n    return projection;\r\n  }\r\n\r\n  function projection (p) {\r\n    var x = p[0] * kx, y = p[1] * ky;\r\n    if (alpha) {\r\n      var t = y * ca - x * sa;\r\n      x = x * ca + y * sa;\r\n      y = t;\r\n    }    \r\n    return [x + tx, y + ty];\r\n  }\r\n  projection.invert = function(p) {\r\n    var x = p[0] - tx, y = p[1] - ty;\r\n    if (alpha) {\r\n      var t = y * ca + x * sa;\r\n      x = x * ca - y * sa;\r\n      y = t;\r\n    }\r\n    return [x / kx, y / ky];\r\n  };\r\n  projection.stream = function(stream) {\r\n    return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\r\n  };\r\n  projection.postclip = function(_) {\r\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\r\n  };\r\n  projection.clipExtent = function(_) {\r\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\r\n  };\r\n  projection.scale = function(_) {\r\n    return arguments.length ? (k = +_, reset()) : k;\r\n  };\r\n  projection.translate = function(_) {\r\n    return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\r\n  }\r\n  projection.angle = function(_) {\r\n    return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\r\n  };\r\n  projection.reflectX = function(_) {\r\n    return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\r\n  };\r\n  projection.reflectY = function(_) {\r\n    return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\r\n  };\r\n  projection.fitExtent = function(extent, object) {\r\n    return fitExtent(projection, extent, object);\r\n  };\r\n  projection.fitSize = function(size, object) {\r\n    return fitSize(projection, size, object);\r\n  };\r\n  projection.fitWidth = function(width, object) {\r\n    return fitWidth(projection, width, object);\r\n  };\r\n  projection.fitHeight = function(height, object) {\r\n    return fitHeight(projection, height, object);\r\n  };\r\n\r\n  return projection;\r\n}\r\n","import {asin, atan2, cos, degrees, haversin, radians, sin, sqrt} from \"./math.js\";\r\n\r\nexport default function(a, b) {\r\n  var x0 = a[0] * radians,\r\n      y0 = a[1] * radians,\r\n      x1 = b[0] * radians,\r\n      y1 = b[1] * radians,\r\n      cy0 = cos(y0),\r\n      sy0 = sin(y0),\r\n      cy1 = cos(y1),\r\n      sy1 = sin(y1),\r\n      kx0 = cy0 * cos(x0),\r\n      ky0 = cy0 * sin(x0),\r\n      kx1 = cy1 * cos(x1),\r\n      ky1 = cy1 * sin(x1),\r\n      d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\r\n      k = sin(d);\r\n\r\n  var interpolate = d ? function(t) {\r\n    var B = sin(t *= d) / k,\r\n        A = sin(d - t) / k,\r\n        x = A * kx0 + B * kx1,\r\n        y = A * ky0 + B * ky1,\r\n        z = A * sy0 + B * sy1;\r\n    return [\r\n      atan2(y, x) * degrees,\r\n      atan2(z, sqrt(x * x + y * y)) * degrees\r\n    ];\r\n  } : function() {\r\n    return [x0 * degrees, y0 * degrees];\r\n  };\r\n\r\n  interpolate.distance = d;\r\n\r\n  return interpolate;\r\n}\r\n","import identity from \"../identity.js\";\r\nimport stream from \"../stream.js\";\r\nimport pathArea from \"./area.js\";\r\nimport pathBounds from \"./bounds.js\";\r\nimport pathCentroid from \"./centroid.js\";\r\nimport PathContext from \"./context.js\";\r\nimport pathMeasure from \"./measure.js\";\r\nimport PathString from \"./string.js\";\r\n\r\nexport default function(projection, context) {\r\n  let digits = 3,\r\n      pointRadius = 4.5,\r\n      projectionStream,\r\n      contextStream;\r\n\r\n  function path(object) {\r\n    if (object) {\r\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\r\n      stream(object, projectionStream(contextStream));\r\n    }\r\n    return contextStream.result();\r\n  }\r\n\r\n  path.area = function(object) {\r\n    stream(object, projectionStream(pathArea));\r\n    return pathArea.result();\r\n  };\r\n\r\n  path.measure = function(object) {\r\n    stream(object, projectionStream(pathMeasure));\r\n    return pathMeasure.result();\r\n  };\r\n\r\n  path.bounds = function(object) {\r\n    stream(object, projectionStream(pathBounds));\r\n    return pathBounds.result();\r\n  };\r\n\r\n  path.centroid = function(object) {\r\n    stream(object, projectionStream(pathCentroid));\r\n    return pathCentroid.result();\r\n  };\r\n\r\n  path.projection = function(_) {\r\n    if (!arguments.length) return projection;\r\n    projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\r\n    return path;\r\n  };\r\n\r\n  path.context = function(_) {\r\n    if (!arguments.length) return context;\r\n    contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _);\r\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\r\n    return path;\r\n  };\r\n\r\n  path.pointRadius = function(_) {\r\n    if (!arguments.length) return pointRadius;\r\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\r\n    return path;\r\n  };\r\n\r\n  path.digits = function(_) {\r\n    if (!arguments.length) return digits;\r\n    if (_ == null) digits = null;\r\n    else {\r\n      const d = Math.floor(_);\r\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\r\n      digits = d;\r\n    }\r\n    if (context === null) contextStream = new PathString(digits);\r\n    return path;\r\n  };\r\n\r\n  return path.projection(projection).digits(digits).context(context);\r\n}\r\n","import ascending from \"./ascending.js\";\r\nimport maxIndex from \"./maxIndex.js\";\r\n\r\nexport default function greatestIndex(values, compare = ascending) {\r\n  if (compare.length === 1) return maxIndex(values, compare);\r\n  let maxValue;\r\n  let max = -1;\r\n  let index = -1;\r\n  for (const value of values) {\r\n    ++index;\r\n    if (max < 0\r\n        ? compare(value, value) === 0\r\n        : compare(value, maxValue) > 0) {\r\n      maxValue = value;\r\n      max = index;\r\n    }\r\n  }\r\n  return max;\r\n}\r\n","import ascending from \"./ascending.js\";\r\nimport group, {rollup} from \"./group.js\";\r\nimport sort from \"./sort.js\";\r\n\r\nexport default function groupSort(values, reduce, key) {\r\n  return (reduce.length !== 2\r\n    ? sort(rollup(values, reduce, key), (([ak, av], [bk, bv]) => ascending(av, bv) || ascending(ak, bk)))\r\n    : sort(group(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || ascending(ak, bk))))\r\n    .map(([key]) => key);\r\n}\r\n","export default function(input, init) {\r\n  return new Promise(function(resolve, reject) {\r\n    var image = new Image;\r\n    for (var key in init) image[key] = init[key];\r\n    image.onerror = reject;\r\n    image.onload = function() { resolve(image); };\r\n    image.src = input;\r\n  });\r\n}\r\n","export default function(t) {\r\n  t = Math.max(0, Math.min(1, t));\r\n  return \"rgb(\"\r\n      + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\r\n      + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\r\n      + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\r\n      + \")\";\r\n}\r\n","export default function(range) {\r\n  var n = range.length;\r\n  return function(t) {\r\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\r\n  };\r\n}\r\n","import {hue} from \"./color.js\";\r\n\r\nexport default function(a, b) {\r\n  var i = hue(+a, +b);\r\n  return function(t) {\r\n    var x = i(t);\r\n    return x - 360 * Math.floor(x / 360);\r\n  };\r\n}\r\n","import {lab as colorLab} from \"d3-color\";\r\nimport color from \"./color.js\";\r\n\r\nexport default function lab(start, end) {\r\n  var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\r\n      a = color(start.a, end.a),\r\n      b = color(start.b, end.b),\r\n      opacity = color(start.opacity, end.opacity);\r\n  return function(t) {\r\n    start.l = l(t);\r\n    start.a = a(t);\r\n    start.b = b(t);\r\n    start.opacity = opacity(t);\r\n    return start + \"\";\r\n  };\r\n}\r\n","export default function(t) {\r\n  t = Math.max(0, Math.min(1, t));\r\n  return \"rgb(\"\r\n      + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\r\n      + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\r\n      + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\r\n      + \")\";\r\n}\r\n","import {Timer, now} from \"./timer.js\";\r\n\r\nexport default function(callback, delay, time) {\r\n  var t = new Timer, total = delay;\r\n  if (delay == null) return t.restart(callback, delay, time), t;\r\n  t._restart = t.restart;\r\n  t.restart = function(callback, delay, time) {\r\n    delay = +delay, time = time == null ? now() : +time;\r\n    t._restart(function tick(elapsed) {\r\n      elapsed += total;\r\n      t._restart(tick, total += delay, time);\r\n      callback(elapsed);\r\n    }, delay, time);\r\n  }\r\n  t.restart(callback, delay, time);\r\n  return t;\r\n}\r\n","import ascending from \"./ascending.js\";\r\n\r\nexport default function least(values, compare = ascending) {\r\n  let min;\r\n  let defined = false;\r\n  if (compare.length === 1) {\r\n    let minValue;\r\n    for (const element of values) {\r\n      const value = compare(element);\r\n      if (defined\r\n          ? ascending(value, minValue) < 0\r\n          : ascending(value, value) === 0) {\r\n        min = element;\r\n        minValue = value;\r\n        defined = true;\r\n      }\r\n    }\r\n  } else {\r\n    for (const value of values) {\r\n      if (defined\r\n          ? compare(value, min) < 0\r\n          : compare(value, value) === 0) {\r\n        min = value;\r\n        defined = true;\r\n      }\r\n    }\r\n  }\r\n  return min;\r\n}\r\n","export default function map(values, mapper) {\r\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\r\n  if (typeof mapper !== \"function\") throw new TypeError(\"mapper is not a function\");\r\n  return Array.from(values, (value, index) => mapper(value, index, values));\r\n}\r\n","import quantile, {quantileIndex} from \"./quantile.js\";\r\n\r\nexport default function median(values, valueof) {\r\n  return quantile(values, 0.5, valueof);\r\n}\r\n\r\nexport function medianIndex(values, valueof) {\r\n  return quantileIndex(values, 0.5, valueof);\r\n}\r\n","import {InternMap} from \"internmap\";\r\n\r\nexport default function mode(values, valueof) {\r\n  const counts = new InternMap();\r\n  if (valueof === undefined) {\r\n    for (let value of values) {\r\n      if (value != null && value >= value) {\r\n        counts.set(value, (counts.get(value) || 0) + 1);\r\n      }\r\n    }\r\n  } else {\r\n    let index = -1;\r\n    for (let value of values) {\r\n      if ((value = valueof(value, ++index, values)) != null && value >= value) {\r\n        counts.set(value, (counts.get(value) || 0) + 1);\r\n      }\r\n    }\r\n  }\r\n  let modeValue;\r\n  let modeCount = 0;\r\n  for (const [value, count] of counts) {\r\n    if (count > modeCount) {\r\n      modeCount = count;\r\n      modeValue = value;\r\n    }\r\n  }\r\n  return modeValue;\r\n}\r\n","import roundNode from \"./treemap/round.js\";\r\nimport treemapDice from \"./treemap/dice.js\";\r\n\r\nexport default function() {\r\n  var dx = 1,\r\n      dy = 1,\r\n      padding = 0,\r\n      round = false;\r\n\r\n  function partition(root) {\r\n    var n = root.height + 1;\r\n    root.x0 =\r\n    root.y0 = padding;\r\n    root.x1 = dx;\r\n    root.y1 = dy / n;\r\n    root.eachBefore(positionNode(dy, n));\r\n    if (round) root.eachBefore(roundNode);\r\n    return root;\r\n  }\r\n\r\n  function positionNode(dy, n) {\r\n    return function(node) {\r\n      if (node.children) {\r\n        treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\r\n      }\r\n      var x0 = node.x0,\r\n          y0 = node.y0,\r\n          x1 = node.x1 - padding,\r\n          y1 = node.y1 - padding;\r\n      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\r\n      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\r\n      node.x0 = x0;\r\n      node.y0 = y0;\r\n      node.x1 = x1;\r\n      node.y1 = y1;\r\n    };\r\n  }\r\n\r\n  partition.round = function(x) {\r\n    return arguments.length ? (round = !!x, partition) : round;\r\n  };\r\n\r\n  partition.size = function(x) {\r\n    return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\r\n  };\r\n\r\n  partition.padding = function(x) {\r\n    return arguments.length ? (padding = +x, partition) : padding;\r\n  };\r\n\r\n  return partition;\r\n}\r\n","import array from \"./array.js\";\r\nimport constant from \"./constant.js\";\r\nimport descending from \"./descending.js\";\r\nimport identity from \"./identity.js\";\r\nimport {tau} from \"./math.js\";\r\n\r\nexport default function() {\r\n  var value = identity,\r\n      sortValues = descending,\r\n      sort = null,\r\n      startAngle = constant(0),\r\n      endAngle = constant(tau),\r\n      padAngle = constant(0);\r\n\r\n  function pie(data) {\r\n    var i,\r\n        n = (data = array(data)).length,\r\n        j,\r\n        k,\r\n        sum = 0,\r\n        index = new Array(n),\r\n        arcs = new Array(n),\r\n        a0 = +startAngle.apply(this, arguments),\r\n        da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\r\n        a1,\r\n        p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\r\n        pa = p * (da < 0 ? -1 : 1),\r\n        v;\r\n\r\n    for (i = 0; i < n; ++i) {\r\n      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\r\n        sum += v;\r\n      }\r\n    }\r\n\r\n    // Optionally sort the arcs by previously-computed values or by data.\r\n    if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\r\n    else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\r\n\r\n    // Compute the arcs! They are stored in the original data's order.\r\n    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\r\n      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\r\n        data: data[j],\r\n        index: i,\r\n        value: v,\r\n        startAngle: a0,\r\n        endAngle: a1,\r\n        padAngle: p\r\n      };\r\n    }\r\n\r\n    return arcs;\r\n  }\r\n\r\n  pie.value = function(_) {\r\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\r\n  };\r\n\r\n  pie.sortValues = function(_) {\r\n    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\r\n  };\r\n\r\n  pie.sort = function(_) {\r\n    return arguments.length ? (sort = _, sortValues = null, pie) : sort;\r\n  };\r\n\r\n  pie.startAngle = function(_) {\r\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\r\n  };\r\n\r\n  pie.endAngle = function(_) {\r\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\r\n  };\r\n\r\n  pie.padAngle = function(_) {\r\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\r\n  };\r\n\r\n  return pie;\r\n}\r\n","import pointer from \"./pointer.js\";\r\nimport sourceEvent from \"./sourceEvent.js\";\r\n\r\nexport default function(events, node) {\r\n  if (events.target) { // i.e., instanceof Event, not TouchList or iterable\r\n    events = sourceEvent(events);\r\n    if (node === undefined) node = events.currentTarget;\r\n    events = events.touches || [events];\r\n  }\r\n  return Array.from(events, event => pointer(event, node));\r\n}\r\n","export default function(polygon) {\r\n  var i = -1,\r\n      n = polygon.length,\r\n      a,\r\n      b = polygon[n - 1],\r\n      area = 0;\r\n\r\n  while (++i < n) {\r\n    a = b;\r\n    b = polygon[i];\r\n    area += a[1] * b[0] - a[0] * b[1];\r\n  }\r\n\r\n  return area / 2;\r\n}\r\n","export default function(polygon) {\r\n  var i = -1,\r\n      n = polygon.length,\r\n      x = 0,\r\n      y = 0,\r\n      a,\r\n      b = polygon[n - 1],\r\n      c,\r\n      k = 0;\r\n\r\n  while (++i < n) {\r\n    a = b;\r\n    b = polygon[i];\r\n    k += c = a[0] * b[1] - b[0] * a[1];\r\n    x += (a[0] + b[0]) * c;\r\n    y += (a[1] + b[1]) * c;\r\n  }\r\n\r\n  return k *= 3, [x / k, y / k];\r\n}\r\n","export default function(polygon, point) {\r\n  var n = polygon.length,\r\n      p = polygon[n - 1],\r\n      x = point[0], y = point[1],\r\n      x0 = p[0], y0 = p[1],\r\n      x1, y1,\r\n      inside = false;\r\n\r\n  for (var i = 0; i < n; ++i) {\r\n    p = polygon[i], x1 = p[0], y1 = p[1];\r\n    if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;\r\n    x0 = x1, y0 = y1;\r\n  }\r\n\r\n  return inside;\r\n}\r\n","export default function(polygon) {\r\n  var i = -1,\r\n      n = polygon.length,\r\n      b = polygon[n - 1],\r\n      xa,\r\n      ya,\r\n      xb = b[0],\r\n      yb = b[1],\r\n      perimeter = 0;\r\n\r\n  while (++i < n) {\r\n    xa = xb;\r\n    ya = yb;\r\n    b = polygon[i];\r\n    xb = b[0];\r\n    yb = b[1];\r\n    xa -= xb;\r\n    ya -= yb;\r\n    perimeter += Math.hypot(xa, ya);\r\n  }\r\n\r\n  return perimeter;\r\n}\r\n","export default function(interpolator, n) {\r\n  var samples = new Array(n);\r\n  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\r\n  return samples;\r\n}\r\n","import ascending from \"./ascending.js\";\r\nimport {ascendingDefined, compareDefined} from \"./sort.js\";\r\n\r\nexport default function rank(values, valueof = ascending) {\r\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\r\n  let V = Array.from(values);\r\n  const R = new Float64Array(V.length);\r\n  if (valueof.length !== 2) V = V.map(valueof), valueof = ascending;\r\n  const compareIndex = (i, j) => valueof(V[i], V[j]);\r\n  let k, r;\r\n  values = Uint32Array.from(V, (_, i) => i);\r\n  // Risky chaining due to Safari 14 https://github.com/d3/d3-array/issues/123\r\n  values.sort(valueof === ascending ? (i, j) => ascendingDefined(V[i], V[j]) : compareDefined(compareIndex));\r\n  values.forEach((j, i) => {\r\n      const c = compareIndex(j, k === undefined ? j : k);\r\n      if (c >= 0) {\r\n        if (k === undefined || c > 0) k = j, r = i;\r\n        R[j] = r;\r\n      } else {\r\n        R[j] = NaN;\r\n      }\r\n    });\r\n  return R;\r\n}\r\n","export default function reduce(values, reducer, value) {\r\n  if (typeof reducer !== \"function\") throw new TypeError(\"reducer is not a function\");\r\n  const iterator = values[Symbol.iterator]();\r\n  let done, next, index = -1;\r\n  if (arguments.length < 3) {\r\n    ({done, value} = iterator.next());\r\n    if (done) return;\r\n    ++index;\r\n  }\r\n  while (({done, value: next} = iterator.next()), !done) {\r\n    value = reducer(value, next, ++index, values);\r\n  }\r\n  return value;\r\n}\r\n","export default function reverse(values) {\r\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\r\n  return Array.from(values).reverse();\r\n}\r\n","import {linearish} from \"./linear.js\";\r\nimport number from \"./number.js\";\r\n\r\nexport default function identity(domain) {\r\n  var unknown;\r\n\r\n  function scale(x) {\r\n    return x == null || isNaN(x = +x) ? unknown : x;\r\n  }\r\n\r\n  scale.invert = scale;\r\n\r\n  scale.domain = scale.range = function(_) {\r\n    return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\r\n  };\r\n\r\n  scale.unknown = function(_) {\r\n    return arguments.length ? (unknown = _, scale) : unknown;\r\n  };\r\n\r\n  scale.copy = function() {\r\n    return identity(domain).unknown(unknown);\r\n  };\r\n\r\n  domain = arguments.length ? Array.from(domain, number) : [0, 1];\r\n\r\n  return linearish(scale);\r\n}\r\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\r\nimport {initRange} from \"./init.js\";\r\n\r\nexport default function quantile() {\r\n  var domain = [],\r\n      range = [],\r\n      thresholds = [],\r\n      unknown;\r\n\r\n  function rescale() {\r\n    var i = 0, n = Math.max(1, range.length);\r\n    thresholds = new Array(n - 1);\r\n    while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\r\n    return scale;\r\n  }\r\n\r\n  function scale(x) {\r\n    return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\r\n  }\r\n\r\n  scale.invertExtent = function(y) {\r\n    var i = range.indexOf(y);\r\n    return i < 0 ? [NaN, NaN] : [\r\n      i > 0 ? thresholds[i - 1] : domain[0],\r\n      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\r\n    ];\r\n  };\r\n\r\n  scale.domain = function(_) {\r\n    if (!arguments.length) return domain.slice();\r\n    domain = [];\r\n    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\r\n    domain.sort(ascending);\r\n    return rescale();\r\n  };\r\n\r\n  scale.range = function(_) {\r\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\r\n  };\r\n\r\n  scale.unknown = function(_) {\r\n    return arguments.length ? (unknown = _, scale) : unknown;\r\n  };\r\n\r\n  scale.quantiles = function() {\r\n    return thresholds.slice();\r\n  };\r\n\r\n  scale.copy = function() {\r\n    return quantile()\r\n        .domain(domain)\r\n        .range(range)\r\n        .unknown(unknown);\r\n  };\r\n\r\n  return initRange.apply(scale, arguments);\r\n}\r\n","import {bisect} from \"d3-array\";\r\nimport {linearish} from \"./linear.js\";\r\nimport {initRange} from \"./init.js\";\r\n\r\nexport default function quantize() {\r\n  var x0 = 0,\r\n      x1 = 1,\r\n      n = 1,\r\n      domain = [0.5],\r\n      range = [0, 1],\r\n      unknown;\r\n\r\n  function scale(x) {\r\n    return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\r\n  }\r\n\r\n  function rescale() {\r\n    var i = -1;\r\n    domain = new Array(n);\r\n    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\r\n    return scale;\r\n  }\r\n\r\n  scale.domain = function(_) {\r\n    return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\r\n  };\r\n\r\n  scale.range = function(_) {\r\n    return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\r\n  };\r\n\r\n  scale.invertExtent = function(y) {\r\n    var i = range.indexOf(y);\r\n    return i < 0 ? [NaN, NaN]\r\n        : i < 1 ? [x0, domain[0]]\r\n        : i >= n ? [domain[n - 1], x1]\r\n        : [domain[i - 1], domain[i]];\r\n  };\r\n\r\n  scale.unknown = function(_) {\r\n    return arguments.length ? (unknown = _, scale) : scale;\r\n  };\r\n\r\n  scale.thresholds = function() {\r\n    return domain.slice();\r\n  };\r\n\r\n  scale.copy = function() {\r\n    return quantize()\r\n        .domain([x0, x1])\r\n        .range(range)\r\n        .unknown(unknown);\r\n  };\r\n\r\n  return initRange.apply(linearish(scale), arguments);\r\n}\r\n","import {ascending, bisect, quantile} from \"d3-array\";\r\nimport {identity} from \"./continuous.js\";\r\nimport {initInterpolator} from \"./init.js\";\r\n\r\nexport default function sequentialQuantile() {\r\n  var domain = [],\r\n      interpolator = identity;\r\n\r\n  function scale(x) {\r\n    if (x != null && !isNaN(x = +x)) return interpolator((bisect(domain, x, 1) - 1) / (domain.length - 1));\r\n  }\r\n\r\n  scale.domain = function(_) {\r\n    if (!arguments.length) return domain.slice();\r\n    domain = [];\r\n    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\r\n    domain.sort(ascending);\r\n    return scale;\r\n  };\r\n\r\n  scale.interpolator = function(_) {\r\n    return arguments.length ? (interpolator = _, scale) : interpolator;\r\n  };\r\n\r\n  scale.range = function() {\r\n    return domain.map((d, i) => interpolator(i / (domain.length - 1)));\r\n  };\r\n\r\n  scale.quantiles = function(n) {\r\n    return Array.from({length: n + 1}, (_, i) => quantile(domain, i / n));\r\n  };\r\n\r\n  scale.copy = function() {\r\n    return sequentialQuantile(interpolator).domain(domain);\r\n  };\r\n\r\n  return initInterpolator.apply(scale, arguments);\r\n}\r\n","import {bisect} from \"d3-array\";\r\nimport {initRange} from \"./init.js\";\r\n\r\nexport default function threshold() {\r\n  var domain = [0.5],\r\n      range = [0, 1],\r\n      unknown,\r\n      n = 1;\r\n\r\n  function scale(x) {\r\n    return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\r\n  }\r\n\r\n  scale.domain = function(_) {\r\n    return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\r\n  };\r\n\r\n  scale.range = function(_) {\r\n    return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\r\n  };\r\n\r\n  scale.invertExtent = function(y) {\r\n    var i = range.indexOf(y);\r\n    return [domain[i - 1], domain[i]];\r\n  };\r\n\r\n  scale.unknown = function(_) {\r\n    return arguments.length ? (unknown = _, scale) : unknown;\r\n  };\r\n\r\n  scale.copy = function() {\r\n    return threshold()\r\n        .domain(domain)\r\n        .range(range)\r\n        .unknown(unknown);\r\n  };\r\n\r\n  return initRange.apply(scale, arguments);\r\n}\r\n","import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\r\nimport {utcFormat} from \"d3-time-format\";\r\nimport {calendar} from \"./time.js\";\r\nimport {initRange} from \"./init.js\";\r\n\r\nexport default function utcTime() {\r\n  return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\r\n}\r\n","import leastIndex from \"./leastIndex.js\";\r\n\r\nexport default function scan(values, compare) {\r\n  const index = leastIndex(values, compare);\r\n  return index < 0 ? undefined : index;\r\n}\r\n","export default function some(values, test) {\r\n  if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\r\n  let index = -1;\r\n  for (const value of values) {\r\n    if (test(value, ++index, values)) {\r\n      return true;\r\n    }\r\n  }\r\n  return false;\r\n}\r\n","export default function(series, order) {\r\n  if (!((n = series.length) > 0)) return;\r\n  for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\r\n    for (yp = yn = 0, i = 0; i < n; ++i) {\r\n      if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\r\n        d[0] = yp, d[1] = yp += dy;\r\n      } else if (dy < 0) {\r\n        d[1] = yn, d[0] = yn += dy;\r\n      } else {\r\n        d[0] = 0, d[1] = dy;\r\n      }\r\n    }\r\n  }\r\n}\r\n","import none from \"./none.js\";\r\n\r\nexport default function(series, order) {\r\n  if (!((n = series.length) > 0)) return;\r\n  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\r\n    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\r\n    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\r\n  }\r\n  none(series, order);\r\n}\r\n","import none from \"./none.js\";\r\n\r\nexport default function(series, order) {\r\n  if (!((n = series.length) > 0)) return;\r\n  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\r\n    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\r\n    s0[j][1] += s0[j][0] = -y / 2;\r\n  }\r\n  none(series, order);\r\n}\r\n","import none from \"./none.js\";\r\n\r\nexport default function(series, order) {\r\n  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\r\n  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\r\n    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\r\n      var si = series[order[i]],\r\n          sij0 = si[j][1] || 0,\r\n          sij1 = si[j - 1][1] || 0,\r\n          s3 = (sij0 - sij1) / 2;\r\n      for (var k = 0; k < i; ++k) {\r\n        var sk = series[order[k]],\r\n            skj0 = sk[j][1] || 0,\r\n            skj1 = sk[j - 1][1] || 0;\r\n        s3 += skj0 - skj1;\r\n      }\r\n      s1 += sij0, s2 += s3 * sij0;\r\n    }\r\n    s0[j - 1][1] += s0[j - 1][0] = y;\r\n    if (s1) y -= s2 / s1;\r\n  }\r\n  s0[j - 1][1] += s0[j - 1][0] = y;\r\n  none(series, order);\r\n}\r\n","import ascending from \"./ascending.js\";\r\n\r\nexport default function(series) {\r\n  return ascending(series).reverse();\r\n}\r\n","import appearance from \"./appearance.js\";\r\nimport {sum} from \"./ascending.js\";\r\n\r\nexport default function(series) {\r\n  var n = series.length,\r\n      i,\r\n      j,\r\n      sums = series.map(sum),\r\n      order = appearance(series),\r\n      top = 0,\r\n      bottom = 0,\r\n      tops = [],\r\n      bottoms = [];\r\n\r\n  for (i = 0; i < n; ++i) {\r\n    j = order[i];\r\n    if (top < bottom) {\r\n      top += sums[j];\r\n      tops.push(j);\r\n    } else {\r\n      bottom += sums[j];\r\n      bottoms.push(j);\r\n    }\r\n  }\r\n\r\n  return bottoms.reverse().concat(tops);\r\n}\r\n","import none from \"./none.js\";\r\n\r\nexport default function(series) {\r\n  return none(series).reverse();\r\n}\r\n","import superset from \"./superset.js\";\r\n\r\nexport default function subset(values, other) {\r\n  return superset(other, values);\r\n}\r\n","export default function sum(values, valueof) {\r\n  let sum = 0;\r\n  if (valueof === undefined) {\r\n    for (let value of values) {\r\n      if (value = +value) {\r\n        sum += value;\r\n      }\r\n    }\r\n  } else {\r\n    let index = -1;\r\n    for (let value of values) {\r\n      if (value = +valueof(value, ++index, values)) {\r\n        sum += value;\r\n      }\r\n    }\r\n  }\r\n  return sum;\r\n}\r\n","import count from \"../count.js\";\r\nimport quantile from \"../quantile.js\";\r\n\r\nexport default function thresholdFreedmanDiaconis(values, min, max) {\r\n  const c = count(values), d = quantile(values, 0.75) - quantile(values, 0.25);\r\n  return c && d ? Math.ceil((max - min) / (2 * d * Math.pow(c, -1 / 3))) : 1;\r\n}\r\n","import count from \"../count.js\";\r\nimport deviation from \"../deviation.js\";\r\n\r\nexport default function thresholdScott(values, min, max) {\r\n  const c = count(values), d = deviation(values);\r\n  return c && d ? Math.ceil((max - min) * Math.cbrt(c) / (3.49 * d)) : 1;\r\n}\r\n","import roundNode from \"./round.js\";\r\nimport squarify from \"./squarify.js\";\r\nimport {required} from \"../accessors.js\";\r\nimport constant, {constantZero} from \"../constant.js\";\r\n\r\nexport default function() {\r\n  var tile = squarify,\r\n      round = false,\r\n      dx = 1,\r\n      dy = 1,\r\n      paddingStack = [0],\r\n      paddingInner = constantZero,\r\n      paddingTop = constantZero,\r\n      paddingRight = constantZero,\r\n      paddingBottom = constantZero,\r\n      paddingLeft = constantZero;\r\n\r\n  function treemap(root) {\r\n    root.x0 =\r\n    root.y0 = 0;\r\n    root.x1 = dx;\r\n    root.y1 = dy;\r\n    root.eachBefore(positionNode);\r\n    paddingStack = [0];\r\n    if (round) root.eachBefore(roundNode);\r\n    return root;\r\n  }\r\n\r\n  function positionNode(node) {\r\n    var p = paddingStack[node.depth],\r\n        x0 = node.x0 + p,\r\n        y0 = node.y0 + p,\r\n        x1 = node.x1 - p,\r\n        y1 = node.y1 - p;\r\n    if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\r\n    if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\r\n    node.x0 = x0;\r\n    node.y0 = y0;\r\n    node.x1 = x1;\r\n    node.y1 = y1;\r\n    if (node.children) {\r\n      p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\r\n      x0 += paddingLeft(node) - p;\r\n      y0 += paddingTop(node) - p;\r\n      x1 -= paddingRight(node) - p;\r\n      y1 -= paddingBottom(node) - p;\r\n      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\r\n      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\r\n      tile(node, x0, y0, x1, y1);\r\n    }\r\n  }\r\n\r\n  treemap.round = function(x) {\r\n    return arguments.length ? (round = !!x, treemap) : round;\r\n  };\r\n\r\n  treemap.size = function(x) {\r\n    return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\r\n  };\r\n\r\n  treemap.tile = function(x) {\r\n    return arguments.length ? (tile = required(x), treemap) : tile;\r\n  };\r\n\r\n  treemap.padding = function(x) {\r\n    return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\r\n  };\r\n\r\n  treemap.paddingInner = function(x) {\r\n    return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\r\n  };\r\n\r\n  treemap.paddingOuter = function(x) {\r\n    return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\r\n  };\r\n\r\n  treemap.paddingTop = function(x) {\r\n    return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\r\n  };\r\n\r\n  treemap.paddingRight = function(x) {\r\n    return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\r\n  };\r\n\r\n  treemap.paddingBottom = function(x) {\r\n    return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\r\n  };\r\n\r\n  treemap.paddingLeft = function(x) {\r\n    return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\r\n  };\r\n\r\n  return treemap;\r\n}\r\n","export default function(parent, x0, y0, x1, y1) {\r\n  var nodes = parent.children,\r\n      i, n = nodes.length,\r\n      sum, sums = new Array(n + 1);\r\n\r\n  for (sums[0] = sum = i = 0; i < n; ++i) {\r\n    sums[i + 1] = sum += nodes[i].value;\r\n  }\r\n\r\n  partition(0, n, parent.value, x0, y0, x1, y1);\r\n\r\n  function partition(i, j, value, x0, y0, x1, y1) {\r\n    if (i >= j - 1) {\r\n      var node = nodes[i];\r\n      node.x0 = x0, node.y0 = y0;\r\n      node.x1 = x1, node.y1 = y1;\r\n      return;\r\n    }\r\n\r\n    var valueOffset = sums[i],\r\n        valueTarget = (value / 2) + valueOffset,\r\n        k = i + 1,\r\n        hi = j - 1;\r\n\r\n    while (k < hi) {\r\n      var mid = k + hi >>> 1;\r\n      if (sums[mid] < valueTarget) k = mid + 1;\r\n      else hi = mid;\r\n    }\r\n\r\n    if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\r\n\r\n    var valueLeft = sums[k] - valueOffset,\r\n        valueRight = value - valueLeft;\r\n\r\n    if ((x1 - x0) > (y1 - y0)) {\r\n      var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\r\n      partition(i, k, valueLeft, x0, y0, xk, y1);\r\n      partition(k, j, valueRight, xk, y0, x1, y1);\r\n    } else {\r\n      var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\r\n      partition(i, k, valueLeft, x0, y0, x1, yk);\r\n      partition(k, j, valueRight, x0, yk, x1, y1);\r\n    }\r\n  }\r\n}\r\n","import dice from \"./dice.js\";\r\nimport slice from \"./slice.js\";\r\n\r\nexport default function(parent, x0, y0, x1, y1) {\r\n  (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\r\n}\r\n","import {InternSet} from \"internmap\";\r\n\r\nexport default function union(...others) {\r\n  const set = new InternSet();\r\n  for (const other of others) {\r\n    for (const o of other) {\r\n      set.add(o);\r\n    }\r\n  }\r\n  return set;\r\n}\r\n","import transpose from \"./transpose.js\";\r\n\r\nexport default function zip() {\r\n  return transpose(arguments);\r\n}\r\n","export var prefix = \"$\";\r\n\r\nfunction Map() {}\r\n\r\nMap.prototype = map.prototype = {\r\n  constructor: Map,\r\n  has: function(key) {\r\n    return (prefix + key) in this;\r\n  },\r\n  get: function(key) {\r\n    return this[prefix + key];\r\n  },\r\n  set: function(key, value) {\r\n    this[prefix + key] = value;\r\n    return this;\r\n  },\r\n  remove: function(key) {\r\n    var property = prefix + key;\r\n    return property in this && delete this[property];\r\n  },\r\n  clear: function() {\r\n    for (var property in this) if (property[0] === prefix) delete this[property];\r\n  },\r\n  keys: function() {\r\n    var keys = [];\r\n    for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\r\n    return keys;\r\n  },\r\n  values: function() {\r\n    var values = [];\r\n    for (var property in this) if (property[0] === prefix) values.push(this[property]);\r\n    return values;\r\n  },\r\n  entries: function() {\r\n    var entries = [];\r\n    for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\r\n    return entries;\r\n  },\r\n  size: function() {\r\n    var size = 0;\r\n    for (var property in this) if (property[0] === prefix) ++size;\r\n    return size;\r\n  },\r\n  empty: function() {\r\n    for (var property in this) if (property[0] === prefix) return false;\r\n    return true;\r\n  },\r\n  each: function(f) {\r\n    for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\r\n  }\r\n};\r\n\r\nfunction map(object, f) {\r\n  var map = new Map;\r\n\r\n  // Copy constructor.\r\n  if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\r\n\r\n  // Index array by numeric index or specified key function.\r\n  else if (Array.isArray(object)) {\r\n    var i = -1,\r\n        n = object.length,\r\n        o;\r\n\r\n    if (f == null) while (++i < n) map.set(i, object[i]);\r\n    else while (++i < n) map.set(f(o = object[i], i, object), o);\r\n  }\r\n\r\n  // Convert object to map.\r\n  else if (object) for (var key in object) map.set(key, object[key]);\r\n\r\n  return map;\r\n}\r\n\r\nexport default map;\r\n","import {default as map, prefix} from \"./map\";\r\n\r\nfunction Set() {}\r\n\r\nvar proto = map.prototype;\r\n\r\nSet.prototype = set.prototype = {\r\n  constructor: Set,\r\n  has: proto.has,\r\n  add: function(value) {\r\n    value += \"\";\r\n    this[prefix + value] = value;\r\n    return this;\r\n  },\r\n  remove: proto.remove,\r\n  clear: proto.clear,\r\n  values: proto.keys,\r\n  size: proto.size,\r\n  empty: proto.empty,\r\n  each: proto.each\r\n};\r\n\r\nfunction set(object, f) {\r\n  var set = new Set;\r\n\r\n  // Copy constructor.\r\n  if (object instanceof Set) object.each(function(value) { set.add(value); });\r\n\r\n  // Otherwise, assume it’s an array.\r\n  else if (object) {\r\n    var i = -1, n = object.length;\r\n    if (f == null) while (++i < n) set.add(object[i]);\r\n    else while (++i < n) set.add(f(object[i], i, object));\r\n  }\r\n\r\n  return set;\r\n}\r\n\r\nexport default set;\r\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\r\n\r\nexport default {\r\n  svg: \"http://www.w3.org/2000/svg\",\r\n  xhtml: xhtml,\r\n  xlink: \"http://www.w3.org/1999/xlink\",\r\n  xml: \"http://www.w3.org/XML/1998/namespace\",\r\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\r\n};\r\n","import namespaces from \"./namespaces\";\r\n\r\nexport default function(name) {\r\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\r\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\r\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\r\n}\r\n","import namespace from \"./namespace\";\r\nimport {xhtml} from \"./namespaces\";\r\n\r\nfunction creatorInherit(name) {\r\n  return function() {\r\n    var document = this.ownerDocument,\r\n        uri = this.namespaceURI;\r\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\r\n        ? document.createElement(name)\r\n        : document.createElementNS(uri, name);\r\n  };\r\n}\r\n\r\nfunction creatorFixed(fullname) {\r\n  return function() {\r\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\r\n  };\r\n}\r\n\r\nexport default function(name) {\r\n  var fullname = namespace(name);\r\n  return (fullname.local\r\n      ? creatorFixed\r\n      : creatorInherit)(fullname);\r\n}\r\n","function none() {}\r\n\r\nexport default function(selector) {\r\n  return selector == null ? none : function() {\r\n    return this.querySelector(selector);\r\n  };\r\n}\r\n","function empty() {\r\n  return [];\r\n}\r\n\r\nexport default function(selector) {\r\n  return selector == null ? empty : function() {\r\n    return this.querySelectorAll(selector);\r\n  };\r\n}\r\n","export default function(update) {\r\n  return new Array(update.length);\r\n}\r\n","import sparse from \"./sparse\";\r\nimport {Selection} from \"./index\";\r\n\r\nexport default function() {\r\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\r\n}\r\n\r\nexport function EnterNode(parent, datum) {\r\n  this.ownerDocument = parent.ownerDocument;\r\n  this.namespaceURI = parent.namespaceURI;\r\n  this._next = null;\r\n  this._parent = parent;\r\n  this.__data__ = datum;\r\n}\r\n\r\nEnterNode.prototype = {\r\n  constructor: EnterNode,\r\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\r\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\r\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\r\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\r\n};\r\n","import {Selection} from \"./index\";\r\nimport {EnterNode} from \"./enter\";\r\nimport constant from \"../constant\";\r\n\r\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\r\n\r\nfunction bindIndex(parent, group, enter, update, exit, data) {\r\n  var i = 0,\r\n      node,\r\n      groupLength = group.length,\r\n      dataLength = data.length;\r\n\r\n  // Put any non-null nodes that fit into update.\r\n  // Put any null nodes into enter.\r\n  // Put any remaining data into enter.\r\n  for (; i < dataLength; ++i) {\r\n    if (node = group[i]) {\r\n      node.__data__ = data[i];\r\n      update[i] = node;\r\n    } else {\r\n      enter[i] = new EnterNode(parent, data[i]);\r\n    }\r\n  }\r\n\r\n  // Put any non-null nodes that don’t fit into exit.\r\n  for (; i < groupLength; ++i) {\r\n    if (node = group[i]) {\r\n      exit[i] = node;\r\n    }\r\n  }\r\n}\r\n\r\nfunction bindKey(parent, group, enter, update, exit, data, key) {\r\n  var i,\r\n      node,\r\n      nodeByKeyValue = {},\r\n      groupLength = group.length,\r\n      dataLength = data.length,\r\n      keyValues = new Array(groupLength),\r\n      keyValue;\r\n\r\n  // Compute the key for each node.\r\n  // If multiple nodes have the same key, the duplicates are added to exit.\r\n  for (i = 0; i < groupLength; ++i) {\r\n    if (node = group[i]) {\r\n      keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\r\n      if (keyValue in nodeByKeyValue) {\r\n        exit[i] = node;\r\n      } else {\r\n        nodeByKeyValue[keyValue] = node;\r\n      }\r\n    }\r\n  }\r\n\r\n  // Compute the key for each datum.\r\n  // If there a node associated with this key, join and add it to update.\r\n  // If there is not (or the key is a duplicate), add it to enter.\r\n  for (i = 0; i < dataLength; ++i) {\r\n    keyValue = keyPrefix + key.call(parent, data[i], i, data);\r\n    if (node = nodeByKeyValue[keyValue]) {\r\n      update[i] = node;\r\n      node.__data__ = data[i];\r\n      nodeByKeyValue[keyValue] = null;\r\n    } else {\r\n      enter[i] = new EnterNode(parent, data[i]);\r\n    }\r\n  }\r\n\r\n  // Add any remaining nodes that were not bound to data to exit.\r\n  for (i = 0; i < groupLength; ++i) {\r\n    if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\r\n      exit[i] = node;\r\n    }\r\n  }\r\n}\r\n\r\nexport default function(value, key) {\r\n  if (!value) {\r\n    data = new Array(this.size()), j = -1;\r\n    this.each(function(d) { data[++j] = d; });\r\n    return data;\r\n  }\r\n\r\n  var bind = key ? bindKey : bindIndex,\r\n      parents = this._parents,\r\n      groups = this._groups;\r\n\r\n  if (typeof value !== \"function\") value = constant(value);\r\n\r\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\r\n    var parent = parents[j],\r\n        group = groups[j],\r\n        groupLength = group.length,\r\n        data = value.call(parent, parent && parent.__data__, j, parents),\r\n        dataLength = data.length,\r\n        enterGroup = enter[j] = new Array(dataLength),\r\n        updateGroup = update[j] = new Array(dataLength),\r\n        exitGroup = exit[j] = new Array(groupLength);\r\n\r\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\r\n\r\n    // Now connect the enter nodes to their following update node, such that\r\n    // appendChild can insert the materialized enter node before this node,\r\n    // rather than at the end of the parent node.\r\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\r\n      if (previous = enterGroup[i0]) {\r\n        if (i0 >= i1) i1 = i0 + 1;\r\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\r\n        previous._next = next || null;\r\n      }\r\n    }\r\n  }\r\n\r\n  update = new Selection(update, parents);\r\n  update._enter = enter;\r\n  update._exit = exit;\r\n  return update;\r\n}\r\n","import {Selection} from \"./index\";\r\n\r\nexport default function(compare) {\r\n  if (!compare) compare = ascending;\r\n\r\n  function compareNode(a, b) {\r\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\r\n  }\r\n\r\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\r\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\r\n      if (node = group[i]) {\r\n        sortgroup[i] = node;\r\n      }\r\n    }\r\n    sortgroup.sort(compareNode);\r\n  }\r\n\r\n  return new Selection(sortgroups, this._parents).order();\r\n}\r\n\r\nfunction ascending(a, b) {\r\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\r\n}\r\n","import namespace from \"../namespace\";\r\n\r\nfunction attrRemove(name) {\r\n  return function() {\r\n    this.removeAttribute(name);\r\n  };\r\n}\r\n\r\nfunction attrRemoveNS(fullname) {\r\n  return function() {\r\n    this.removeAttributeNS(fullname.space, fullname.local);\r\n  };\r\n}\r\n\r\nfunction attrConstant(name, value) {\r\n  return function() {\r\n    this.setAttribute(name, value);\r\n  };\r\n}\r\n\r\nfunction attrConstantNS(fullname, value) {\r\n  return function() {\r\n    this.setAttributeNS(fullname.space, fullname.local, value);\r\n  };\r\n}\r\n\r\nfunction attrFunction(name, value) {\r\n  return function() {\r\n    var v = value.apply(this, arguments);\r\n    if (v == null) this.removeAttribute(name);\r\n    else this.setAttribute(name, v);\r\n  };\r\n}\r\n\r\nfunction attrFunctionNS(fullname, value) {\r\n  return function() {\r\n    var v = value.apply(this, arguments);\r\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\r\n    else this.setAttributeNS(fullname.space, fullname.local, v);\r\n  };\r\n}\r\n\r\nexport default function(name, value) {\r\n  var fullname = namespace(name);\r\n\r\n  if (arguments.length < 2) {\r\n    var node = this.node();\r\n    return fullname.local\r\n        ? node.getAttributeNS(fullname.space, fullname.local)\r\n        : node.getAttribute(fullname);\r\n  }\r\n\r\n  return this.each((value == null\r\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\r\n      ? (fullname.local ? attrFunctionNS : attrFunction)\r\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\r\n}\r\n","export default function(node) {\r\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\r\n      || (node.document && node) // node is a Window\r\n      || node.defaultView; // node is a Document\r\n}\r\n","import defaultView from \"../window\";\r\n\r\nfunction styleRemove(name) {\r\n  return function() {\r\n    this.style.removeProperty(name);\r\n  };\r\n}\r\n\r\nfunction styleConstant(name, value, priority) {\r\n  return function() {\r\n    this.style.setProperty(name, value, priority);\r\n  };\r\n}\r\n\r\nfunction styleFunction(name, value, priority) {\r\n  return function() {\r\n    var v = value.apply(this, arguments);\r\n    if (v == null) this.style.removeProperty(name);\r\n    else this.style.setProperty(name, v, priority);\r\n  };\r\n}\r\n\r\nexport default function(name, value, priority) {\r\n  return arguments.length > 1\r\n      ? this.each((value == null\r\n            ? styleRemove : typeof value === \"function\"\r\n            ? styleFunction\r\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\r\n      : styleValue(this.node(), name);\r\n}\r\n\r\nexport function styleValue(node, name) {\r\n  return node.style.getPropertyValue(name)\r\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\r\n}\r\n","function propertyRemove(name) {\r\n  return function() {\r\n    delete this[name];\r\n  };\r\n}\r\n\r\nfunction propertyConstant(name, value) {\r\n  return function() {\r\n    this[name] = value;\r\n  };\r\n}\r\n\r\nfunction propertyFunction(name, value) {\r\n  return function() {\r\n    var v = value.apply(this, arguments);\r\n    if (v == null) delete this[name];\r\n    else this[name] = v;\r\n  };\r\n}\r\n\r\nexport default function(name, value) {\r\n  return arguments.length > 1\r\n      ? this.each((value == null\r\n          ? propertyRemove : typeof value === \"function\"\r\n          ? propertyFunction\r\n          : propertyConstant)(name, value))\r\n      : this.node()[name];\r\n}\r\n","function classArray(string) {\r\n  return string.trim().split(/^|\\s+/);\r\n}\r\n\r\nfunction classList(node) {\r\n  return node.classList || new ClassList(node);\r\n}\r\n\r\nfunction ClassList(node) {\r\n  this._node = node;\r\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\r\n}\r\n\r\nClassList.prototype = {\r\n  add: function(name) {\r\n    var i = this._names.indexOf(name);\r\n    if (i < 0) {\r\n      this._names.push(name);\r\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\r\n    }\r\n  },\r\n  remove: function(name) {\r\n    var i = this._names.indexOf(name);\r\n    if (i >= 0) {\r\n      this._names.splice(i, 1);\r\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\r\n    }\r\n  },\r\n  contains: function(name) {\r\n    return this._names.indexOf(name) >= 0;\r\n  }\r\n};\r\n\r\nfunction classedAdd(node, names) {\r\n  var list = classList(node), i = -1, n = names.length;\r\n  while (++i < n) list.add(names[i]);\r\n}\r\n\r\nfunction classedRemove(node, names) {\r\n  var list = classList(node), i = -1, n = names.length;\r\n  while (++i < n) list.remove(names[i]);\r\n}\r\n\r\nfunction classedTrue(names) {\r\n  return function() {\r\n    classedAdd(this, names);\r\n  };\r\n}\r\n\r\nfunction classedFalse(names) {\r\n  return function() {\r\n    classedRemove(this, names);\r\n  };\r\n}\r\n\r\nfunction classedFunction(names, value) {\r\n  return function() {\r\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\r\n  };\r\n}\r\n\r\nexport default function(name, value) {\r\n  var names = classArray(name + \"\");\r\n\r\n  if (arguments.length < 2) {\r\n    var list = classList(this.node()), i = -1, n = names.length;\r\n    while (++i < n) if (!list.contains(names[i])) return false;\r\n    return true;\r\n  }\r\n\r\n  return this.each((typeof value === \"function\"\r\n      ? classedFunction : value\r\n      ? classedTrue\r\n      : classedFalse)(names, value));\r\n}\r\n","function textRemove() {\r\n  this.textContent = \"\";\r\n}\r\n\r\nfunction textConstant(value) {\r\n  return function() {\r\n    this.textContent = value;\r\n  };\r\n}\r\n\r\nfunction textFunction(value) {\r\n  return function() {\r\n    var v = value.apply(this, arguments);\r\n    this.textContent = v == null ? \"\" : v;\r\n  };\r\n}\r\n\r\nexport default function(value) {\r\n  return arguments.length\r\n      ? this.each(value == null\r\n          ? textRemove : (typeof value === \"function\"\r\n          ? textFunction\r\n          : textConstant)(value))\r\n      : this.node().textContent;\r\n}\r\n","function htmlRemove() {\r\n  this.innerHTML = \"\";\r\n}\r\n\r\nfunction htmlConstant(value) {\r\n  return function() {\r\n    this.innerHTML = value;\r\n  };\r\n}\r\n\r\nfunction htmlFunction(value) {\r\n  return function() {\r\n    var v = value.apply(this, arguments);\r\n    this.innerHTML = v == null ? \"\" : v;\r\n  };\r\n}\r\n\r\nexport default function(value) {\r\n  return arguments.length\r\n      ? this.each(value == null\r\n          ? htmlRemove : (typeof value === \"function\"\r\n          ? htmlFunction\r\n          : htmlConstant)(value))\r\n      : this.node().innerHTML;\r\n}\r\n","function raise() {\r\n  if (this.nextSibling) this.parentNode.appendChild(this);\r\n}\r\n\r\nexport default function() {\r\n  return this.each(raise);\r\n}\r\n","function lower() {\r\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\r\n}\r\n\r\nexport default function() {\r\n  return this.each(lower);\r\n}\r\n","import creator from \"../creator\";\r\nimport selector from \"../selector\";\r\n\r\nfunction constantNull() {\r\n  return null;\r\n}\r\n\r\nexport default function(name, before) {\r\n  var create = typeof name === \"function\" ? name : creator(name),\r\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\r\n  return this.select(function() {\r\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\r\n  });\r\n}\r\n","function remove() {\r\n  var parent = this.parentNode;\r\n  if (parent) parent.removeChild(this);\r\n}\r\n\r\nexport default function() {\r\n  return this.each(remove);\r\n}\r\n","function selection_cloneShallow() {\r\n  var clone = this.cloneNode(false), parent = this.parentNode;\r\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\r\n}\r\n\r\nfunction selection_cloneDeep() {\r\n  var clone = this.cloneNode(true), parent = this.parentNode;\r\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\r\n}\r\n\r\nexport default function(deep) {\r\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\r\n}\r\n","var filterEvents = {};\r\n\r\nexport var event = null;\r\n\r\nif (typeof document !== \"undefined\") {\r\n  var element = document.documentElement;\r\n  if (!(\"onmouseenter\" in element)) {\r\n    filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\r\n  }\r\n}\r\n\r\nfunction filterContextListener(listener, index, group) {\r\n  listener = contextListener(listener, index, group);\r\n  return function(event) {\r\n    var related = event.relatedTarget;\r\n    if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\r\n      listener.call(this, event);\r\n    }\r\n  };\r\n}\r\n\r\nfunction contextListener(listener, index, group) {\r\n  return function(event1) {\r\n    var event0 = event; // Events can be reentrant (e.g., focus).\r\n    event = event1;\r\n    try {\r\n      listener.call(this, this.__data__, index, group);\r\n    } finally {\r\n      event = event0;\r\n    }\r\n  };\r\n}\r\n\r\nfunction parseTypenames(typenames) {\r\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\r\n    var name = \"\", i = t.indexOf(\".\");\r\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\r\n    return {type: t, name: name};\r\n  });\r\n}\r\n\r\nfunction onRemove(typename) {\r\n  return function() {\r\n    var on = this.__on;\r\n    if (!on) return;\r\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\r\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\r\n        this.removeEventListener(o.type, o.listener, o.capture);\r\n      } else {\r\n        on[++i] = o;\r\n      }\r\n    }\r\n    if (++i) on.length = i;\r\n    else delete this.__on;\r\n  };\r\n}\r\n\r\nfunction onAdd(typename, value, capture) {\r\n  var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\r\n  return function(d, i, group) {\r\n    var on = this.__on, o, listener = wrap(value, i, group);\r\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\r\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\r\n        this.removeEventListener(o.type, o.listener, o.capture);\r\n        this.addEventListener(o.type, o.listener = listener, o.capture = capture);\r\n        o.value = value;\r\n        return;\r\n      }\r\n    }\r\n    this.addEventListener(typename.type, listener, capture);\r\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\r\n    if (!on) this.__on = [o];\r\n    else on.push(o);\r\n  };\r\n}\r\n\r\nexport default function(typename, value, capture) {\r\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\r\n\r\n  if (arguments.length < 2) {\r\n    var on = this.node().__on;\r\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\r\n      for (i = 0, o = on[j]; i < n; ++i) {\r\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\r\n          return o.value;\r\n        }\r\n      }\r\n    }\r\n    return;\r\n  }\r\n\r\n  on = value ? onAdd : onRemove;\r\n  if (capture == null) capture = false;\r\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\r\n  return this;\r\n}\r\n\r\nexport function customEvent(event1, listener, that, args) {\r\n  var event0 = event;\r\n  event1.sourceEvent = event;\r\n  event = event1;\r\n  try {\r\n    return listener.apply(that, args);\r\n  } finally {\r\n    event = event0;\r\n  }\r\n}\r\n","import defaultView from \"../window\";\r\n\r\nfunction dispatchEvent(node, type, params) {\r\n  var window = defaultView(node),\r\n      event = window.CustomEvent;\r\n\r\n  if (typeof event === \"function\") {\r\n    event = new event(type, params);\r\n  } else {\r\n    event = window.document.createEvent(\"Event\");\r\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\r\n    else event.initEvent(type, false, false);\r\n  }\r\n\r\n  node.dispatchEvent(event);\r\n}\r\n\r\nfunction dispatchConstant(type, params) {\r\n  return function() {\r\n    return dispatchEvent(this, type, params);\r\n  };\r\n}\r\n\r\nfunction dispatchFunction(type, params) {\r\n  return function() {\r\n    return dispatchEvent(this, type, params.apply(this, arguments));\r\n  };\r\n}\r\n\r\nexport default function(type, params) {\r\n  return this.each((typeof params === \"function\"\r\n      ? dispatchFunction\r\n      : dispatchConstant)(type, params));\r\n}\r\n","import selection_select from \"./select\";\r\nimport selection_selectAll from \"./selectAll\";\r\nimport selection_filter from \"./filter\";\r\nimport selection_data from \"./data\";\r\nimport selection_enter from \"./enter\";\r\nimport selection_exit from \"./exit\";\r\nimport selection_join from \"./join\";\r\nimport selection_merge from \"./merge\";\r\nimport selection_order from \"./order\";\r\nimport selection_sort from \"./sort\";\r\nimport selection_call from \"./call\";\r\nimport selection_nodes from \"./nodes\";\r\nimport selection_node from \"./node\";\r\nimport selection_size from \"./size\";\r\nimport selection_empty from \"./empty\";\r\nimport selection_each from \"./each\";\r\nimport selection_attr from \"./attr\";\r\nimport selection_style from \"./style\";\r\nimport selection_property from \"./property\";\r\nimport selection_classed from \"./classed\";\r\nimport selection_text from \"./text\";\r\nimport selection_html from \"./html\";\r\nimport selection_raise from \"./raise\";\r\nimport selection_lower from \"./lower\";\r\nimport selection_append from \"./append\";\r\nimport selection_insert from \"./insert\";\r\nimport selection_remove from \"./remove\";\r\nimport selection_clone from \"./clone\";\r\nimport selection_datum from \"./datum\";\r\nimport selection_on from \"./on\";\r\nimport selection_dispatch from \"./dispatch\";\r\n\r\nexport var root = [null];\r\n\r\nexport function Selection(groups, parents) {\r\n  this._groups = groups;\r\n  this._parents = parents;\r\n}\r\n\r\nfunction selection() {\r\n  return new Selection([[document.documentElement]], root);\r\n}\r\n\r\nSelection.prototype = selection.prototype = {\r\n  constructor: Selection,\r\n  select: selection_select,\r\n  selectAll: selection_selectAll,\r\n  filter: selection_filter,\r\n  data: selection_data,\r\n  enter: selection_enter,\r\n  exit: selection_exit,\r\n  join: selection_join,\r\n  merge: selection_merge,\r\n  order: selection_order,\r\n  sort: selection_sort,\r\n  call: selection_call,\r\n  nodes: selection_nodes,\r\n  node: selection_node,\r\n  size: selection_size,\r\n  empty: selection_empty,\r\n  each: selection_each,\r\n  attr: selection_attr,\r\n  style: selection_style,\r\n  property: selection_property,\r\n  classed: selection_classed,\r\n  text: selection_text,\r\n  html: selection_html,\r\n  raise: selection_raise,\r\n  lower: selection_lower,\r\n  append: selection_append,\r\n  insert: selection_insert,\r\n  remove: selection_remove,\r\n  clone: selection_clone,\r\n  datum: selection_datum,\r\n  on: selection_on,\r\n  dispatch: selection_dispatch\r\n};\r\n\r\nexport default selection;\r\n","import {Selection, root} from \"./selection/index\";\r\n\r\nexport default function(selector) {\r\n  return typeof selector === \"string\"\r\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\r\n      : new Selection([[selector]], root);\r\n}\r\n","/**\r\n * d3.tip\r\n * Copyright (c) 2013-2017 Justin Palmer\r\n *\r\n * Tooltips for d3.js SVG visualizations\r\n */\r\n// eslint-disable-next-line no-extra-semi\r\nimport { map } from 'd3-collection'\r\nimport { selection, select } from 'd3-selection'\r\n// Public - constructs a new tooltip\r\n//\r\n// Returns a tip\r\nexport default function() {\r\n  var direction   = d3TipDirection,\r\n      offset      = d3TipOffset,\r\n      html        = d3TipHTML,\r\n      rootElement = document.body,\r\n      node        = initNode(),\r\n      svg         = null,\r\n      point       = null,\r\n      target      = null\r\n\r\n  function tip(vis) {\r\n    svg = getSVGNode(vis)\r\n    if (!svg) return\r\n    point = svg.createSVGPoint()\r\n    rootElement.appendChild(node)\r\n  }\r\n\r\n  // Public - show the tooltip on the screen\r\n  //\r\n  // Returns a tip\r\n  tip.show = function() {\r\n    var args = Array.prototype.slice.call(arguments)\r\n    if (args[args.length - 1] instanceof SVGElement) target = args.pop()\r\n\r\n    var content = html.apply(this, args),\r\n        poffset = offset.apply(this, args),\r\n        dir     = direction.apply(this, args),\r\n        nodel   = getNodeEl(),\r\n        i       = directions.length,\r\n        coords,\r\n        scrollTop  = document.documentElement.scrollTop ||\r\n      rootElement.scrollTop,\r\n        scrollLeft = document.documentElement.scrollLeft ||\r\n      rootElement.scrollLeft\r\n\r\n    nodel.html(content)\r\n      .style('opacity', 1).style('pointer-events', 'all')\r\n\r\n    while (i--) nodel.classed(directions[i], false)\r\n    coords = directionCallbacks.get(dir).apply(this)\r\n    nodel.classed(dir, true)\r\n      .style('top', (coords.top + poffset[0]) + scrollTop + 'px')\r\n      .style('left', (coords.left + poffset[1]) + scrollLeft + 'px')\r\n\r\n    return tip\r\n  }\r\n\r\n  // Public - hide the tooltip\r\n  //\r\n  // Returns a tip\r\n  tip.hide = function() {\r\n    var nodel = getNodeEl()\r\n    nodel.style('opacity', 0).style('pointer-events', 'none')\r\n    return tip\r\n  }\r\n\r\n  // Public: Proxy attr calls to the d3 tip container.\r\n  // Sets or gets attribute value.\r\n  //\r\n  // n - name of the attribute\r\n  // v - value of the attribute\r\n  //\r\n  // Returns tip or attribute value\r\n  // eslint-disable-next-line no-unused-vars\r\n  tip.attr = function(n, v) {\r\n    if (arguments.length < 2 && typeof n === 'string') {\r\n      return getNodeEl().attr(n)\r\n    }\r\n\r\n    var args =  Array.prototype.slice.call(arguments)\r\n    selection.prototype.attr.apply(getNodeEl(), args)\r\n    return tip\r\n  }\r\n\r\n  // Public: Proxy style calls to the d3 tip container.\r\n  // Sets or gets a style value.\r\n  //\r\n  // n - name of the property\r\n  // v - value of the property\r\n  //\r\n  // Returns tip or style property value\r\n  // eslint-disable-next-line no-unused-vars\r\n  tip.style = function(n, v) {\r\n    if (arguments.length < 2 && typeof n === 'string') {\r\n      return getNodeEl().style(n)\r\n    }\r\n\r\n    var args = Array.prototype.slice.call(arguments)\r\n    selection.prototype.style.apply(getNodeEl(), args)\r\n    return tip\r\n  }\r\n\r\n  // Public: Set or get the direction of the tooltip\r\n  //\r\n  // v - One of n(north), s(south), e(east), or w(west), nw(northwest),\r\n  //     sw(southwest), ne(northeast) or se(southeast)\r\n  //\r\n  // Returns tip or direction\r\n  tip.direction = function(v) {\r\n    if (!arguments.length) return direction\r\n    direction = v == null ? v : functor(v)\r\n\r\n    return tip\r\n  }\r\n\r\n  // Public: Sets or gets the offset of the tip\r\n  //\r\n  // v - Array of [x, y] offset\r\n  //\r\n  // Returns offset or\r\n  tip.offset = function(v) {\r\n    if (!arguments.length) return offset\r\n    offset = v == null ? v : functor(v)\r\n\r\n    return tip\r\n  }\r\n\r\n  // Public: sets or gets the html value of the tooltip\r\n  //\r\n  // v - String value of the tip\r\n  //\r\n  // Returns html value or tip\r\n  tip.html = function(v) {\r\n    if (!arguments.length) return html\r\n    html = v == null ? v : functor(v)\r\n\r\n    return tip\r\n  }\r\n\r\n  // Public: sets or gets the root element anchor of the tooltip\r\n  //\r\n  // v - root element of the tooltip\r\n  //\r\n  // Returns root node of tip\r\n  tip.rootElement = function(v) {\r\n    if (!arguments.length) return rootElement\r\n    rootElement = v == null ? v : functor(v)\r\n\r\n    return tip\r\n  }\r\n\r\n  // Public: destroys the tooltip and removes it from the DOM\r\n  //\r\n  // Returns a tip\r\n  tip.destroy = function() {\r\n    if (node) {\r\n      getNodeEl().remove()\r\n      node = null\r\n    }\r\n    return tip\r\n  }\r\n\r\n  function d3TipDirection() { return 'n' }\r\n  function d3TipOffset() { return [0, 0] }\r\n  function d3TipHTML() { return ' ' }\r\n\r\n  var directionCallbacks = map({\r\n        n:  directionNorth,\r\n        s:  directionSouth,\r\n        e:  directionEast,\r\n        w:  directionWest,\r\n        nw: directionNorthWest,\r\n        ne: directionNorthEast,\r\n        sw: directionSouthWest,\r\n        se: directionSouthEast\r\n      }),\r\n      directions = directionCallbacks.keys()\r\n\r\n  function directionNorth() {\r\n    var bbox = getScreenBBox(this)\r\n    return {\r\n      top:  bbox.n.y - node.offsetHeight,\r\n      left: bbox.n.x - node.offsetWidth / 2\r\n    }\r\n  }\r\n\r\n  function directionSouth() {\r\n    var bbox = getScreenBBox(this)\r\n    return {\r\n      top:  bbox.s.y,\r\n      left: bbox.s.x - node.offsetWidth / 2\r\n    }\r\n  }\r\n\r\n  function directionEast() {\r\n    var bbox = getScreenBBox(this)\r\n    return {\r\n      top:  bbox.e.y - node.offsetHeight / 2,\r\n      left: bbox.e.x\r\n    }\r\n  }\r\n\r\n  function directionWest() {\r\n    var bbox = getScreenBBox(this)\r\n    return {\r\n      top:  bbox.w.y - node.offsetHeight / 2,\r\n      left: bbox.w.x - node.offsetWidth\r\n    }\r\n  }\r\n\r\n  function directionNorthWest() {\r\n    var bbox = getScreenBBox(this)\r\n    return {\r\n      top:  bbox.nw.y - node.offsetHeight,\r\n      left: bbox.nw.x - node.offsetWidth\r\n    }\r\n  }\r\n\r\n  function directionNorthEast() {\r\n    var bbox = getScreenBBox(this)\r\n    return {\r\n      top:  bbox.ne.y - node.offsetHeight,\r\n      left: bbox.ne.x\r\n    }\r\n  }\r\n\r\n  function directionSouthWest() {\r\n    var bbox = getScreenBBox(this)\r\n    return {\r\n      top:  bbox.sw.y,\r\n      left: bbox.sw.x - node.offsetWidth\r\n    }\r\n  }\r\n\r\n  function directionSouthEast() {\r\n    var bbox = getScreenBBox(this)\r\n    return {\r\n      top:  bbox.se.y,\r\n      left: bbox.se.x\r\n    }\r\n  }\r\n\r\n  function initNode() {\r\n    var div = select(document.createElement('div'))\r\n    div\r\n      .style('position', 'absolute')\r\n      .style('top', 0)\r\n      .style('opacity', 0)\r\n      .style('pointer-events', 'none')\r\n      .style('box-sizing', 'border-box')\r\n\r\n    return div.node()\r\n  }\r\n\r\n  function getSVGNode(element) {\r\n    var svgNode = element.node()\r\n    if (!svgNode) return null\r\n    if (svgNode.tagName.toLowerCase() === 'svg') return svgNode\r\n    return svgNode.ownerSVGElement\r\n  }\r\n\r\n  function getNodeEl() {\r\n    if (node == null) {\r\n      node = initNode()\r\n      // re-add node to DOM\r\n      rootElement.appendChild(node)\r\n    }\r\n    return select(node)\r\n  }\r\n\r\n  // Private - gets the screen coordinates of a shape\r\n  //\r\n  // Given a shape on the screen, will return an SVGPoint for the directions\r\n  // n(north), s(south), e(east), w(west), ne(northeast), se(southeast),\r\n  // nw(northwest), sw(southwest).\r\n  //\r\n  //    +-+-+\r\n  //    |   |\r\n  //    +   +\r\n  //    |   |\r\n  //    +-+-+\r\n  //\r\n  // Returns an Object {n, s, e, w, nw, sw, ne, se}\r\n  function getScreenBBox(targetShape) {\r\n    var targetel   = target || targetShape\r\n\r\n    while (targetel.getScreenCTM == null && targetel.parentNode != null) {\r\n      targetel = targetel.parentNode\r\n    }\r\n\r\n    var bbox       = {},\r\n        matrix     = targetel.getScreenCTM(),\r\n        tbbox      = targetel.getBBox(),\r\n        width      = tbbox.width,\r\n        height     = tbbox.height,\r\n        x          = tbbox.x,\r\n        y          = tbbox.y\r\n\r\n    point.x = x\r\n    point.y = y\r\n    bbox.nw = point.matrixTransform(matrix)\r\n    point.x += width\r\n    bbox.ne = point.matrixTransform(matrix)\r\n    point.y += height\r\n    bbox.se = point.matrixTransform(matrix)\r\n    point.x -= width\r\n    bbox.sw = point.matrixTransform(matrix)\r\n    point.y -= height / 2\r\n    bbox.w = point.matrixTransform(matrix)\r\n    point.x += width\r\n    bbox.e = point.matrixTransform(matrix)\r\n    point.x -= width / 2\r\n    point.y -= height / 2\r\n    bbox.n = point.matrixTransform(matrix)\r\n    point.y += height\r\n    bbox.s = point.matrixTransform(matrix)\r\n\r\n    return bbox\r\n  }\r\n\r\n  // Private - replace D3JS 3.X d3.functor() function\r\n  function functor(v) {\r\n    return typeof v === 'function' ? v : function() {\r\n      return v\r\n    }\r\n  }\r\n\r\n  return tip\r\n}\r\n","export function squaredEuclidean(p, q) {\r\n    let d = 0;\r\n    for (let i = 0; i < p.length; i++) {\r\n        d += (p[i] - q[i]) * (p[i] - q[i]);\r\n    }\r\n    return d;\r\n}\r\nexport function euclidean(p, q) {\r\n    return Math.sqrt(squaredEuclidean(p, q));\r\n}\r\n","import {Selection} from \"./index\";\r\nimport selector from \"../selector\";\r\n\r\nexport default function(select) {\r\n  if (typeof select !== \"function\") select = selector(select);\r\n\r\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\r\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\r\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\r\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\r\n        subgroup[i] = subnode;\r\n      }\r\n    }\r\n  }\r\n\r\n  return new Selection(subgroups, this._parents);\r\n}\r\n","import {Selection} from \"./index\";\r\nimport selectorAll from \"../selectorAll\";\r\n\r\nexport default function(select) {\r\n  if (typeof select !== \"function\") select = selectorAll(select);\r\n\r\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\r\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\r\n      if (node = group[i]) {\r\n        subgroups.push(select.call(node, node.__data__, i, group));\r\n        parents.push(node);\r\n      }\r\n    }\r\n  }\r\n\r\n  return new Selection(subgroups, parents);\r\n}\r\n","import {Selection} from \"./index\";\r\nimport matcher from \"../matcher\";\r\n\r\nexport default function(match) {\r\n  if (typeof match !== \"function\") match = matcher(match);\r\n\r\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\r\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\r\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\r\n        subgroup.push(node);\r\n      }\r\n    }\r\n  }\r\n\r\n  return new Selection(subgroups, this._parents);\r\n}\r\n","export default function(selector) {\r\n  return function() {\r\n    return this.matches(selector);\r\n  };\r\n}\r\n","export default function(x) {\r\n  return function() {\r\n    return x;\r\n  };\r\n}\r\n","import sparse from \"./sparse\";\r\nimport {Selection} from \"./index\";\r\n\r\nexport default function() {\r\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\r\n}\r\n","export default function(onenter, onupdate, onexit) {\r\n  var enter = this.enter(), update = this, exit = this.exit();\r\n  enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\r\n  if (onupdate != null) update = onupdate(update);\r\n  if (onexit == null) exit.remove(); else onexit(exit);\r\n  return enter && update ? enter.merge(update).order() : update;\r\n}\r\n","import {Selection} from \"./index\";\r\n\r\nexport default function(selection) {\r\n\r\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\r\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\r\n      if (node = group0[i] || group1[i]) {\r\n        merge[i] = node;\r\n      }\r\n    }\r\n  }\r\n\r\n  for (; j < m0; ++j) {\r\n    merges[j] = groups0[j];\r\n  }\r\n\r\n  return new Selection(merges, this._parents);\r\n}\r\n","export default function() {\r\n\r\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\r\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\r\n      if (node = group[i]) {\r\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\r\n        next = node;\r\n      }\r\n    }\r\n  }\r\n\r\n  return this;\r\n}\r\n","export default function() {\r\n  var callback = arguments[0];\r\n  arguments[0] = this;\r\n  callback.apply(null, arguments);\r\n  return this;\r\n}\r\n","export default function() {\r\n  var nodes = new Array(this.size()), i = -1;\r\n  this.each(function() { nodes[++i] = this; });\r\n  return nodes;\r\n}\r\n","export default function() {\r\n\r\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\r\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\r\n      var node = group[i];\r\n      if (node) return node;\r\n    }\r\n  }\r\n\r\n  return null;\r\n}\r\n","export default function() {\r\n  var size = 0;\r\n  this.each(function() { ++size; });\r\n  return size;\r\n}\r\n","export default function() {\r\n  return !this.node();\r\n}\r\n","export default function(callback) {\r\n\r\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\r\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\r\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\r\n    }\r\n  }\r\n\r\n  return this;\r\n}\r\n","import creator from \"../creator\";\r\n\r\nexport default function(name) {\r\n  var create = typeof name === \"function\" ? name : creator(name);\r\n  return this.select(function() {\r\n    return this.appendChild(create.apply(this, arguments));\r\n  });\r\n}\r\n","export default function(value) {\r\n  return arguments.length\r\n      ? this.property(\"__data__\", value)\r\n      : this.node().__data__;\r\n}\r\n","// eslint-disable-next-line @typescript-eslint/unbound-method\r\nconst toString = Object.prototype.toString;\r\n/**\r\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\r\n *\r\n * @param value - Object to check.\r\n * @returns True if the object is an array or a typed array.\r\n */\r\nexport function isAnyArray(value) {\r\n    const tag = toString.call(value);\r\n    return tag.endsWith('Array]') && !tag.includes('Big');\r\n}\r\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\r\nimport max from 'ml-array-max';\r\nimport min from 'ml-array-min';\r\n\r\nfunction rescale(input) {\r\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\r\n\r\n  if (!isAnyArray(input)) {\r\n    throw new TypeError('input must be an array');\r\n  } else if (input.length === 0) {\r\n    throw new TypeError('input must not be empty');\r\n  }\r\n\r\n  var output;\r\n\r\n  if (options.output !== undefined) {\r\n    if (!isAnyArray(options.output)) {\r\n      throw new TypeError('output option must be an array if specified');\r\n    }\r\n\r\n    output = options.output;\r\n  } else {\r\n    output = new Array(input.length);\r\n  }\r\n\r\n  var currentMin = min(input);\r\n  var currentMax = max(input);\r\n\r\n  if (currentMin === currentMax) {\r\n    throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\r\n  }\r\n\r\n  var _options$min = options.min,\r\n      minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\r\n      _options$max = options.max,\r\n      maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\r\n\r\n  if (minValue >= maxValue) {\r\n    throw new RangeError('min option must be smaller than max option');\r\n  }\r\n\r\n  var factor = (maxValue - minValue) / (currentMax - currentMin);\r\n\r\n  for (var i = 0; i < input.length; i++) {\r\n    output[i] = (input[i] - currentMin) * factor + minValue;\r\n  }\r\n\r\n  return output;\r\n}\r\n\r\nexport { rescale as default };\r\n","import { isAnyArray } from 'is-any-array';\r\n\r\nfunction min(input) {\r\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\r\n\r\n  if (!isAnyArray(input)) {\r\n    throw new TypeError('input must be an array');\r\n  }\r\n\r\n  if (input.length === 0) {\r\n    throw new TypeError('input must not be empty');\r\n  }\r\n\r\n  var _options$fromIndex = options.fromIndex,\r\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\r\n      _options$toIndex = options.toIndex,\r\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\r\n\r\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\r\n    throw new Error('fromIndex must be a positive integer smaller than length');\r\n  }\r\n\r\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\r\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\r\n  }\r\n\r\n  var minValue = input[fromIndex];\r\n\r\n  for (var i = fromIndex + 1; i < toIndex; i++) {\r\n    if (input[i] < minValue) minValue = input[i];\r\n  }\r\n\r\n  return minValue;\r\n}\r\n\r\nexport { min as default };\r\n","import { isAnyArray } from 'is-any-array';\r\n\r\nfunction max(input) {\r\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\r\n\r\n  if (!isAnyArray(input)) {\r\n    throw new TypeError('input must be an array');\r\n  }\r\n\r\n  if (input.length === 0) {\r\n    throw new TypeError('input must not be empty');\r\n  }\r\n\r\n  var _options$fromIndex = options.fromIndex,\r\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\r\n      _options$toIndex = options.toIndex,\r\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\r\n\r\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\r\n    throw new Error('fromIndex must be a positive integer smaller than length');\r\n  }\r\n\r\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\r\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\r\n  }\r\n\r\n  var maxValue = input[fromIndex];\r\n\r\n  for (var i = fromIndex + 1; i < toIndex; i++) {\r\n    if (input[i] > maxValue) maxValue = input[i];\r\n  }\r\n\r\n  return maxValue;\r\n}\r\n\r\nexport { max as default };\r\n","'use strict';\r\n\r\nObject.defineProperty(exports, '__esModule', { value: true });\r\n\r\nvar isAnyArray = require('is-any-array');\r\nvar rescale = require('ml-array-rescale');\r\n\r\nconst indent = ' '.repeat(2);\r\nconst indentData = ' '.repeat(4);\r\n\r\n/**\r\n * @this {Matrix}\r\n * @returns {string}\r\n */\r\nfunction inspectMatrix() {\r\n  return inspectMatrixWithOptions(this);\r\n}\r\n\r\nfunction inspectMatrixWithOptions(matrix, options = {}) {\r\n  const {\r\n    maxRows = 15,\r\n    maxColumns = 10,\r\n    maxNumSize = 8,\r\n    padMinus = 'auto',\r\n  } = options;\r\n  return `${matrix.constructor.name} {\r\n${indent}[\r\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus)}\r\n${indent}]\r\n${indent}rows: ${matrix.rows}\r\n${indent}columns: ${matrix.columns}\r\n}`;\r\n}\r\n\r\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus) {\r\n  const { rows, columns } = matrix;\r\n  const maxI = Math.min(rows, maxRows);\r\n  const maxJ = Math.min(columns, maxColumns);\r\n  const result = [];\r\n\r\n  if (padMinus === 'auto') {\r\n    padMinus = false;\r\n    loop: for (let i = 0; i < maxI; i++) {\r\n      for (let j = 0; j < maxJ; j++) {\r\n        if (matrix.get(i, j) < 0) {\r\n          padMinus = true;\r\n          break loop;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  for (let i = 0; i < maxI; i++) {\r\n    let line = [];\r\n    for (let j = 0; j < maxJ; j++) {\r\n      line.push(formatNumber(matrix.get(i, j), maxNumSize, padMinus));\r\n    }\r\n    result.push(`${line.join(' ')}`);\r\n  }\r\n  if (maxJ !== columns) {\r\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\r\n  }\r\n  if (maxI !== rows) {\r\n    result.push(`... ${rows - maxRows} more rows`);\r\n  }\r\n  return result.join(`\\n${indentData}`);\r\n}\r\n\r\nfunction formatNumber(num, maxNumSize, padMinus) {\r\n  return (\r\n    num >= 0 && padMinus\r\n      ? ` ${formatNumber2(num, maxNumSize - 1)}`\r\n      : formatNumber2(num, maxNumSize)\r\n  ).padEnd(maxNumSize);\r\n}\r\n\r\nfunction formatNumber2(num, len) {\r\n  // small.length numbers should be as is\r\n  let str = num.toString();\r\n  if (str.length <= len) return str;\r\n\r\n  // (7)'0.00123' is better then (7)'1.23e-2'\r\n  // (8)'0.000123' is worse then (7)'1.23e-3',\r\n  let fix = num.toFixed(len);\r\n  if (fix.length > len) {\r\n    fix = num.toFixed(Math.max(0, len - (fix.length - len)));\r\n  }\r\n  if (\r\n    fix.length <= len &&\r\n    !fix.startsWith('0.000') &&\r\n    !fix.startsWith('-0.000')\r\n  ) {\r\n    return fix;\r\n  }\r\n\r\n  // well, if it's still too long the user should've used longer numbers\r\n  let exp = num.toExponential(len);\r\n  if (exp.length > len) {\r\n    exp = num.toExponential(Math.max(0, len - (exp.length - len)));\r\n  }\r\n  return exp.slice(0);\r\n}\r\n\r\nfunction installMathOperations(AbstractMatrix, Matrix) {\r\n  AbstractMatrix.prototype.add = function add(value) {\r\n    if (typeof value === 'number') return this.addS(value);\r\n    return this.addM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.addS = function addS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) + value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.addM = function addM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.add = function add(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.add(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.sub = function sub(value) {\r\n    if (typeof value === 'number') return this.subS(value);\r\n    return this.subM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.subS = function subS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) - value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.subM = function subM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.sub = function sub(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.sub(value);\r\n  };\r\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\r\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\r\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\r\n  AbstractMatrix.subtract = AbstractMatrix.sub;\r\n\r\n  AbstractMatrix.prototype.mul = function mul(value) {\r\n    if (typeof value === 'number') return this.mulS(value);\r\n    return this.mulM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.mulS = function mulS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) * value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.mul = function mul(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.mul(value);\r\n  };\r\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\r\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\r\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\r\n  AbstractMatrix.multiply = AbstractMatrix.mul;\r\n\r\n  AbstractMatrix.prototype.div = function div(value) {\r\n    if (typeof value === 'number') return this.divS(value);\r\n    return this.divM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.divS = function divS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) / value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.divM = function divM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.div = function div(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.div(value);\r\n  };\r\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\r\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\r\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\r\n  AbstractMatrix.divide = AbstractMatrix.div;\r\n\r\n  AbstractMatrix.prototype.mod = function mod(value) {\r\n    if (typeof value === 'number') return this.modS(value);\r\n    return this.modM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.modS = function modS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) % value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.modM = function modM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.mod = function mod(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.mod(value);\r\n  };\r\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\r\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\r\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\r\n  AbstractMatrix.modulus = AbstractMatrix.mod;\r\n\r\n  AbstractMatrix.prototype.and = function and(value) {\r\n    if (typeof value === 'number') return this.andS(value);\r\n    return this.andM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.andS = function andS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) & value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.andM = function andM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.and = function and(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.and(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.or = function or(value) {\r\n    if (typeof value === 'number') return this.orS(value);\r\n    return this.orM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.orS = function orS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) | value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.orM = function orM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.or = function or(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.or(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.xor = function xor(value) {\r\n    if (typeof value === 'number') return this.xorS(value);\r\n    return this.xorM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.xorS = function xorS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) ^ value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.xor = function xor(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.xor(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\r\n    if (typeof value === 'number') return this.leftShiftS(value);\r\n    return this.leftShiftM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) << value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.leftShift(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\r\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\r\n    return this.signPropagatingRightShiftM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) >> value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.signPropagatingRightShift(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\r\n    if (typeof value === 'number') return this.rightShiftS(value);\r\n    return this.rightShiftM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) >>> value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.rightShift(value);\r\n  };\r\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\r\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\r\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\r\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\r\n\r\n  AbstractMatrix.prototype.not = function not() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, ~(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.not = function not(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.not();\r\n  };\r\n\r\n  AbstractMatrix.prototype.abs = function abs() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.abs(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.abs = function abs(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.abs();\r\n  };\r\n\r\n  AbstractMatrix.prototype.acos = function acos() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.acos(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.acos = function acos(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.acos();\r\n  };\r\n\r\n  AbstractMatrix.prototype.acosh = function acosh() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.acosh(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.acosh = function acosh(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.acosh();\r\n  };\r\n\r\n  AbstractMatrix.prototype.asin = function asin() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.asin(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.asin = function asin(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.asin();\r\n  };\r\n\r\n  AbstractMatrix.prototype.asinh = function asinh() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.asinh(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.asinh = function asinh(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.asinh();\r\n  };\r\n\r\n  AbstractMatrix.prototype.atan = function atan() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.atan(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.atan = function atan(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.atan();\r\n  };\r\n\r\n  AbstractMatrix.prototype.atanh = function atanh() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.atanh(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.atanh = function atanh(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.atanh();\r\n  };\r\n\r\n  AbstractMatrix.prototype.cbrt = function cbrt() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.cbrt(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.cbrt = function cbrt(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.cbrt();\r\n  };\r\n\r\n  AbstractMatrix.prototype.ceil = function ceil() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.ceil(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.ceil = function ceil(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.ceil();\r\n  };\r\n\r\n  AbstractMatrix.prototype.clz32 = function clz32() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.clz32(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.clz32 = function clz32(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.clz32();\r\n  };\r\n\r\n  AbstractMatrix.prototype.cos = function cos() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.cos(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.cos = function cos(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.cos();\r\n  };\r\n\r\n  AbstractMatrix.prototype.cosh = function cosh() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.cosh(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.cosh = function cosh(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.cosh();\r\n  };\r\n\r\n  AbstractMatrix.prototype.exp = function exp() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.exp(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.exp = function exp(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.exp();\r\n  };\r\n\r\n  AbstractMatrix.prototype.expm1 = function expm1() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.expm1(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.expm1 = function expm1(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.expm1();\r\n  };\r\n\r\n  AbstractMatrix.prototype.floor = function floor() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.floor(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.floor = function floor(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.floor();\r\n  };\r\n\r\n  AbstractMatrix.prototype.fround = function fround() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.fround(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.fround = function fround(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.fround();\r\n  };\r\n\r\n  AbstractMatrix.prototype.log = function log() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.log(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.log = function log(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.log();\r\n  };\r\n\r\n  AbstractMatrix.prototype.log1p = function log1p() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.log1p(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.log1p = function log1p(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.log1p();\r\n  };\r\n\r\n  AbstractMatrix.prototype.log10 = function log10() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.log10(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.log10 = function log10(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.log10();\r\n  };\r\n\r\n  AbstractMatrix.prototype.log2 = function log2() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.log2(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.log2 = function log2(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.log2();\r\n  };\r\n\r\n  AbstractMatrix.prototype.round = function round() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.round(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.round = function round(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.round();\r\n  };\r\n\r\n  AbstractMatrix.prototype.sign = function sign() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.sign(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.sign = function sign(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.sign();\r\n  };\r\n\r\n  AbstractMatrix.prototype.sin = function sin() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.sin(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.sin = function sin(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.sin();\r\n  };\r\n\r\n  AbstractMatrix.prototype.sinh = function sinh() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.sinh(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.sinh = function sinh(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.sinh();\r\n  };\r\n\r\n  AbstractMatrix.prototype.sqrt = function sqrt() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.sqrt(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.sqrt = function sqrt(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.sqrt();\r\n  };\r\n\r\n  AbstractMatrix.prototype.tan = function tan() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.tan(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.tan = function tan(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.tan();\r\n  };\r\n\r\n  AbstractMatrix.prototype.tanh = function tanh() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.tanh(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.tanh = function tanh(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.tanh();\r\n  };\r\n\r\n  AbstractMatrix.prototype.trunc = function trunc() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.trunc(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.trunc = function trunc(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.trunc();\r\n  };\r\n\r\n  AbstractMatrix.pow = function pow(matrix, arg0) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.pow(arg0);\r\n  };\r\n\r\n  AbstractMatrix.prototype.pow = function pow(value) {\r\n    if (typeof value === 'number') return this.powS(value);\r\n    return this.powM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.powS = function powS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) ** value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.powM = function powM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) ** matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n}\r\n\r\n/**\r\n * @private\r\n * Check that a row index is not out of bounds\r\n * @param {Matrix} matrix\r\n * @param {number} index\r\n * @param {boolean} [outer]\r\n */\r\nfunction checkRowIndex(matrix, index, outer) {\r\n  let max = outer ? matrix.rows : matrix.rows - 1;\r\n  if (index < 0 || index > max) {\r\n    throw new RangeError('Row index out of range');\r\n  }\r\n}\r\n\r\n/**\r\n * @private\r\n * Check that a column index is not out of bounds\r\n * @param {Matrix} matrix\r\n * @param {number} index\r\n * @param {boolean} [outer]\r\n */\r\nfunction checkColumnIndex(matrix, index, outer) {\r\n  let max = outer ? matrix.columns : matrix.columns - 1;\r\n  if (index < 0 || index > max) {\r\n    throw new RangeError('Column index out of range');\r\n  }\r\n}\r\n\r\n/**\r\n * @private\r\n * Check that the provided vector is an array with the right length\r\n * @param {Matrix} matrix\r\n * @param {Array|Matrix} vector\r\n * @return {Array}\r\n * @throws {RangeError}\r\n */\r\nfunction checkRowVector(matrix, vector) {\r\n  if (vector.to1DArray) {\r\n    vector = vector.to1DArray();\r\n  }\r\n  if (vector.length !== matrix.columns) {\r\n    throw new RangeError(\r\n      'vector size must be the same as the number of columns',\r\n    );\r\n  }\r\n  return vector;\r\n}\r\n\r\n/**\r\n * @private\r\n * Check that the provided vector is an array with the right length\r\n * @param {Matrix} matrix\r\n * @param {Array|Matrix} vector\r\n * @return {Array}\r\n * @throws {RangeError}\r\n */\r\nfunction checkColumnVector(matrix, vector) {\r\n  if (vector.to1DArray) {\r\n    vector = vector.to1DArray();\r\n  }\r\n  if (vector.length !== matrix.rows) {\r\n    throw new RangeError('vector size must be the same as the number of rows');\r\n  }\r\n  return vector;\r\n}\r\n\r\nfunction checkRowIndices(matrix, rowIndices) {\r\n  if (!isAnyArray.isAnyArray(rowIndices)) {\r\n    throw new TypeError('row indices must be an array');\r\n  }\r\n\r\n  for (let i = 0; i < rowIndices.length; i++) {\r\n    if (rowIndices[i] < 0 || rowIndices[i] >= matrix.rows) {\r\n      throw new RangeError('row indices are out of range');\r\n    }\r\n  }\r\n}\r\n\r\nfunction checkColumnIndices(matrix, columnIndices) {\r\n  if (!isAnyArray.isAnyArray(columnIndices)) {\r\n    throw new TypeError('column indices must be an array');\r\n  }\r\n\r\n  for (let i = 0; i < columnIndices.length; i++) {\r\n    if (columnIndices[i] < 0 || columnIndices[i] >= matrix.columns) {\r\n      throw new RangeError('column indices are out of range');\r\n    }\r\n  }\r\n}\r\n\r\nfunction checkRange(matrix, startRow, endRow, startColumn, endColumn) {\r\n  if (arguments.length !== 5) {\r\n    throw new RangeError('expected 4 arguments');\r\n  }\r\n  checkNumber('startRow', startRow);\r\n  checkNumber('endRow', endRow);\r\n  checkNumber('startColumn', startColumn);\r\n  checkNumber('endColumn', endColumn);\r\n  if (\r\n    startRow > endRow ||\r\n    startColumn > endColumn ||\r\n    startRow < 0 ||\r\n    startRow >= matrix.rows ||\r\n    endRow < 0 ||\r\n    endRow >= matrix.rows ||\r\n    startColumn < 0 ||\r\n    startColumn >= matrix.columns ||\r\n    endColumn < 0 ||\r\n    endColumn >= matrix.columns\r\n  ) {\r\n    throw new RangeError('Submatrix indices are out of range');\r\n  }\r\n}\r\n\r\nfunction newArray(length, value = 0) {\r\n  let array = [];\r\n  for (let i = 0; i < length; i++) {\r\n    array.push(value);\r\n  }\r\n  return array;\r\n}\r\n\r\nfunction checkNumber(name, value) {\r\n  if (typeof value !== 'number') {\r\n    throw new TypeError(`${name} must be a number`);\r\n  }\r\n}\r\n\r\nfunction checkNonEmpty(matrix) {\r\n  if (matrix.isEmpty()) {\r\n    throw new Error('Empty matrix has no elements to index');\r\n  }\r\n}\r\n\r\nfunction sumByRow(matrix) {\r\n  let sum = newArray(matrix.rows);\r\n  for (let i = 0; i < matrix.rows; ++i) {\r\n    for (let j = 0; j < matrix.columns; ++j) {\r\n      sum[i] += matrix.get(i, j);\r\n    }\r\n  }\r\n  return sum;\r\n}\r\n\r\nfunction sumByColumn(matrix) {\r\n  let sum = newArray(matrix.columns);\r\n  for (let i = 0; i < matrix.rows; ++i) {\r\n    for (let j = 0; j < matrix.columns; ++j) {\r\n      sum[j] += matrix.get(i, j);\r\n    }\r\n  }\r\n  return sum;\r\n}\r\n\r\nfunction sumAll(matrix) {\r\n  let v = 0;\r\n  for (let i = 0; i < matrix.rows; i++) {\r\n    for (let j = 0; j < matrix.columns; j++) {\r\n      v += matrix.get(i, j);\r\n    }\r\n  }\r\n  return v;\r\n}\r\n\r\nfunction productByRow(matrix) {\r\n  let sum = newArray(matrix.rows, 1);\r\n  for (let i = 0; i < matrix.rows; ++i) {\r\n    for (let j = 0; j < matrix.columns; ++j) {\r\n      sum[i] *= matrix.get(i, j);\r\n    }\r\n  }\r\n  return sum;\r\n}\r\n\r\nfunction productByColumn(matrix) {\r\n  let sum = newArray(matrix.columns, 1);\r\n  for (let i = 0; i < matrix.rows; ++i) {\r\n    for (let j = 0; j < matrix.columns; ++j) {\r\n      sum[j] *= matrix.get(i, j);\r\n    }\r\n  }\r\n  return sum;\r\n}\r\n\r\nfunction productAll(matrix) {\r\n  let v = 1;\r\n  for (let i = 0; i < matrix.rows; i++) {\r\n    for (let j = 0; j < matrix.columns; j++) {\r\n      v *= matrix.get(i, j);\r\n    }\r\n  }\r\n  return v;\r\n}\r\n\r\nfunction varianceByRow(matrix, unbiased, mean) {\r\n  const rows = matrix.rows;\r\n  const cols = matrix.columns;\r\n  const variance = [];\r\n\r\n  for (let i = 0; i < rows; i++) {\r\n    let sum1 = 0;\r\n    let sum2 = 0;\r\n    let x = 0;\r\n    for (let j = 0; j < cols; j++) {\r\n      x = matrix.get(i, j) - mean[i];\r\n      sum1 += x;\r\n      sum2 += x * x;\r\n    }\r\n    if (unbiased) {\r\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\r\n    } else {\r\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\r\n    }\r\n  }\r\n  return variance;\r\n}\r\n\r\nfunction varianceByColumn(matrix, unbiased, mean) {\r\n  const rows = matrix.rows;\r\n  const cols = matrix.columns;\r\n  const variance = [];\r\n\r\n  for (let j = 0; j < cols; j++) {\r\n    let sum1 = 0;\r\n    let sum2 = 0;\r\n    let x = 0;\r\n    for (let i = 0; i < rows; i++) {\r\n      x = matrix.get(i, j) - mean[j];\r\n      sum1 += x;\r\n      sum2 += x * x;\r\n    }\r\n    if (unbiased) {\r\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\r\n    } else {\r\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\r\n    }\r\n  }\r\n  return variance;\r\n}\r\n\r\nfunction varianceAll(matrix, unbiased, mean) {\r\n  const rows = matrix.rows;\r\n  const cols = matrix.columns;\r\n  const size = rows * cols;\r\n\r\n  let sum1 = 0;\r\n  let sum2 = 0;\r\n  let x = 0;\r\n  for (let i = 0; i < rows; i++) {\r\n    for (let j = 0; j < cols; j++) {\r\n      x = matrix.get(i, j) - mean;\r\n      sum1 += x;\r\n      sum2 += x * x;\r\n    }\r\n  }\r\n  if (unbiased) {\r\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\r\n  } else {\r\n    return (sum2 - (sum1 * sum1) / size) / size;\r\n  }\r\n}\r\n\r\nfunction centerByRow(matrix, mean) {\r\n  for (let i = 0; i < matrix.rows; i++) {\r\n    for (let j = 0; j < matrix.columns; j++) {\r\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\r\n    }\r\n  }\r\n}\r\n\r\nfunction centerByColumn(matrix, mean) {\r\n  for (let i = 0; i < matrix.rows; i++) {\r\n    for (let j = 0; j < matrix.columns; j++) {\r\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\r\n    }\r\n  }\r\n}\r\n\r\nfunction centerAll(matrix, mean) {\r\n  for (let i = 0; i < matrix.rows; i++) {\r\n    for (let j = 0; j < matrix.columns; j++) {\r\n      matrix.set(i, j, matrix.get(i, j) - mean);\r\n    }\r\n  }\r\n}\r\n\r\nfunction getScaleByRow(matrix) {\r\n  const scale = [];\r\n  for (let i = 0; i < matrix.rows; i++) {\r\n    let sum = 0;\r\n    for (let j = 0; j < matrix.columns; j++) {\r\n      sum += matrix.get(i, j) ** 2 / (matrix.columns - 1);\r\n    }\r\n    scale.push(Math.sqrt(sum));\r\n  }\r\n  return scale;\r\n}\r\n\r\nfunction scaleByRow(matrix, scale) {\r\n  for (let i = 0; i < matrix.rows; i++) {\r\n    for (let j = 0; j < matrix.columns; j++) {\r\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\r\n    }\r\n  }\r\n}\r\n\r\nfunction getScaleByColumn(matrix) {\r\n  const scale = [];\r\n  for (let j = 0; j < matrix.columns; j++) {\r\n    let sum = 0;\r\n    for (let i = 0; i < matrix.rows; i++) {\r\n      sum += matrix.get(i, j) ** 2 / (matrix.rows - 1);\r\n    }\r\n    scale.push(Math.sqrt(sum));\r\n  }\r\n  return scale;\r\n}\r\n\r\nfunction scaleByColumn(matrix, scale) {\r\n  for (let i = 0; i < matrix.rows; i++) {\r\n    for (let j = 0; j < matrix.columns; j++) {\r\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\r\n    }\r\n  }\r\n}\r\n\r\nfunction getScaleAll(matrix) {\r\n  const divider = matrix.size - 1;\r\n  let sum = 0;\r\n  for (let j = 0; j < matrix.columns; j++) {\r\n    for (let i = 0; i < matrix.rows; i++) {\r\n      sum += matrix.get(i, j) ** 2 / divider;\r\n    }\r\n  }\r\n  return Math.sqrt(sum);\r\n}\r\n\r\nfunction scaleAll(matrix, scale) {\r\n  for (let i = 0; i < matrix.rows; i++) {\r\n    for (let j = 0; j < matrix.columns; j++) {\r\n      matrix.set(i, j, matrix.get(i, j) / scale);\r\n    }\r\n  }\r\n}\r\n\r\nclass AbstractMatrix {\r\n  static from1DArray(newRows, newColumns, newData) {\r\n    let length = newRows * newColumns;\r\n    if (length !== newData.length) {\r\n      throw new RangeError('data length does not match given dimensions');\r\n    }\r\n    let newMatrix = new Matrix(newRows, newColumns);\r\n    for (let row = 0; row < newRows; row++) {\r\n      for (let column = 0; column < newColumns; column++) {\r\n        newMatrix.set(row, column, newData[row * newColumns + column]);\r\n      }\r\n    }\r\n    return newMatrix;\r\n  }\r\n\r\n  static rowVector(newData) {\r\n    let vector = new Matrix(1, newData.length);\r\n    for (let i = 0; i < newData.length; i++) {\r\n      vector.set(0, i, newData[i]);\r\n    }\r\n    return vector;\r\n  }\r\n\r\n  static columnVector(newData) {\r\n    let vector = new Matrix(newData.length, 1);\r\n    for (let i = 0; i < newData.length; i++) {\r\n      vector.set(i, 0, newData[i]);\r\n    }\r\n    return vector;\r\n  }\r\n\r\n  static zeros(rows, columns) {\r\n    return new Matrix(rows, columns);\r\n  }\r\n\r\n  static ones(rows, columns) {\r\n    return new Matrix(rows, columns).fill(1);\r\n  }\r\n\r\n  static rand(rows, columns, options = {}) {\r\n    if (typeof options !== 'object') {\r\n      throw new TypeError('options must be an object');\r\n    }\r\n    const { random = Math.random } = options;\r\n    let matrix = new Matrix(rows, columns);\r\n    for (let i = 0; i < rows; i++) {\r\n      for (let j = 0; j < columns; j++) {\r\n        matrix.set(i, j, random());\r\n      }\r\n    }\r\n    return matrix;\r\n  }\r\n\r\n  static randInt(rows, columns, options = {}) {\r\n    if (typeof options !== 'object') {\r\n      throw new TypeError('options must be an object');\r\n    }\r\n    const { min = 0, max = 1000, random = Math.random } = options;\r\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\r\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\r\n    if (min >= max) throw new RangeError('min must be smaller than max');\r\n    let interval = max - min;\r\n    let matrix = new Matrix(rows, columns);\r\n    for (let i = 0; i < rows; i++) {\r\n      for (let j = 0; j < columns; j++) {\r\n        let value = min + Math.round(random() * interval);\r\n        matrix.set(i, j, value);\r\n      }\r\n    }\r\n    return matrix;\r\n  }\r\n\r\n  static eye(rows, columns, value) {\r\n    if (columns === undefined) columns = rows;\r\n    if (value === undefined) value = 1;\r\n    let min = Math.min(rows, columns);\r\n    let matrix = this.zeros(rows, columns);\r\n    for (let i = 0; i < min; i++) {\r\n      matrix.set(i, i, value);\r\n    }\r\n    return matrix;\r\n  }\r\n\r\n  static diag(data, rows, columns) {\r\n    let l = data.length;\r\n    if (rows === undefined) rows = l;\r\n    if (columns === undefined) columns = rows;\r\n    let min = Math.min(l, rows, columns);\r\n    let matrix = this.zeros(rows, columns);\r\n    for (let i = 0; i < min; i++) {\r\n      matrix.set(i, i, data[i]);\r\n    }\r\n    return matrix;\r\n  }\r\n\r\n  static min(matrix1, matrix2) {\r\n    matrix1 = this.checkMatrix(matrix1);\r\n    matrix2 = this.checkMatrix(matrix2);\r\n    let rows = matrix1.rows;\r\n    let columns = matrix1.columns;\r\n    let result = new Matrix(rows, columns);\r\n    for (let i = 0; i < rows; i++) {\r\n      for (let j = 0; j < columns; j++) {\r\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  static max(matrix1, matrix2) {\r\n    matrix1 = this.checkMatrix(matrix1);\r\n    matrix2 = this.checkMatrix(matrix2);\r\n    let rows = matrix1.rows;\r\n    let columns = matrix1.columns;\r\n    let result = new this(rows, columns);\r\n    for (let i = 0; i < rows; i++) {\r\n      for (let j = 0; j < columns; j++) {\r\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  static checkMatrix(value) {\r\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\r\n  }\r\n\r\n  static isMatrix(value) {\r\n    return value != null && value.klass === 'Matrix';\r\n  }\r\n\r\n  get size() {\r\n    return this.rows * this.columns;\r\n  }\r\n\r\n  apply(callback) {\r\n    if (typeof callback !== 'function') {\r\n      throw new TypeError('callback must be a function');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        callback.call(this, i, j);\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  to1DArray() {\r\n    let array = [];\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        array.push(this.get(i, j));\r\n      }\r\n    }\r\n    return array;\r\n  }\r\n\r\n  to2DArray() {\r\n    let copy = [];\r\n    for (let i = 0; i < this.rows; i++) {\r\n      copy.push([]);\r\n      for (let j = 0; j < this.columns; j++) {\r\n        copy[i].push(this.get(i, j));\r\n      }\r\n    }\r\n    return copy;\r\n  }\r\n\r\n  toJSON() {\r\n    return this.to2DArray();\r\n  }\r\n\r\n  isRowVector() {\r\n    return this.rows === 1;\r\n  }\r\n\r\n  isColumnVector() {\r\n    return this.columns === 1;\r\n  }\r\n\r\n  isVector() {\r\n    return this.rows === 1 || this.columns === 1;\r\n  }\r\n\r\n  isSquare() {\r\n    return this.rows === this.columns;\r\n  }\r\n\r\n  isEmpty() {\r\n    return this.rows === 0 || this.columns === 0;\r\n  }\r\n\r\n  isSymmetric() {\r\n    if (this.isSquare()) {\r\n      for (let i = 0; i < this.rows; i++) {\r\n        for (let j = 0; j <= i; j++) {\r\n          if (this.get(i, j) !== this.get(j, i)) {\r\n            return false;\r\n          }\r\n        }\r\n      }\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  isDistance() {\r\n    if (!this.isSymmetric()) return false;\r\n\r\n    for (let i = 0; i < this.rows; i++) {\r\n      if (this.get(i, i) !== 0) return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  isEchelonForm() {\r\n    let i = 0;\r\n    let j = 0;\r\n    let previousColumn = -1;\r\n    let isEchelonForm = true;\r\n    let checked = false;\r\n    while (i < this.rows && isEchelonForm) {\r\n      j = 0;\r\n      checked = false;\r\n      while (j < this.columns && checked === false) {\r\n        if (this.get(i, j) === 0) {\r\n          j++;\r\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\r\n          checked = true;\r\n          previousColumn = j;\r\n        } else {\r\n          isEchelonForm = false;\r\n          checked = true;\r\n        }\r\n      }\r\n      i++;\r\n    }\r\n    return isEchelonForm;\r\n  }\r\n\r\n  isReducedEchelonForm() {\r\n    let i = 0;\r\n    let j = 0;\r\n    let previousColumn = -1;\r\n    let isReducedEchelonForm = true;\r\n    let checked = false;\r\n    while (i < this.rows && isReducedEchelonForm) {\r\n      j = 0;\r\n      checked = false;\r\n      while (j < this.columns && checked === false) {\r\n        if (this.get(i, j) === 0) {\r\n          j++;\r\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\r\n          checked = true;\r\n          previousColumn = j;\r\n        } else {\r\n          isReducedEchelonForm = false;\r\n          checked = true;\r\n        }\r\n      }\r\n      for (let k = j + 1; k < this.rows; k++) {\r\n        if (this.get(i, k) !== 0) {\r\n          isReducedEchelonForm = false;\r\n        }\r\n      }\r\n      i++;\r\n    }\r\n    return isReducedEchelonForm;\r\n  }\r\n\r\n  echelonForm() {\r\n    let result = this.clone();\r\n    let h = 0;\r\n    let k = 0;\r\n    while (h < result.rows && k < result.columns) {\r\n      let iMax = h;\r\n      for (let i = h; i < result.rows; i++) {\r\n        if (result.get(i, k) > result.get(iMax, k)) {\r\n          iMax = i;\r\n        }\r\n      }\r\n      if (result.get(iMax, k) === 0) {\r\n        k++;\r\n      } else {\r\n        result.swapRows(h, iMax);\r\n        let tmp = result.get(h, k);\r\n        for (let j = k; j < result.columns; j++) {\r\n          result.set(h, j, result.get(h, j) / tmp);\r\n        }\r\n        for (let i = h + 1; i < result.rows; i++) {\r\n          let factor = result.get(i, k) / result.get(h, k);\r\n          result.set(i, k, 0);\r\n          for (let j = k + 1; j < result.columns; j++) {\r\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\r\n          }\r\n        }\r\n        h++;\r\n        k++;\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  reducedEchelonForm() {\r\n    let result = this.echelonForm();\r\n    let m = result.columns;\r\n    let n = result.rows;\r\n    let h = n - 1;\r\n    while (h >= 0) {\r\n      if (result.maxRow(h) === 0) {\r\n        h--;\r\n      } else {\r\n        let p = 0;\r\n        let pivot = false;\r\n        while (p < n && pivot === false) {\r\n          if (result.get(h, p) === 1) {\r\n            pivot = true;\r\n          } else {\r\n            p++;\r\n          }\r\n        }\r\n        for (let i = 0; i < h; i++) {\r\n          let factor = result.get(i, p);\r\n          for (let j = p; j < m; j++) {\r\n            let tmp = result.get(i, j) - factor * result.get(h, j);\r\n            result.set(i, j, tmp);\r\n          }\r\n        }\r\n        h--;\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  set() {\r\n    throw new Error('set method is unimplemented');\r\n  }\r\n\r\n  get() {\r\n    throw new Error('get method is unimplemented');\r\n  }\r\n\r\n  repeat(options = {}) {\r\n    if (typeof options !== 'object') {\r\n      throw new TypeError('options must be an object');\r\n    }\r\n    const { rows = 1, columns = 1 } = options;\r\n    if (!Number.isInteger(rows) || rows <= 0) {\r\n      throw new TypeError('rows must be a positive integer');\r\n    }\r\n    if (!Number.isInteger(columns) || columns <= 0) {\r\n      throw new TypeError('columns must be a positive integer');\r\n    }\r\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\r\n    for (let i = 0; i < rows; i++) {\r\n      for (let j = 0; j < columns; j++) {\r\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\r\n      }\r\n    }\r\n    return matrix;\r\n  }\r\n\r\n  fill(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, value);\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  neg() {\r\n    return this.mulS(-1);\r\n  }\r\n\r\n  getRow(index) {\r\n    checkRowIndex(this, index);\r\n    let row = [];\r\n    for (let i = 0; i < this.columns; i++) {\r\n      row.push(this.get(index, i));\r\n    }\r\n    return row;\r\n  }\r\n\r\n  getRowVector(index) {\r\n    return Matrix.rowVector(this.getRow(index));\r\n  }\r\n\r\n  setRow(index, array) {\r\n    checkRowIndex(this, index);\r\n    array = checkRowVector(this, array);\r\n    for (let i = 0; i < this.columns; i++) {\r\n      this.set(index, i, array[i]);\r\n    }\r\n    return this;\r\n  }\r\n\r\n  swapRows(row1, row2) {\r\n    checkRowIndex(this, row1);\r\n    checkRowIndex(this, row2);\r\n    for (let i = 0; i < this.columns; i++) {\r\n      let temp = this.get(row1, i);\r\n      this.set(row1, i, this.get(row2, i));\r\n      this.set(row2, i, temp);\r\n    }\r\n    return this;\r\n  }\r\n\r\n  getColumn(index) {\r\n    checkColumnIndex(this, index);\r\n    let column = [];\r\n    for (let i = 0; i < this.rows; i++) {\r\n      column.push(this.get(i, index));\r\n    }\r\n    return column;\r\n  }\r\n\r\n  getColumnVector(index) {\r\n    return Matrix.columnVector(this.getColumn(index));\r\n  }\r\n\r\n  setColumn(index, array) {\r\n    checkColumnIndex(this, index);\r\n    array = checkColumnVector(this, array);\r\n    for (let i = 0; i < this.rows; i++) {\r\n      this.set(i, index, array[i]);\r\n    }\r\n    return this;\r\n  }\r\n\r\n  swapColumns(column1, column2) {\r\n    checkColumnIndex(this, column1);\r\n    checkColumnIndex(this, column2);\r\n    for (let i = 0; i < this.rows; i++) {\r\n      let temp = this.get(i, column1);\r\n      this.set(i, column1, this.get(i, column2));\r\n      this.set(i, column2, temp);\r\n    }\r\n    return this;\r\n  }\r\n\r\n  addRowVector(vector) {\r\n    vector = checkRowVector(this, vector);\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) + vector[j]);\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  subRowVector(vector) {\r\n    vector = checkRowVector(this, vector);\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) - vector[j]);\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  mulRowVector(vector) {\r\n    vector = checkRowVector(this, vector);\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) * vector[j]);\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  divRowVector(vector) {\r\n    vector = checkRowVector(this, vector);\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) / vector[j]);\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  addColumnVector(vector) {\r\n    vector = checkColumnVector(this, vector);\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) + vector[i]);\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  subColumnVector(vector) {\r\n    vector = checkColumnVector(this, vector);\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) - vector[i]);\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  mulColumnVector(vector) {\r\n    vector = checkColumnVector(this, vector);\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) * vector[i]);\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  divColumnVector(vector) {\r\n    vector = checkColumnVector(this, vector);\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) / vector[i]);\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  mulRow(index, value) {\r\n    checkRowIndex(this, index);\r\n    for (let i = 0; i < this.columns; i++) {\r\n      this.set(index, i, this.get(index, i) * value);\r\n    }\r\n    return this;\r\n  }\r\n\r\n  mulColumn(index, value) {\r\n    checkColumnIndex(this, index);\r\n    for (let i = 0; i < this.rows; i++) {\r\n      this.set(i, index, this.get(i, index) * value);\r\n    }\r\n    return this;\r\n  }\r\n\r\n  max(by) {\r\n    if (this.isEmpty()) {\r\n      return NaN;\r\n    }\r\n    switch (by) {\r\n      case 'row': {\r\n        const max = new Array(this.rows).fill(Number.NEGATIVE_INFINITY);\r\n        for (let row = 0; row < this.rows; row++) {\r\n          for (let column = 0; column < this.columns; column++) {\r\n            if (this.get(row, column) > max[row]) {\r\n              max[row] = this.get(row, column);\r\n            }\r\n          }\r\n        }\r\n        return max;\r\n      }\r\n      case 'column': {\r\n        const max = new Array(this.columns).fill(Number.NEGATIVE_INFINITY);\r\n        for (let row = 0; row < this.rows; row++) {\r\n          for (let column = 0; column < this.columns; column++) {\r\n            if (this.get(row, column) > max[column]) {\r\n              max[column] = this.get(row, column);\r\n            }\r\n          }\r\n        }\r\n        return max;\r\n      }\r\n      case undefined: {\r\n        let max = this.get(0, 0);\r\n        for (let row = 0; row < this.rows; row++) {\r\n          for (let column = 0; column < this.columns; column++) {\r\n            if (this.get(row, column) > max) {\r\n              max = this.get(row, column);\r\n            }\r\n          }\r\n        }\r\n        return max;\r\n      }\r\n      default:\r\n        throw new Error(`invalid option: ${by}`);\r\n    }\r\n  }\r\n\r\n  maxIndex() {\r\n    checkNonEmpty(this);\r\n    let v = this.get(0, 0);\r\n    let idx = [0, 0];\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        if (this.get(i, j) > v) {\r\n          v = this.get(i, j);\r\n          idx[0] = i;\r\n          idx[1] = j;\r\n        }\r\n      }\r\n    }\r\n    return idx;\r\n  }\r\n\r\n  min(by) {\r\n    if (this.isEmpty()) {\r\n      return NaN;\r\n    }\r\n\r\n    switch (by) {\r\n      case 'row': {\r\n        const min = new Array(this.rows).fill(Number.POSITIVE_INFINITY);\r\n        for (let row = 0; row < this.rows; row++) {\r\n          for (let column = 0; column < this.columns; column++) {\r\n            if (this.get(row, column) < min[row]) {\r\n              min[row] = this.get(row, column);\r\n            }\r\n          }\r\n        }\r\n        return min;\r\n      }\r\n      case 'column': {\r\n        const min = new Array(this.columns).fill(Number.POSITIVE_INFINITY);\r\n        for (let row = 0; row < this.rows; row++) {\r\n          for (let column = 0; column < this.columns; column++) {\r\n            if (this.get(row, column) < min[column]) {\r\n              min[column] = this.get(row, column);\r\n            }\r\n          }\r\n        }\r\n        return min;\r\n      }\r\n      case undefined: {\r\n        let min = this.get(0, 0);\r\n        for (let row = 0; row < this.rows; row++) {\r\n          for (let column = 0; column < this.columns; column++) {\r\n            if (this.get(row, column) < min) {\r\n              min = this.get(row, column);\r\n            }\r\n          }\r\n        }\r\n        return min;\r\n      }\r\n      default:\r\n        throw new Error(`invalid option: ${by}`);\r\n    }\r\n  }\r\n\r\n  minIndex() {\r\n    checkNonEmpty(this);\r\n    let v = this.get(0, 0);\r\n    let idx = [0, 0];\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        if (this.get(i, j) < v) {\r\n          v = this.get(i, j);\r\n          idx[0] = i;\r\n          idx[1] = j;\r\n        }\r\n      }\r\n    }\r\n    return idx;\r\n  }\r\n\r\n  maxRow(row) {\r\n    checkRowIndex(this, row);\r\n    if (this.isEmpty()) {\r\n      return NaN;\r\n    }\r\n    let v = this.get(row, 0);\r\n    for (let i = 1; i < this.columns; i++) {\r\n      if (this.get(row, i) > v) {\r\n        v = this.get(row, i);\r\n      }\r\n    }\r\n    return v;\r\n  }\r\n\r\n  maxRowIndex(row) {\r\n    checkRowIndex(this, row);\r\n    checkNonEmpty(this);\r\n    let v = this.get(row, 0);\r\n    let idx = [row, 0];\r\n    for (let i = 1; i < this.columns; i++) {\r\n      if (this.get(row, i) > v) {\r\n        v = this.get(row, i);\r\n        idx[1] = i;\r\n      }\r\n    }\r\n    return idx;\r\n  }\r\n\r\n  minRow(row) {\r\n    checkRowIndex(this, row);\r\n    if (this.isEmpty()) {\r\n      return NaN;\r\n    }\r\n    let v = this.get(row, 0);\r\n    for (let i = 1; i < this.columns; i++) {\r\n      if (this.get(row, i) < v) {\r\n        v = this.get(row, i);\r\n      }\r\n    }\r\n    return v;\r\n  }\r\n\r\n  minRowIndex(row) {\r\n    checkRowIndex(this, row);\r\n    checkNonEmpty(this);\r\n    let v = this.get(row, 0);\r\n    let idx = [row, 0];\r\n    for (let i = 1; i < this.columns; i++) {\r\n      if (this.get(row, i) < v) {\r\n        v = this.get(row, i);\r\n        idx[1] = i;\r\n      }\r\n    }\r\n    return idx;\r\n  }\r\n\r\n  maxColumn(column) {\r\n    checkColumnIndex(this, column);\r\n    if (this.isEmpty()) {\r\n      return NaN;\r\n    }\r\n    let v = this.get(0, column);\r\n    for (let i = 1; i < this.rows; i++) {\r\n      if (this.get(i, column) > v) {\r\n        v = this.get(i, column);\r\n      }\r\n    }\r\n    return v;\r\n  }\r\n\r\n  maxColumnIndex(column) {\r\n    checkColumnIndex(this, column);\r\n    checkNonEmpty(this);\r\n    let v = this.get(0, column);\r\n    let idx = [0, column];\r\n    for (let i = 1; i < this.rows; i++) {\r\n      if (this.get(i, column) > v) {\r\n        v = this.get(i, column);\r\n        idx[0] = i;\r\n      }\r\n    }\r\n    return idx;\r\n  }\r\n\r\n  minColumn(column) {\r\n    checkColumnIndex(this, column);\r\n    if (this.isEmpty()) {\r\n      return NaN;\r\n    }\r\n    let v = this.get(0, column);\r\n    for (let i = 1; i < this.rows; i++) {\r\n      if (this.get(i, column) < v) {\r\n        v = this.get(i, column);\r\n      }\r\n    }\r\n    return v;\r\n  }\r\n\r\n  minColumnIndex(column) {\r\n    checkColumnIndex(this, column);\r\n    checkNonEmpty(this);\r\n    let v = this.get(0, column);\r\n    let idx = [0, column];\r\n    for (let i = 1; i < this.rows; i++) {\r\n      if (this.get(i, column) < v) {\r\n        v = this.get(i, column);\r\n        idx[0] = i;\r\n      }\r\n    }\r\n    return idx;\r\n  }\r\n\r\n  diag() {\r\n    let min = Math.min(this.rows, this.columns);\r\n    let diag = [];\r\n    for (let i = 0; i < min; i++) {\r\n      diag.push(this.get(i, i));\r\n    }\r\n    return diag;\r\n  }\r\n\r\n  norm(type = 'frobenius') {\r\n    switch (type) {\r\n      case 'max':\r\n        return this.max();\r\n      case 'frobenius':\r\n        return Math.sqrt(this.dot(this));\r\n      default:\r\n        throw new RangeError(`unknown norm type: ${type}`);\r\n    }\r\n  }\r\n\r\n  cumulativeSum() {\r\n    let sum = 0;\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        sum += this.get(i, j);\r\n        this.set(i, j, sum);\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  dot(vector2) {\r\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\r\n    let vector1 = this.to1DArray();\r\n    if (vector1.length !== vector2.length) {\r\n      throw new RangeError('vectors do not have the same size');\r\n    }\r\n    let dot = 0;\r\n    for (let i = 0; i < vector1.length; i++) {\r\n      dot += vector1[i] * vector2[i];\r\n    }\r\n    return dot;\r\n  }\r\n\r\n  mmul(other) {\r\n    other = Matrix.checkMatrix(other);\r\n\r\n    let m = this.rows;\r\n    let n = this.columns;\r\n    let p = other.columns;\r\n\r\n    let result = new Matrix(m, p);\r\n\r\n    let Bcolj = new Float64Array(n);\r\n    for (let j = 0; j < p; j++) {\r\n      for (let k = 0; k < n; k++) {\r\n        Bcolj[k] = other.get(k, j);\r\n      }\r\n\r\n      for (let i = 0; i < m; i++) {\r\n        let s = 0;\r\n        for (let k = 0; k < n; k++) {\r\n          s += this.get(i, k) * Bcolj[k];\r\n        }\r\n\r\n        result.set(i, j, s);\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  mpow(scalar) {\r\n    if (!this.isSquare()) {\r\n      throw new RangeError('Matrix must be square');\r\n    }\r\n    if (!Number.isInteger(scalar) || scalar < 0) {\r\n      throw new RangeError('Exponent must be a non-negative integer');\r\n    }\r\n    // Russian Peasant exponentiation, i.e. exponentiation by squaring\r\n    let result = Matrix.eye(this.rows);\r\n    let bb = this;\r\n    // Note: Don't bit shift. In JS, that would truncate at 32 bits\r\n    for (let e = scalar; e >= 1; e /= 2) {\r\n      if ((e & 1) !== 0) {\r\n        result = result.mmul(bb);\r\n      }\r\n      bb = bb.mmul(bb);\r\n    }\r\n    return result;\r\n  }\r\n\r\n  strassen2x2(other) {\r\n    other = Matrix.checkMatrix(other);\r\n    let result = new Matrix(2, 2);\r\n    const a11 = this.get(0, 0);\r\n    const b11 = other.get(0, 0);\r\n    const a12 = this.get(0, 1);\r\n    const b12 = other.get(0, 1);\r\n    const a21 = this.get(1, 0);\r\n    const b21 = other.get(1, 0);\r\n    const a22 = this.get(1, 1);\r\n    const b22 = other.get(1, 1);\r\n\r\n    // Compute intermediate values.\r\n    const m1 = (a11 + a22) * (b11 + b22);\r\n    const m2 = (a21 + a22) * b11;\r\n    const m3 = a11 * (b12 - b22);\r\n    const m4 = a22 * (b21 - b11);\r\n    const m5 = (a11 + a12) * b22;\r\n    const m6 = (a21 - a11) * (b11 + b12);\r\n    const m7 = (a12 - a22) * (b21 + b22);\r\n\r\n    // Combine intermediate values into the output.\r\n    const c00 = m1 + m4 - m5 + m7;\r\n    const c01 = m3 + m5;\r\n    const c10 = m2 + m4;\r\n    const c11 = m1 - m2 + m3 + m6;\r\n\r\n    result.set(0, 0, c00);\r\n    result.set(0, 1, c01);\r\n    result.set(1, 0, c10);\r\n    result.set(1, 1, c11);\r\n    return result;\r\n  }\r\n\r\n  strassen3x3(other) {\r\n    other = Matrix.checkMatrix(other);\r\n    let result = new Matrix(3, 3);\r\n\r\n    const a00 = this.get(0, 0);\r\n    const a01 = this.get(0, 1);\r\n    const a02 = this.get(0, 2);\r\n    const a10 = this.get(1, 0);\r\n    const a11 = this.get(1, 1);\r\n    const a12 = this.get(1, 2);\r\n    const a20 = this.get(2, 0);\r\n    const a21 = this.get(2, 1);\r\n    const a22 = this.get(2, 2);\r\n\r\n    const b00 = other.get(0, 0);\r\n    const b01 = other.get(0, 1);\r\n    const b02 = other.get(0, 2);\r\n    const b10 = other.get(1, 0);\r\n    const b11 = other.get(1, 1);\r\n    const b12 = other.get(1, 2);\r\n    const b20 = other.get(2, 0);\r\n    const b21 = other.get(2, 1);\r\n    const b22 = other.get(2, 2);\r\n\r\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\r\n    const m2 = (a00 - a10) * (-b01 + b11);\r\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\r\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\r\n    const m5 = (a10 + a11) * (-b00 + b01);\r\n    const m6 = a00 * b00;\r\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\r\n    const m8 = (-a00 + a20) * (b02 - b12);\r\n    const m9 = (a20 + a21) * (-b00 + b02);\r\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\r\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\r\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\r\n    const m13 = (a02 - a22) * (b11 - b21);\r\n    const m14 = a02 * b20;\r\n    const m15 = (a21 + a22) * (-b20 + b21);\r\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\r\n    const m17 = (a02 - a12) * (b12 - b22);\r\n    const m18 = (a11 + a12) * (-b20 + b22);\r\n    const m19 = a01 * b10;\r\n    const m20 = a12 * b21;\r\n    const m21 = a10 * b02;\r\n    const m22 = a20 * b01;\r\n    const m23 = a22 * b22;\r\n\r\n    const c00 = m6 + m14 + m19;\r\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\r\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\r\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\r\n    const c11 = m2 + m4 + m5 + m6 + m20;\r\n    const c12 = m14 + m16 + m17 + m18 + m21;\r\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\r\n    const c21 = m12 + m13 + m14 + m15 + m22;\r\n    const c22 = m6 + m7 + m8 + m9 + m23;\r\n\r\n    result.set(0, 0, c00);\r\n    result.set(0, 1, c01);\r\n    result.set(0, 2, c02);\r\n    result.set(1, 0, c10);\r\n    result.set(1, 1, c11);\r\n    result.set(1, 2, c12);\r\n    result.set(2, 0, c20);\r\n    result.set(2, 1, c21);\r\n    result.set(2, 2, c22);\r\n    return result;\r\n  }\r\n\r\n  mmulStrassen(y) {\r\n    y = Matrix.checkMatrix(y);\r\n    let x = this.clone();\r\n    let r1 = x.rows;\r\n    let c1 = x.columns;\r\n    let r2 = y.rows;\r\n    let c2 = y.columns;\r\n    if (c1 !== r2) {\r\n      // eslint-disable-next-line no-console\r\n      console.warn(\r\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\r\n      );\r\n    }\r\n\r\n    // Put a matrix into the top left of a matrix of zeros.\r\n    // `rows` and `cols` are the dimensions of the output matrix.\r\n    function embed(mat, rows, cols) {\r\n      let r = mat.rows;\r\n      let c = mat.columns;\r\n      if (r === rows && c === cols) {\r\n        return mat;\r\n      } else {\r\n        let resultat = AbstractMatrix.zeros(rows, cols);\r\n        resultat = resultat.setSubMatrix(mat, 0, 0);\r\n        return resultat;\r\n      }\r\n    }\r\n\r\n    // Make sure both matrices are the same size.\r\n    // This is exclusively for simplicity:\r\n    // this algorithm can be implemented with matrices of different sizes.\r\n\r\n    let r = Math.max(r1, r2);\r\n    let c = Math.max(c1, c2);\r\n    x = embed(x, r, c);\r\n    y = embed(y, r, c);\r\n\r\n    // Our recursive multiplication function.\r\n    function blockMult(a, b, rows, cols) {\r\n      // For small matrices, resort to naive multiplication.\r\n      if (rows <= 512 || cols <= 512) {\r\n        return a.mmul(b); // a is equivalent to this\r\n      }\r\n\r\n      // Apply dynamic padding.\r\n      if (rows % 2 === 1 && cols % 2 === 1) {\r\n        a = embed(a, rows + 1, cols + 1);\r\n        b = embed(b, rows + 1, cols + 1);\r\n      } else if (rows % 2 === 1) {\r\n        a = embed(a, rows + 1, cols);\r\n        b = embed(b, rows + 1, cols);\r\n      } else if (cols % 2 === 1) {\r\n        a = embed(a, rows, cols + 1);\r\n        b = embed(b, rows, cols + 1);\r\n      }\r\n\r\n      let halfRows = parseInt(a.rows / 2, 10);\r\n      let halfCols = parseInt(a.columns / 2, 10);\r\n      // Subdivide input matrices.\r\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\r\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\r\n\r\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\r\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\r\n\r\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\r\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\r\n\r\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\r\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\r\n\r\n      // Compute intermediate values.\r\n      let m1 = blockMult(\r\n        AbstractMatrix.add(a11, a22),\r\n        AbstractMatrix.add(b11, b22),\r\n        halfRows,\r\n        halfCols,\r\n      );\r\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\r\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\r\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\r\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\r\n      let m6 = blockMult(\r\n        AbstractMatrix.sub(a21, a11),\r\n        AbstractMatrix.add(b11, b12),\r\n        halfRows,\r\n        halfCols,\r\n      );\r\n      let m7 = blockMult(\r\n        AbstractMatrix.sub(a12, a22),\r\n        AbstractMatrix.add(b21, b22),\r\n        halfRows,\r\n        halfCols,\r\n      );\r\n\r\n      // Combine intermediate values into the output.\r\n      let c11 = AbstractMatrix.add(m1, m4);\r\n      c11.sub(m5);\r\n      c11.add(m7);\r\n      let c12 = AbstractMatrix.add(m3, m5);\r\n      let c21 = AbstractMatrix.add(m2, m4);\r\n      let c22 = AbstractMatrix.sub(m1, m2);\r\n      c22.add(m3);\r\n      c22.add(m6);\r\n\r\n      // Crop output to the desired size (undo dynamic padding).\r\n      let result = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\r\n      result = result.setSubMatrix(c11, 0, 0);\r\n      result = result.setSubMatrix(c12, c11.rows, 0);\r\n      result = result.setSubMatrix(c21, 0, c11.columns);\r\n      result = result.setSubMatrix(c22, c11.rows, c11.columns);\r\n      return result.subMatrix(0, rows - 1, 0, cols - 1);\r\n    }\r\n\r\n    return blockMult(x, y, r, c);\r\n  }\r\n\r\n  scaleRows(options = {}) {\r\n    if (typeof options !== 'object') {\r\n      throw new TypeError('options must be an object');\r\n    }\r\n    const { min = 0, max = 1 } = options;\r\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\r\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\r\n    if (min >= max) throw new RangeError('min must be smaller than max');\r\n    let newMatrix = new Matrix(this.rows, this.columns);\r\n    for (let i = 0; i < this.rows; i++) {\r\n      const row = this.getRow(i);\r\n      if (row.length > 0) {\r\n        rescale(row, { min, max, output: row });\r\n      }\r\n      newMatrix.setRow(i, row);\r\n    }\r\n    return newMatrix;\r\n  }\r\n\r\n  scaleColumns(options = {}) {\r\n    if (typeof options !== 'object') {\r\n      throw new TypeError('options must be an object');\r\n    }\r\n    const { min = 0, max = 1 } = options;\r\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\r\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\r\n    if (min >= max) throw new RangeError('min must be smaller than max');\r\n    let newMatrix = new Matrix(this.rows, this.columns);\r\n    for (let i = 0; i < this.columns; i++) {\r\n      const column = this.getColumn(i);\r\n      if (column.length) {\r\n        rescale(column, {\r\n          min,\r\n          max,\r\n          output: column,\r\n        });\r\n      }\r\n      newMatrix.setColumn(i, column);\r\n    }\r\n    return newMatrix;\r\n  }\r\n\r\n  flipRows() {\r\n    const middle = Math.ceil(this.columns / 2);\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < middle; j++) {\r\n        let first = this.get(i, j);\r\n        let last = this.get(i, this.columns - 1 - j);\r\n        this.set(i, j, last);\r\n        this.set(i, this.columns - 1 - j, first);\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  flipColumns() {\r\n    const middle = Math.ceil(this.rows / 2);\r\n    for (let j = 0; j < this.columns; j++) {\r\n      for (let i = 0; i < middle; i++) {\r\n        let first = this.get(i, j);\r\n        let last = this.get(this.rows - 1 - i, j);\r\n        this.set(i, j, last);\r\n        this.set(this.rows - 1 - i, j, first);\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  kroneckerProduct(other) {\r\n    other = Matrix.checkMatrix(other);\r\n\r\n    let m = this.rows;\r\n    let n = this.columns;\r\n    let p = other.rows;\r\n    let q = other.columns;\r\n\r\n    let result = new Matrix(m * p, n * q);\r\n    for (let i = 0; i < m; i++) {\r\n      for (let j = 0; j < n; j++) {\r\n        for (let k = 0; k < p; k++) {\r\n          for (let l = 0; l < q; l++) {\r\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  kroneckerSum(other) {\r\n    other = Matrix.checkMatrix(other);\r\n    if (!this.isSquare() || !other.isSquare()) {\r\n      throw new Error('Kronecker Sum needs two Square Matrices');\r\n    }\r\n    let m = this.rows;\r\n    let n = other.rows;\r\n    let AxI = this.kroneckerProduct(Matrix.eye(n, n));\r\n    let IxB = Matrix.eye(m, m).kroneckerProduct(other);\r\n    return AxI.add(IxB);\r\n  }\r\n\r\n  transpose() {\r\n    let result = new Matrix(this.columns, this.rows);\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        result.set(j, i, this.get(i, j));\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  sortRows(compareFunction = compareNumbers) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      this.setRow(i, this.getRow(i).sort(compareFunction));\r\n    }\r\n    return this;\r\n  }\r\n\r\n  sortColumns(compareFunction = compareNumbers) {\r\n    for (let i = 0; i < this.columns; i++) {\r\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\r\n    }\r\n    return this;\r\n  }\r\n\r\n  subMatrix(startRow, endRow, startColumn, endColumn) {\r\n    checkRange(this, startRow, endRow, startColumn, endColumn);\r\n    let newMatrix = new Matrix(\r\n      endRow - startRow + 1,\r\n      endColumn - startColumn + 1,\r\n    );\r\n    for (let i = startRow; i <= endRow; i++) {\r\n      for (let j = startColumn; j <= endColumn; j++) {\r\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\r\n      }\r\n    }\r\n    return newMatrix;\r\n  }\r\n\r\n  subMatrixRow(indices, startColumn, endColumn) {\r\n    if (startColumn === undefined) startColumn = 0;\r\n    if (endColumn === undefined) endColumn = this.columns - 1;\r\n    if (\r\n      startColumn > endColumn ||\r\n      startColumn < 0 ||\r\n      startColumn >= this.columns ||\r\n      endColumn < 0 ||\r\n      endColumn >= this.columns\r\n    ) {\r\n      throw new RangeError('Argument out of range');\r\n    }\r\n\r\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\r\n    for (let i = 0; i < indices.length; i++) {\r\n      for (let j = startColumn; j <= endColumn; j++) {\r\n        if (indices[i] < 0 || indices[i] >= this.rows) {\r\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\r\n        }\r\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\r\n      }\r\n    }\r\n    return newMatrix;\r\n  }\r\n\r\n  subMatrixColumn(indices, startRow, endRow) {\r\n    if (startRow === undefined) startRow = 0;\r\n    if (endRow === undefined) endRow = this.rows - 1;\r\n    if (\r\n      startRow > endRow ||\r\n      startRow < 0 ||\r\n      startRow >= this.rows ||\r\n      endRow < 0 ||\r\n      endRow >= this.rows\r\n    ) {\r\n      throw new RangeError('Argument out of range');\r\n    }\r\n\r\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\r\n    for (let i = 0; i < indices.length; i++) {\r\n      for (let j = startRow; j <= endRow; j++) {\r\n        if (indices[i] < 0 || indices[i] >= this.columns) {\r\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\r\n        }\r\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\r\n      }\r\n    }\r\n    return newMatrix;\r\n  }\r\n\r\n  setSubMatrix(matrix, startRow, startColumn) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (matrix.isEmpty()) {\r\n      return this;\r\n    }\r\n    let endRow = startRow + matrix.rows - 1;\r\n    let endColumn = startColumn + matrix.columns - 1;\r\n    checkRange(this, startRow, endRow, startColumn, endColumn);\r\n    for (let i = 0; i < matrix.rows; i++) {\r\n      for (let j = 0; j < matrix.columns; j++) {\r\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  selection(rowIndices, columnIndices) {\r\n    checkRowIndices(this, rowIndices);\r\n    checkColumnIndices(this, columnIndices);\r\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\r\n    for (let i = 0; i < rowIndices.length; i++) {\r\n      let rowIndex = rowIndices[i];\r\n      for (let j = 0; j < columnIndices.length; j++) {\r\n        let columnIndex = columnIndices[j];\r\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\r\n      }\r\n    }\r\n    return newMatrix;\r\n  }\r\n\r\n  trace() {\r\n    let min = Math.min(this.rows, this.columns);\r\n    let trace = 0;\r\n    for (let i = 0; i < min; i++) {\r\n      trace += this.get(i, i);\r\n    }\r\n    return trace;\r\n  }\r\n\r\n  clone() {\r\n    return this.constructor.copy(this, new Matrix(this.rows, this.columns));\r\n  }\r\n\r\n  /**\r\n   * @template {AbstractMatrix} M\r\n   * @param {AbstractMatrix} from\r\n   * @param {M} to\r\n   * @return {M}\r\n   */\r\n  static copy(from, to) {\r\n    for (const [row, column, value] of from.entries()) {\r\n      to.set(row, column, value);\r\n    }\r\n\r\n    return to;\r\n  }\r\n\r\n  sum(by) {\r\n    switch (by) {\r\n      case 'row':\r\n        return sumByRow(this);\r\n      case 'column':\r\n        return sumByColumn(this);\r\n      case undefined:\r\n        return sumAll(this);\r\n      default:\r\n        throw new Error(`invalid option: ${by}`);\r\n    }\r\n  }\r\n\r\n  product(by) {\r\n    switch (by) {\r\n      case 'row':\r\n        return productByRow(this);\r\n      case 'column':\r\n        return productByColumn(this);\r\n      case undefined:\r\n        return productAll(this);\r\n      default:\r\n        throw new Error(`invalid option: ${by}`);\r\n    }\r\n  }\r\n\r\n  mean(by) {\r\n    const sum = this.sum(by);\r\n    switch (by) {\r\n      case 'row': {\r\n        for (let i = 0; i < this.rows; i++) {\r\n          sum[i] /= this.columns;\r\n        }\r\n        return sum;\r\n      }\r\n      case 'column': {\r\n        for (let i = 0; i < this.columns; i++) {\r\n          sum[i] /= this.rows;\r\n        }\r\n        return sum;\r\n      }\r\n      case undefined:\r\n        return sum / this.size;\r\n      default:\r\n        throw new Error(`invalid option: ${by}`);\r\n    }\r\n  }\r\n\r\n  variance(by, options = {}) {\r\n    if (typeof by === 'object') {\r\n      options = by;\r\n      by = undefined;\r\n    }\r\n    if (typeof options !== 'object') {\r\n      throw new TypeError('options must be an object');\r\n    }\r\n    const { unbiased = true, mean = this.mean(by) } = options;\r\n    if (typeof unbiased !== 'boolean') {\r\n      throw new TypeError('unbiased must be a boolean');\r\n    }\r\n    switch (by) {\r\n      case 'row': {\r\n        if (!isAnyArray.isAnyArray(mean)) {\r\n          throw new TypeError('mean must be an array');\r\n        }\r\n        return varianceByRow(this, unbiased, mean);\r\n      }\r\n      case 'column': {\r\n        if (!isAnyArray.isAnyArray(mean)) {\r\n          throw new TypeError('mean must be an array');\r\n        }\r\n        return varianceByColumn(this, unbiased, mean);\r\n      }\r\n      case undefined: {\r\n        if (typeof mean !== 'number') {\r\n          throw new TypeError('mean must be a number');\r\n        }\r\n        return varianceAll(this, unbiased, mean);\r\n      }\r\n      default:\r\n        throw new Error(`invalid option: ${by}`);\r\n    }\r\n  }\r\n\r\n  standardDeviation(by, options) {\r\n    if (typeof by === 'object') {\r\n      options = by;\r\n      by = undefined;\r\n    }\r\n    const variance = this.variance(by, options);\r\n    if (by === undefined) {\r\n      return Math.sqrt(variance);\r\n    } else {\r\n      for (let i = 0; i < variance.length; i++) {\r\n        variance[i] = Math.sqrt(variance[i]);\r\n      }\r\n      return variance;\r\n    }\r\n  }\r\n\r\n  center(by, options = {}) {\r\n    if (typeof by === 'object') {\r\n      options = by;\r\n      by = undefined;\r\n    }\r\n    if (typeof options !== 'object') {\r\n      throw new TypeError('options must be an object');\r\n    }\r\n    const { center = this.mean(by) } = options;\r\n    switch (by) {\r\n      case 'row': {\r\n        if (!isAnyArray.isAnyArray(center)) {\r\n          throw new TypeError('center must be an array');\r\n        }\r\n        centerByRow(this, center);\r\n        return this;\r\n      }\r\n      case 'column': {\r\n        if (!isAnyArray.isAnyArray(center)) {\r\n          throw new TypeError('center must be an array');\r\n        }\r\n        centerByColumn(this, center);\r\n        return this;\r\n      }\r\n      case undefined: {\r\n        if (typeof center !== 'number') {\r\n          throw new TypeError('center must be a number');\r\n        }\r\n        centerAll(this, center);\r\n        return this;\r\n      }\r\n      default:\r\n        throw new Error(`invalid option: ${by}`);\r\n    }\r\n  }\r\n\r\n  scale(by, options = {}) {\r\n    if (typeof by === 'object') {\r\n      options = by;\r\n      by = undefined;\r\n    }\r\n    if (typeof options !== 'object') {\r\n      throw new TypeError('options must be an object');\r\n    }\r\n    let scale = options.scale;\r\n    switch (by) {\r\n      case 'row': {\r\n        if (scale === undefined) {\r\n          scale = getScaleByRow(this);\r\n        } else if (!isAnyArray.isAnyArray(scale)) {\r\n          throw new TypeError('scale must be an array');\r\n        }\r\n        scaleByRow(this, scale);\r\n        return this;\r\n      }\r\n      case 'column': {\r\n        if (scale === undefined) {\r\n          scale = getScaleByColumn(this);\r\n        } else if (!isAnyArray.isAnyArray(scale)) {\r\n          throw new TypeError('scale must be an array');\r\n        }\r\n        scaleByColumn(this, scale);\r\n        return this;\r\n      }\r\n      case undefined: {\r\n        if (scale === undefined) {\r\n          scale = getScaleAll(this);\r\n        } else if (typeof scale !== 'number') {\r\n          throw new TypeError('scale must be a number');\r\n        }\r\n        scaleAll(this, scale);\r\n        return this;\r\n      }\r\n      default:\r\n        throw new Error(`invalid option: ${by}`);\r\n    }\r\n  }\r\n\r\n  toString(options) {\r\n    return inspectMatrixWithOptions(this, options);\r\n  }\r\n\r\n  [Symbol.iterator]() {\r\n    return this.entries();\r\n  }\r\n\r\n  /**\r\n   * iterator from left to right, from top to bottom\r\n   * yield [row, column, value]\r\n   * @returns {Generator<[number, number, number], void, void>}\r\n   */\r\n  *entries() {\r\n    for (let row = 0; row < this.rows; row++) {\r\n      for (let col = 0; col < this.columns; col++) {\r\n        yield [row, col, this.get(row, col)];\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * iterator from left to right, from top to bottom\r\n   * yield value\r\n   * @returns {Generator<number, void, void>}\r\n   */\r\n  *values() {\r\n    for (let row = 0; row < this.rows; row++) {\r\n      for (let col = 0; col < this.columns; col++) {\r\n        yield this.get(row, col);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nAbstractMatrix.prototype.klass = 'Matrix';\r\nif (typeof Symbol !== 'undefined') {\r\n  AbstractMatrix.prototype[Symbol.for('nodejs.util.inspect.custom')] =\r\n    inspectMatrix;\r\n}\r\n\r\nfunction compareNumbers(a, b) {\r\n  return a - b;\r\n}\r\n\r\nfunction isArrayOfNumbers(array) {\r\n  return array.every((element) => {\r\n    return typeof element === 'number';\r\n  });\r\n}\r\n\r\n// Synonyms\r\nAbstractMatrix.random = AbstractMatrix.rand;\r\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\r\nAbstractMatrix.diagonal = AbstractMatrix.diag;\r\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\r\nAbstractMatrix.identity = AbstractMatrix.eye;\r\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\r\nAbstractMatrix.prototype.tensorProduct =\r\n  AbstractMatrix.prototype.kroneckerProduct;\r\n\r\nclass Matrix extends AbstractMatrix {\r\n  /**\r\n   * @type {Float64Array[]}\r\n   */\r\n  data;\r\n\r\n  /**\r\n   * Init an empty matrix\r\n   * @param {number} nRows\r\n   * @param {number} nColumns\r\n   */\r\n  #initData(nRows, nColumns) {\r\n    this.data = [];\r\n\r\n    if (Number.isInteger(nColumns) && nColumns >= 0) {\r\n      for (let i = 0; i < nRows; i++) {\r\n        this.data.push(new Float64Array(nColumns));\r\n      }\r\n    } else {\r\n      throw new TypeError('nColumns must be a positive integer');\r\n    }\r\n\r\n    this.rows = nRows;\r\n    this.columns = nColumns;\r\n  }\r\n\r\n  constructor(nRows, nColumns) {\r\n    super();\r\n    if (Matrix.isMatrix(nRows)) {\r\n      this.#initData(nRows.rows, nRows.columns);\r\n      Matrix.copy(nRows, this);\r\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\r\n      this.#initData(nRows, nColumns);\r\n    } else if (isAnyArray.isAnyArray(nRows)) {\r\n      // Copy the values from the 2D array\r\n      const arrayData = nRows;\r\n      nRows = arrayData.length;\r\n      nColumns = nRows ? arrayData[0].length : 0;\r\n      if (typeof nColumns !== 'number') {\r\n        throw new TypeError(\r\n          'Data must be a 2D array with at least one element',\r\n        );\r\n      }\r\n      this.data = [];\r\n\r\n      for (let i = 0; i < nRows; i++) {\r\n        if (arrayData[i].length !== nColumns) {\r\n          throw new RangeError('Inconsistent array dimensions');\r\n        }\r\n        if (!isArrayOfNumbers(arrayData[i])) {\r\n          throw new TypeError('Input data contains non-numeric values');\r\n        }\r\n        this.data.push(Float64Array.from(arrayData[i]));\r\n      }\r\n\r\n      this.rows = nRows;\r\n      this.columns = nColumns;\r\n    } else {\r\n      throw new TypeError(\r\n        'First argument must be a positive number or an array',\r\n      );\r\n    }\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    this.data[rowIndex][columnIndex] = value;\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    return this.data[rowIndex][columnIndex];\r\n  }\r\n\r\n  removeRow(index) {\r\n    checkRowIndex(this, index);\r\n    this.data.splice(index, 1);\r\n    this.rows -= 1;\r\n    return this;\r\n  }\r\n\r\n  addRow(index, array) {\r\n    if (array === undefined) {\r\n      array = index;\r\n      index = this.rows;\r\n    }\r\n    checkRowIndex(this, index, true);\r\n    array = Float64Array.from(checkRowVector(this, array));\r\n    this.data.splice(index, 0, array);\r\n    this.rows += 1;\r\n    return this;\r\n  }\r\n\r\n  removeColumn(index) {\r\n    checkColumnIndex(this, index);\r\n    for (let i = 0; i < this.rows; i++) {\r\n      const newRow = new Float64Array(this.columns - 1);\r\n      for (let j = 0; j < index; j++) {\r\n        newRow[j] = this.data[i][j];\r\n      }\r\n      for (let j = index + 1; j < this.columns; j++) {\r\n        newRow[j - 1] = this.data[i][j];\r\n      }\r\n      this.data[i] = newRow;\r\n    }\r\n    this.columns -= 1;\r\n    return this;\r\n  }\r\n\r\n  addColumn(index, array) {\r\n    if (typeof array === 'undefined') {\r\n      array = index;\r\n      index = this.columns;\r\n    }\r\n    checkColumnIndex(this, index, true);\r\n    array = checkColumnVector(this, array);\r\n    for (let i = 0; i < this.rows; i++) {\r\n      const newRow = new Float64Array(this.columns + 1);\r\n      let j = 0;\r\n      for (; j < index; j++) {\r\n        newRow[j] = this.data[i][j];\r\n      }\r\n      newRow[j++] = array[i];\r\n      for (; j < this.columns + 1; j++) {\r\n        newRow[j] = this.data[i][j - 1];\r\n      }\r\n      this.data[i] = newRow;\r\n    }\r\n    this.columns += 1;\r\n    return this;\r\n  }\r\n}\r\n\r\ninstallMathOperations(AbstractMatrix, Matrix);\r\n\r\n/**\r\n * @typedef {0 | 1 | number | boolean} Mask\r\n */\r\n\r\nclass SymmetricMatrix extends AbstractMatrix {\r\n  /** @type {Matrix} */\r\n  #matrix;\r\n\r\n  get size() {\r\n    return this.#matrix.size;\r\n  }\r\n\r\n  get rows() {\r\n    return this.#matrix.rows;\r\n  }\r\n\r\n  get columns() {\r\n    return this.#matrix.columns;\r\n  }\r\n\r\n  get diagonalSize() {\r\n    return this.rows;\r\n  }\r\n\r\n  /**\r\n   * not the same as matrix.isSymmetric()\r\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\r\n   *\r\n   * @param value\r\n   * @returns {boolean}\r\n   */\r\n  static isSymmetricMatrix(value) {\r\n    return Matrix.isMatrix(value) && value.klassType === 'SymmetricMatrix';\r\n  }\r\n\r\n  /**\r\n   * @param diagonalSize\r\n   * @return {SymmetricMatrix}\r\n   */\r\n  static zeros(diagonalSize) {\r\n    return new this(diagonalSize);\r\n  }\r\n\r\n  /**\r\n   * @param diagonalSize\r\n   * @return {SymmetricMatrix}\r\n   */\r\n  static ones(diagonalSize) {\r\n    return new this(diagonalSize).fill(1);\r\n  }\r\n\r\n  /**\r\n   * @param {number | AbstractMatrix | ArrayLike<ArrayLike<number>>} diagonalSize\r\n   * @return {this}\r\n   */\r\n  constructor(diagonalSize) {\r\n    super();\r\n\r\n    if (Matrix.isMatrix(diagonalSize)) {\r\n      if (!diagonalSize.isSymmetric()) {\r\n        throw new TypeError('not symmetric data');\r\n      }\r\n\r\n      this.#matrix = Matrix.copy(\r\n        diagonalSize,\r\n        new Matrix(diagonalSize.rows, diagonalSize.rows),\r\n      );\r\n    } else if (Number.isInteger(diagonalSize) && diagonalSize >= 0) {\r\n      this.#matrix = new Matrix(diagonalSize, diagonalSize);\r\n    } else {\r\n      this.#matrix = new Matrix(diagonalSize);\r\n\r\n      if (!this.isSymmetric()) {\r\n        throw new TypeError('not symmetric data');\r\n      }\r\n    }\r\n  }\r\n\r\n  clone() {\r\n    const matrix = new SymmetricMatrix(this.diagonalSize);\r\n\r\n    for (const [row, col, value] of this.upperRightEntries()) {\r\n      matrix.set(row, col, value);\r\n    }\r\n\r\n    return matrix;\r\n  }\r\n\r\n  toMatrix() {\r\n    return new Matrix(this);\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    return this.#matrix.get(rowIndex, columnIndex);\r\n  }\r\n  set(rowIndex, columnIndex, value) {\r\n    // symmetric set\r\n    this.#matrix.set(rowIndex, columnIndex, value);\r\n    this.#matrix.set(columnIndex, rowIndex, value);\r\n\r\n    return this;\r\n  }\r\n\r\n  removeCross(index) {\r\n    // symmetric remove side\r\n    this.#matrix.removeRow(index);\r\n    this.#matrix.removeColumn(index);\r\n\r\n    return this;\r\n  }\r\n\r\n  addCross(index, array) {\r\n    if (array === undefined) {\r\n      array = index;\r\n      index = this.diagonalSize;\r\n    }\r\n\r\n    const row = array.slice();\r\n    row.splice(index, 1);\r\n\r\n    this.#matrix.addRow(index, row);\r\n    this.#matrix.addColumn(index, array);\r\n\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * @param {Mask[]} mask\r\n   */\r\n  applyMask(mask) {\r\n    if (mask.length !== this.diagonalSize) {\r\n      throw new RangeError('Mask size do not match with matrix size');\r\n    }\r\n\r\n    // prepare sides to remove from matrix from mask\r\n    /** @type {number[]} */\r\n    const sidesToRemove = [];\r\n    for (const [index, passthroughs] of mask.entries()) {\r\n      if (passthroughs) continue;\r\n      sidesToRemove.push(index);\r\n    }\r\n    // to remove from highest to lowest for no mutation shifting\r\n    sidesToRemove.reverse();\r\n\r\n    // remove sides\r\n    for (const sideIndex of sidesToRemove) {\r\n      this.removeCross(sideIndex);\r\n    }\r\n\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Compact format upper-right corner of matrix\r\n   * iterate from left to right, from top to bottom.\r\n   *\r\n   * ```\r\n   *   A B C D\r\n   * A 1 2 3 4\r\n   * B 2 5 6 7\r\n   * C 3 6 8 9\r\n   * D 4 7 9 10\r\n   * ```\r\n   *\r\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`\r\n   *\r\n   * length is S(i=0, n=sideSize) => 10 for a 4 sideSized matrix\r\n   *\r\n   * @returns {number[]}\r\n   */\r\n  toCompact() {\r\n    const { diagonalSize } = this;\r\n\r\n    /** @type {number[]} */\r\n    const compact = new Array((diagonalSize * (diagonalSize + 1)) / 2);\r\n    for (let col = 0, row = 0, index = 0; index < compact.length; index++) {\r\n      compact[index] = this.get(row, col);\r\n\r\n      if (++col >= diagonalSize) col = ++row;\r\n    }\r\n\r\n    return compact;\r\n  }\r\n\r\n  /**\r\n   * @param {number[]} compact\r\n   * @return {SymmetricMatrix}\r\n   */\r\n  static fromCompact(compact) {\r\n    const compactSize = compact.length;\r\n    // compactSize = (sideSize * (sideSize + 1)) / 2\r\n    // https://mathsolver.microsoft.com/fr/solve-problem/y%20%3D%20%20x%20%60cdot%20%20%20%60frac%7B%20%20%60left(%20x%2B1%20%20%60right)%20%20%20%20%7D%7B%202%20%20%7D\r\n    // sideSize = (Sqrt(8 × compactSize + 1) - 1) / 2\r\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) - 1) / 2;\r\n\r\n    if (!Number.isInteger(diagonalSize)) {\r\n      throw new TypeError(\r\n        `This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(\r\n          compact,\r\n        )}`,\r\n      );\r\n    }\r\n\r\n    const matrix = new SymmetricMatrix(diagonalSize);\r\n    for (let col = 0, row = 0, index = 0; index < compactSize; index++) {\r\n      matrix.set(col, row, compact[index]);\r\n      if (++col >= diagonalSize) col = ++row;\r\n    }\r\n\r\n    return matrix;\r\n  }\r\n\r\n  /**\r\n   * half iterator upper-right-corner from left to right, from top to bottom\r\n   * yield [row, column, value]\r\n   *\r\n   * @returns {Generator<[number, number, number], void, void>}\r\n   */\r\n  *upperRightEntries() {\r\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\r\n      const value = this.get(row, col);\r\n\r\n      yield [row, col, value];\r\n\r\n      // at the end of row, move cursor to next row at diagonal position\r\n      if (++col >= this.diagonalSize) col = ++row;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * half iterator upper-right-corner from left to right, from top to bottom\r\n   * yield value\r\n   *\r\n   * @returns {Generator<[number, number, number], void, void>}\r\n   */\r\n  *upperRightValues() {\r\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\r\n      const value = this.get(row, col);\r\n\r\n      yield value;\r\n\r\n      // at the end of row, move cursor to next row at diagonal position\r\n      if (++col >= this.diagonalSize) col = ++row;\r\n    }\r\n  }\r\n}\r\nSymmetricMatrix.prototype.klassType = 'SymmetricMatrix';\r\n\r\nclass DistanceMatrix extends SymmetricMatrix {\r\n  /**\r\n   * not the same as matrix.isSymmetric()\r\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\r\n   *\r\n   * @param value\r\n   * @returns {boolean}\r\n   */\r\n  static isDistanceMatrix(value) {\r\n    return (\r\n      SymmetricMatrix.isSymmetricMatrix(value) &&\r\n      value.klassSubType === 'DistanceMatrix'\r\n    );\r\n  }\r\n\r\n  constructor(sideSize) {\r\n    super(sideSize);\r\n\r\n    if (!this.isDistance()) {\r\n      throw new TypeError('Provided arguments do no produce a distance matrix');\r\n    }\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    // distance matrix diagonal is 0\r\n    if (rowIndex === columnIndex) value = 0;\r\n\r\n    return super.set(rowIndex, columnIndex, value);\r\n  }\r\n\r\n  addCross(index, array) {\r\n    if (array === undefined) {\r\n      array = index;\r\n      index = this.diagonalSize;\r\n    }\r\n\r\n    // ensure distance\r\n    array = array.slice();\r\n    array[index] = 0;\r\n\r\n    return super.addCross(index, array);\r\n  }\r\n\r\n  toSymmetricMatrix() {\r\n    return new SymmetricMatrix(this);\r\n  }\r\n\r\n  clone() {\r\n    const matrix = new DistanceMatrix(this.diagonalSize);\r\n\r\n    for (const [row, col, value] of this.upperRightEntries()) {\r\n      if (row === col) continue;\r\n      matrix.set(row, col, value);\r\n    }\r\n\r\n    return matrix;\r\n  }\r\n\r\n  /**\r\n   * Compact format upper-right corner of matrix\r\n   * no diagonal (only zeros)\r\n   * iterable from left to right, from top to bottom.\r\n   *\r\n   * ```\r\n   *   A B C D\r\n   * A 0 1 2 3\r\n   * B 1 0 4 5\r\n   * C 2 4 0 6\r\n   * D 3 5 6 0\r\n   * ```\r\n   *\r\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6]`\r\n   *\r\n   * length is S(i=0, n=sideSize-1) => 6 for a 4 side sized matrix\r\n   *\r\n   * @returns {number[]}\r\n   */\r\n  toCompact() {\r\n    const { diagonalSize } = this;\r\n    const compactLength = ((diagonalSize - 1) * diagonalSize) / 2;\r\n\r\n    /** @type {number[]} */\r\n    const compact = new Array(compactLength);\r\n    for (let col = 1, row = 0, index = 0; index < compact.length; index++) {\r\n      compact[index] = this.get(row, col);\r\n\r\n      if (++col >= diagonalSize) col = ++row + 1;\r\n    }\r\n\r\n    return compact;\r\n  }\r\n\r\n  /**\r\n   * @param {number[]} compact\r\n   */\r\n  static fromCompact(compact) {\r\n    const compactSize = compact.length;\r\n\r\n    if (compactSize === 0) {\r\n      return new this(0);\r\n    }\r\n\r\n    // compactSize in Natural integer range ]0;∞]\r\n    // compactSize = (sideSize * (sideSize - 1)) / 2\r\n    // sideSize = (Sqrt(8 × compactSize + 1) + 1) / 2\r\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) + 1) / 2;\r\n\r\n    if (!Number.isInteger(diagonalSize)) {\r\n      throw new TypeError(\r\n        `This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(\r\n          compact,\r\n        )}`,\r\n      );\r\n    }\r\n\r\n    const matrix = new this(diagonalSize);\r\n    for (let col = 1, row = 0, index = 0; index < compactSize; index++) {\r\n      matrix.set(col, row, compact[index]);\r\n      if (++col >= diagonalSize) col = ++row + 1;\r\n    }\r\n\r\n    return matrix;\r\n  }\r\n}\r\nDistanceMatrix.prototype.klassSubType = 'DistanceMatrix';\r\n\r\nclass BaseView extends AbstractMatrix {\r\n  constructor(matrix, rows, columns) {\r\n    super();\r\n    this.matrix = matrix;\r\n    this.rows = rows;\r\n    this.columns = columns;\r\n  }\r\n}\r\n\r\nclass MatrixColumnView extends BaseView {\r\n  constructor(matrix, column) {\r\n    checkColumnIndex(matrix, column);\r\n    super(matrix, matrix.rows, 1);\r\n    this.column = column;\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    this.matrix.set(rowIndex, this.column, value);\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex) {\r\n    return this.matrix.get(rowIndex, this.column);\r\n  }\r\n}\r\n\r\nclass MatrixColumnSelectionView extends BaseView {\r\n  constructor(matrix, columnIndices) {\r\n    checkColumnIndices(matrix, columnIndices);\r\n    super(matrix, matrix.rows, columnIndices.length);\r\n    this.columnIndices = columnIndices;\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\r\n  }\r\n}\r\n\r\nclass MatrixFlipColumnView extends BaseView {\r\n  constructor(matrix) {\r\n    super(matrix, matrix.rows, matrix.columns);\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\r\n  }\r\n}\r\n\r\nclass MatrixFlipRowView extends BaseView {\r\n  constructor(matrix) {\r\n    super(matrix, matrix.rows, matrix.columns);\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\r\n  }\r\n}\r\n\r\nclass MatrixRowView extends BaseView {\r\n  constructor(matrix, row) {\r\n    checkRowIndex(matrix, row);\r\n    super(matrix, 1, matrix.columns);\r\n    this.row = row;\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    this.matrix.set(this.row, columnIndex, value);\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    return this.matrix.get(this.row, columnIndex);\r\n  }\r\n}\r\n\r\nclass MatrixRowSelectionView extends BaseView {\r\n  constructor(matrix, rowIndices) {\r\n    checkRowIndices(matrix, rowIndices);\r\n    super(matrix, rowIndices.length, matrix.columns);\r\n    this.rowIndices = rowIndices;\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\r\n  }\r\n}\r\n\r\nclass MatrixSelectionView extends BaseView {\r\n  constructor(matrix, rowIndices, columnIndices) {\r\n    checkRowIndices(matrix, rowIndices);\r\n    checkColumnIndices(matrix, columnIndices);\r\n    super(matrix, rowIndices.length, columnIndices.length);\r\n    this.rowIndices = rowIndices;\r\n    this.columnIndices = columnIndices;\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    this.matrix.set(\r\n      this.rowIndices[rowIndex],\r\n      this.columnIndices[columnIndex],\r\n      value,\r\n    );\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    return this.matrix.get(\r\n      this.rowIndices[rowIndex],\r\n      this.columnIndices[columnIndex],\r\n    );\r\n  }\r\n}\r\n\r\nclass MatrixSubView extends BaseView {\r\n  constructor(matrix, startRow, endRow, startColumn, endColumn) {\r\n    checkRange(matrix, startRow, endRow, startColumn, endColumn);\r\n    super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\r\n    this.startRow = startRow;\r\n    this.startColumn = startColumn;\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    this.matrix.set(\r\n      this.startRow + rowIndex,\r\n      this.startColumn + columnIndex,\r\n      value,\r\n    );\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    return this.matrix.get(\r\n      this.startRow + rowIndex,\r\n      this.startColumn + columnIndex,\r\n    );\r\n  }\r\n}\r\n\r\nclass MatrixTransposeView extends BaseView {\r\n  constructor(matrix) {\r\n    super(matrix, matrix.columns, matrix.rows);\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    this.matrix.set(columnIndex, rowIndex, value);\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    return this.matrix.get(columnIndex, rowIndex);\r\n  }\r\n}\r\n\r\nclass WrapperMatrix1D extends AbstractMatrix {\r\n  constructor(data, options = {}) {\r\n    const { rows = 1 } = options;\r\n\r\n    if (data.length % rows !== 0) {\r\n      throw new Error('the data length is not divisible by the number of rows');\r\n    }\r\n    super();\r\n    this.rows = rows;\r\n    this.columns = data.length / rows;\r\n    this.data = data;\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    let index = this._calculateIndex(rowIndex, columnIndex);\r\n    this.data[index] = value;\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    let index = this._calculateIndex(rowIndex, columnIndex);\r\n    return this.data[index];\r\n  }\r\n\r\n  _calculateIndex(row, column) {\r\n    return row * this.columns + column;\r\n  }\r\n}\r\n\r\nclass WrapperMatrix2D extends AbstractMatrix {\r\n  constructor(data) {\r\n    super();\r\n    this.data = data;\r\n    this.rows = data.length;\r\n    this.columns = data[0].length;\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    this.data[rowIndex][columnIndex] = value;\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    return this.data[rowIndex][columnIndex];\r\n  }\r\n}\r\n\r\nfunction wrap(array, options) {\r\n  if (isAnyArray.isAnyArray(array)) {\r\n    if (array[0] && isAnyArray.isAnyArray(array[0])) {\r\n      return new WrapperMatrix2D(array);\r\n    } else {\r\n      return new WrapperMatrix1D(array, options);\r\n    }\r\n  } else {\r\n    throw new Error('the argument is not an array');\r\n  }\r\n}\r\n\r\nclass LuDecomposition {\r\n  constructor(matrix) {\r\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\r\n\r\n    let lu = matrix.clone();\r\n    let rows = lu.rows;\r\n    let columns = lu.columns;\r\n    let pivotVector = new Float64Array(rows);\r\n    let pivotSign = 1;\r\n    let i, j, k, p, s, t, v;\r\n    let LUcolj, kmax;\r\n\r\n    for (i = 0; i < rows; i++) {\r\n      pivotVector[i] = i;\r\n    }\r\n\r\n    LUcolj = new Float64Array(rows);\r\n\r\n    for (j = 0; j < columns; j++) {\r\n      for (i = 0; i < rows; i++) {\r\n        LUcolj[i] = lu.get(i, j);\r\n      }\r\n\r\n      for (i = 0; i < rows; i++) {\r\n        kmax = Math.min(i, j);\r\n        s = 0;\r\n        for (k = 0; k < kmax; k++) {\r\n          s += lu.get(i, k) * LUcolj[k];\r\n        }\r\n        LUcolj[i] -= s;\r\n        lu.set(i, j, LUcolj[i]);\r\n      }\r\n\r\n      p = j;\r\n      for (i = j + 1; i < rows; i++) {\r\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\r\n          p = i;\r\n        }\r\n      }\r\n\r\n      if (p !== j) {\r\n        for (k = 0; k < columns; k++) {\r\n          t = lu.get(p, k);\r\n          lu.set(p, k, lu.get(j, k));\r\n          lu.set(j, k, t);\r\n        }\r\n\r\n        v = pivotVector[p];\r\n        pivotVector[p] = pivotVector[j];\r\n        pivotVector[j] = v;\r\n\r\n        pivotSign = -pivotSign;\r\n      }\r\n\r\n      if (j < rows && lu.get(j, j) !== 0) {\r\n        for (i = j + 1; i < rows; i++) {\r\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\r\n        }\r\n      }\r\n    }\r\n\r\n    this.LU = lu;\r\n    this.pivotVector = pivotVector;\r\n    this.pivotSign = pivotSign;\r\n  }\r\n\r\n  isSingular() {\r\n    let data = this.LU;\r\n    let col = data.columns;\r\n    for (let j = 0; j < col; j++) {\r\n      if (data.get(j, j) === 0) {\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  solve(value) {\r\n    value = Matrix.checkMatrix(value);\r\n\r\n    let lu = this.LU;\r\n    let rows = lu.rows;\r\n\r\n    if (rows !== value.rows) {\r\n      throw new Error('Invalid matrix dimensions');\r\n    }\r\n    if (this.isSingular()) {\r\n      throw new Error('LU matrix is singular');\r\n    }\r\n\r\n    let count = value.columns;\r\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\r\n    let columns = lu.columns;\r\n    let i, j, k;\r\n\r\n    for (k = 0; k < columns; k++) {\r\n      for (i = k + 1; i < columns; i++) {\r\n        for (j = 0; j < count; j++) {\r\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\r\n        }\r\n      }\r\n    }\r\n    for (k = columns - 1; k >= 0; k--) {\r\n      for (j = 0; j < count; j++) {\r\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\r\n      }\r\n      for (i = 0; i < k; i++) {\r\n        for (j = 0; j < count; j++) {\r\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\r\n        }\r\n      }\r\n    }\r\n    return X;\r\n  }\r\n\r\n  get determinant() {\r\n    let data = this.LU;\r\n    if (!data.isSquare()) {\r\n      throw new Error('Matrix must be square');\r\n    }\r\n    let determinant = this.pivotSign;\r\n    let col = data.columns;\r\n    for (let j = 0; j < col; j++) {\r\n      determinant *= data.get(j, j);\r\n    }\r\n    return determinant;\r\n  }\r\n\r\n  get lowerTriangularMatrix() {\r\n    let data = this.LU;\r\n    let rows = data.rows;\r\n    let columns = data.columns;\r\n    let X = new Matrix(rows, columns);\r\n    for (let i = 0; i < rows; i++) {\r\n      for (let j = 0; j < columns; j++) {\r\n        if (i > j) {\r\n          X.set(i, j, data.get(i, j));\r\n        } else if (i === j) {\r\n          X.set(i, j, 1);\r\n        } else {\r\n          X.set(i, j, 0);\r\n        }\r\n      }\r\n    }\r\n    return X;\r\n  }\r\n\r\n  get upperTriangularMatrix() {\r\n    let data = this.LU;\r\n    let rows = data.rows;\r\n    let columns = data.columns;\r\n    let X = new Matrix(rows, columns);\r\n    for (let i = 0; i < rows; i++) {\r\n      for (let j = 0; j < columns; j++) {\r\n        if (i <= j) {\r\n          X.set(i, j, data.get(i, j));\r\n        } else {\r\n          X.set(i, j, 0);\r\n        }\r\n      }\r\n    }\r\n    return X;\r\n  }\r\n\r\n  get pivotPermutationVector() {\r\n    return Array.from(this.pivotVector);\r\n  }\r\n}\r\n\r\nfunction hypotenuse(a, b) {\r\n  let r = 0;\r\n  if (Math.abs(a) > Math.abs(b)) {\r\n    r = b / a;\r\n    return Math.abs(a) * Math.sqrt(1 + r * r);\r\n  }\r\n  if (b !== 0) {\r\n    r = a / b;\r\n    return Math.abs(b) * Math.sqrt(1 + r * r);\r\n  }\r\n  return 0;\r\n}\r\n\r\nclass QrDecomposition {\r\n  constructor(value) {\r\n    value = WrapperMatrix2D.checkMatrix(value);\r\n\r\n    let qr = value.clone();\r\n    let m = value.rows;\r\n    let n = value.columns;\r\n    let rdiag = new Float64Array(n);\r\n    let i, j, k, s;\r\n\r\n    for (k = 0; k < n; k++) {\r\n      let nrm = 0;\r\n      for (i = k; i < m; i++) {\r\n        nrm = hypotenuse(nrm, qr.get(i, k));\r\n      }\r\n      if (nrm !== 0) {\r\n        if (qr.get(k, k) < 0) {\r\n          nrm = -nrm;\r\n        }\r\n        for (i = k; i < m; i++) {\r\n          qr.set(i, k, qr.get(i, k) / nrm);\r\n        }\r\n        qr.set(k, k, qr.get(k, k) + 1);\r\n        for (j = k + 1; j < n; j++) {\r\n          s = 0;\r\n          for (i = k; i < m; i++) {\r\n            s += qr.get(i, k) * qr.get(i, j);\r\n          }\r\n          s = -s / qr.get(k, k);\r\n          for (i = k; i < m; i++) {\r\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\r\n          }\r\n        }\r\n      }\r\n      rdiag[k] = -nrm;\r\n    }\r\n\r\n    this.QR = qr;\r\n    this.Rdiag = rdiag;\r\n  }\r\n\r\n  solve(value) {\r\n    value = Matrix.checkMatrix(value);\r\n\r\n    let qr = this.QR;\r\n    let m = qr.rows;\r\n\r\n    if (value.rows !== m) {\r\n      throw new Error('Matrix row dimensions must agree');\r\n    }\r\n    if (!this.isFullRank()) {\r\n      throw new Error('Matrix is rank deficient');\r\n    }\r\n\r\n    let count = value.columns;\r\n    let X = value.clone();\r\n    let n = qr.columns;\r\n    let i, j, k, s;\r\n\r\n    for (k = 0; k < n; k++) {\r\n      for (j = 0; j < count; j++) {\r\n        s = 0;\r\n        for (i = k; i < m; i++) {\r\n          s += qr.get(i, k) * X.get(i, j);\r\n        }\r\n        s = -s / qr.get(k, k);\r\n        for (i = k; i < m; i++) {\r\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\r\n        }\r\n      }\r\n    }\r\n    for (k = n - 1; k >= 0; k--) {\r\n      for (j = 0; j < count; j++) {\r\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\r\n      }\r\n      for (i = 0; i < k; i++) {\r\n        for (j = 0; j < count; j++) {\r\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\r\n        }\r\n      }\r\n    }\r\n\r\n    return X.subMatrix(0, n - 1, 0, count - 1);\r\n  }\r\n\r\n  isFullRank() {\r\n    let columns = this.QR.columns;\r\n    for (let i = 0; i < columns; i++) {\r\n      if (this.Rdiag[i] === 0) {\r\n        return false;\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n\r\n  get upperTriangularMatrix() {\r\n    let qr = this.QR;\r\n    let n = qr.columns;\r\n    let X = new Matrix(n, n);\r\n    let i, j;\r\n    for (i = 0; i < n; i++) {\r\n      for (j = 0; j < n; j++) {\r\n        if (i < j) {\r\n          X.set(i, j, qr.get(i, j));\r\n        } else if (i === j) {\r\n          X.set(i, j, this.Rdiag[i]);\r\n        } else {\r\n          X.set(i, j, 0);\r\n        }\r\n      }\r\n    }\r\n    return X;\r\n  }\r\n\r\n  get orthogonalMatrix() {\r\n    let qr = this.QR;\r\n    let rows = qr.rows;\r\n    let columns = qr.columns;\r\n    let X = new Matrix(rows, columns);\r\n    let i, j, k, s;\r\n\r\n    for (k = columns - 1; k >= 0; k--) {\r\n      for (i = 0; i < rows; i++) {\r\n        X.set(i, k, 0);\r\n      }\r\n      X.set(k, k, 1);\r\n      for (j = k; j < columns; j++) {\r\n        if (qr.get(k, k) !== 0) {\r\n          s = 0;\r\n          for (i = k; i < rows; i++) {\r\n            s += qr.get(i, k) * X.get(i, j);\r\n          }\r\n\r\n          s = -s / qr.get(k, k);\r\n\r\n          for (i = k; i < rows; i++) {\r\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return X;\r\n  }\r\n}\r\n\r\nclass SingularValueDecomposition {\r\n  constructor(value, options = {}) {\r\n    value = WrapperMatrix2D.checkMatrix(value);\r\n\r\n    if (value.isEmpty()) {\r\n      throw new Error('Matrix must be non-empty');\r\n    }\r\n\r\n    let m = value.rows;\r\n    let n = value.columns;\r\n\r\n    const {\r\n      computeLeftSingularVectors = true,\r\n      computeRightSingularVectors = true,\r\n      autoTranspose = false,\r\n    } = options;\r\n\r\n    let wantu = Boolean(computeLeftSingularVectors);\r\n    let wantv = Boolean(computeRightSingularVectors);\r\n\r\n    let swapped = false;\r\n    let a;\r\n    if (m < n) {\r\n      if (!autoTranspose) {\r\n        a = value.clone();\r\n        // eslint-disable-next-line no-console\r\n        console.warn(\r\n          'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\r\n        );\r\n      } else {\r\n        a = value.transpose();\r\n        m = a.rows;\r\n        n = a.columns;\r\n        swapped = true;\r\n        let aux = wantu;\r\n        wantu = wantv;\r\n        wantv = aux;\r\n      }\r\n    } else {\r\n      a = value.clone();\r\n    }\r\n\r\n    let nu = Math.min(m, n);\r\n    let ni = Math.min(m + 1, n);\r\n    let s = new Float64Array(ni);\r\n    let U = new Matrix(m, nu);\r\n    let V = new Matrix(n, n);\r\n\r\n    let e = new Float64Array(n);\r\n    let work = new Float64Array(m);\r\n\r\n    let si = new Float64Array(ni);\r\n    for (let i = 0; i < ni; i++) si[i] = i;\r\n\r\n    let nct = Math.min(m - 1, n);\r\n    let nrt = Math.max(0, Math.min(n - 2, m));\r\n    let mrc = Math.max(nct, nrt);\r\n\r\n    for (let k = 0; k < mrc; k++) {\r\n      if (k < nct) {\r\n        s[k] = 0;\r\n        for (let i = k; i < m; i++) {\r\n          s[k] = hypotenuse(s[k], a.get(i, k));\r\n        }\r\n        if (s[k] !== 0) {\r\n          if (a.get(k, k) < 0) {\r\n            s[k] = -s[k];\r\n          }\r\n          for (let i = k; i < m; i++) {\r\n            a.set(i, k, a.get(i, k) / s[k]);\r\n          }\r\n          a.set(k, k, a.get(k, k) + 1);\r\n        }\r\n        s[k] = -s[k];\r\n      }\r\n\r\n      for (let j = k + 1; j < n; j++) {\r\n        if (k < nct && s[k] !== 0) {\r\n          let t = 0;\r\n          for (let i = k; i < m; i++) {\r\n            t += a.get(i, k) * a.get(i, j);\r\n          }\r\n          t = -t / a.get(k, k);\r\n          for (let i = k; i < m; i++) {\r\n            a.set(i, j, a.get(i, j) + t * a.get(i, k));\r\n          }\r\n        }\r\n        e[j] = a.get(k, j);\r\n      }\r\n\r\n      if (wantu && k < nct) {\r\n        for (let i = k; i < m; i++) {\r\n          U.set(i, k, a.get(i, k));\r\n        }\r\n      }\r\n\r\n      if (k < nrt) {\r\n        e[k] = 0;\r\n        for (let i = k + 1; i < n; i++) {\r\n          e[k] = hypotenuse(e[k], e[i]);\r\n        }\r\n        if (e[k] !== 0) {\r\n          if (e[k + 1] < 0) {\r\n            e[k] = 0 - e[k];\r\n          }\r\n          for (let i = k + 1; i < n; i++) {\r\n            e[i] /= e[k];\r\n          }\r\n          e[k + 1] += 1;\r\n        }\r\n        e[k] = -e[k];\r\n        if (k + 1 < m && e[k] !== 0) {\r\n          for (let i = k + 1; i < m; i++) {\r\n            work[i] = 0;\r\n          }\r\n          for (let i = k + 1; i < m; i++) {\r\n            for (let j = k + 1; j < n; j++) {\r\n              work[i] += e[j] * a.get(i, j);\r\n            }\r\n          }\r\n          for (let j = k + 1; j < n; j++) {\r\n            let t = -e[j] / e[k + 1];\r\n            for (let i = k + 1; i < m; i++) {\r\n              a.set(i, j, a.get(i, j) + t * work[i]);\r\n            }\r\n          }\r\n        }\r\n        if (wantv) {\r\n          for (let i = k + 1; i < n; i++) {\r\n            V.set(i, k, e[i]);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    let p = Math.min(n, m + 1);\r\n    if (nct < n) {\r\n      s[nct] = a.get(nct, nct);\r\n    }\r\n    if (m < p) {\r\n      s[p - 1] = 0;\r\n    }\r\n    if (nrt + 1 < p) {\r\n      e[nrt] = a.get(nrt, p - 1);\r\n    }\r\n    e[p - 1] = 0;\r\n\r\n    if (wantu) {\r\n      for (let j = nct; j < nu; j++) {\r\n        for (let i = 0; i < m; i++) {\r\n          U.set(i, j, 0);\r\n        }\r\n        U.set(j, j, 1);\r\n      }\r\n      for (let k = nct - 1; k >= 0; k--) {\r\n        if (s[k] !== 0) {\r\n          for (let j = k + 1; j < nu; j++) {\r\n            let t = 0;\r\n            for (let i = k; i < m; i++) {\r\n              t += U.get(i, k) * U.get(i, j);\r\n            }\r\n            t = -t / U.get(k, k);\r\n            for (let i = k; i < m; i++) {\r\n              U.set(i, j, U.get(i, j) + t * U.get(i, k));\r\n            }\r\n          }\r\n          for (let i = k; i < m; i++) {\r\n            U.set(i, k, -U.get(i, k));\r\n          }\r\n          U.set(k, k, 1 + U.get(k, k));\r\n          for (let i = 0; i < k - 1; i++) {\r\n            U.set(i, k, 0);\r\n          }\r\n        } else {\r\n          for (let i = 0; i < m; i++) {\r\n            U.set(i, k, 0);\r\n          }\r\n          U.set(k, k, 1);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (wantv) {\r\n      for (let k = n - 1; k >= 0; k--) {\r\n        if (k < nrt && e[k] !== 0) {\r\n          for (let j = k + 1; j < n; j++) {\r\n            let t = 0;\r\n            for (let i = k + 1; i < n; i++) {\r\n              t += V.get(i, k) * V.get(i, j);\r\n            }\r\n            t = -t / V.get(k + 1, k);\r\n            for (let i = k + 1; i < n; i++) {\r\n              V.set(i, j, V.get(i, j) + t * V.get(i, k));\r\n            }\r\n          }\r\n        }\r\n        for (let i = 0; i < n; i++) {\r\n          V.set(i, k, 0);\r\n        }\r\n        V.set(k, k, 1);\r\n      }\r\n    }\r\n\r\n    let pp = p - 1;\r\n    let eps = Number.EPSILON;\r\n    while (p > 0) {\r\n      let k, kase;\r\n      for (k = p - 2; k >= -1; k--) {\r\n        if (k === -1) {\r\n          break;\r\n        }\r\n        const alpha =\r\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\r\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\r\n          e[k] = 0;\r\n          break;\r\n        }\r\n      }\r\n      if (k === p - 2) {\r\n        kase = 4;\r\n      } else {\r\n        let ks;\r\n        for (ks = p - 1; ks >= k; ks--) {\r\n          if (ks === k) {\r\n            break;\r\n          }\r\n          let t =\r\n            (ks !== p ? Math.abs(e[ks]) : 0) +\r\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\r\n          if (Math.abs(s[ks]) <= eps * t) {\r\n            s[ks] = 0;\r\n            break;\r\n          }\r\n        }\r\n        if (ks === k) {\r\n          kase = 3;\r\n        } else if (ks === p - 1) {\r\n          kase = 1;\r\n        } else {\r\n          kase = 2;\r\n          k = ks;\r\n        }\r\n      }\r\n\r\n      k++;\r\n\r\n      switch (kase) {\r\n        case 1: {\r\n          let f = e[p - 2];\r\n          e[p - 2] = 0;\r\n          for (let j = p - 2; j >= k; j--) {\r\n            let t = hypotenuse(s[j], f);\r\n            let cs = s[j] / t;\r\n            let sn = f / t;\r\n            s[j] = t;\r\n            if (j !== k) {\r\n              f = -sn * e[j - 1];\r\n              e[j - 1] = cs * e[j - 1];\r\n            }\r\n            if (wantv) {\r\n              for (let i = 0; i < n; i++) {\r\n                t = cs * V.get(i, j) + sn * V.get(i, p - 1);\r\n                V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\r\n                V.set(i, j, t);\r\n              }\r\n            }\r\n          }\r\n          break;\r\n        }\r\n        case 2: {\r\n          let f = e[k - 1];\r\n          e[k - 1] = 0;\r\n          for (let j = k; j < p; j++) {\r\n            let t = hypotenuse(s[j], f);\r\n            let cs = s[j] / t;\r\n            let sn = f / t;\r\n            s[j] = t;\r\n            f = -sn * e[j];\r\n            e[j] = cs * e[j];\r\n            if (wantu) {\r\n              for (let i = 0; i < m; i++) {\r\n                t = cs * U.get(i, j) + sn * U.get(i, k - 1);\r\n                U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\r\n                U.set(i, j, t);\r\n              }\r\n            }\r\n          }\r\n          break;\r\n        }\r\n        case 3: {\r\n          const scale = Math.max(\r\n            Math.abs(s[p - 1]),\r\n            Math.abs(s[p - 2]),\r\n            Math.abs(e[p - 2]),\r\n            Math.abs(s[k]),\r\n            Math.abs(e[k]),\r\n          );\r\n          const sp = s[p - 1] / scale;\r\n          const spm1 = s[p - 2] / scale;\r\n          const epm1 = e[p - 2] / scale;\r\n          const sk = s[k] / scale;\r\n          const ek = e[k] / scale;\r\n          const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\r\n          const c = sp * epm1 * (sp * epm1);\r\n          let shift = 0;\r\n          if (b !== 0 || c !== 0) {\r\n            if (b < 0) {\r\n              shift = 0 - Math.sqrt(b * b + c);\r\n            } else {\r\n              shift = Math.sqrt(b * b + c);\r\n            }\r\n            shift = c / (b + shift);\r\n          }\r\n          let f = (sk + sp) * (sk - sp) + shift;\r\n          let g = sk * ek;\r\n          for (let j = k; j < p - 1; j++) {\r\n            let t = hypotenuse(f, g);\r\n            if (t === 0) t = Number.MIN_VALUE;\r\n            let cs = f / t;\r\n            let sn = g / t;\r\n            if (j !== k) {\r\n              e[j - 1] = t;\r\n            }\r\n            f = cs * s[j] + sn * e[j];\r\n            e[j] = cs * e[j] - sn * s[j];\r\n            g = sn * s[j + 1];\r\n            s[j + 1] = cs * s[j + 1];\r\n            if (wantv) {\r\n              for (let i = 0; i < n; i++) {\r\n                t = cs * V.get(i, j) + sn * V.get(i, j + 1);\r\n                V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\r\n                V.set(i, j, t);\r\n              }\r\n            }\r\n            t = hypotenuse(f, g);\r\n            if (t === 0) t = Number.MIN_VALUE;\r\n            cs = f / t;\r\n            sn = g / t;\r\n            s[j] = t;\r\n            f = cs * e[j] + sn * s[j + 1];\r\n            s[j + 1] = -sn * e[j] + cs * s[j + 1];\r\n            g = sn * e[j + 1];\r\n            e[j + 1] = cs * e[j + 1];\r\n            if (wantu && j < m - 1) {\r\n              for (let i = 0; i < m; i++) {\r\n                t = cs * U.get(i, j) + sn * U.get(i, j + 1);\r\n                U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\r\n                U.set(i, j, t);\r\n              }\r\n            }\r\n          }\r\n          e[p - 2] = f;\r\n          break;\r\n        }\r\n        case 4: {\r\n          if (s[k] <= 0) {\r\n            s[k] = s[k] < 0 ? -s[k] : 0;\r\n            if (wantv) {\r\n              for (let i = 0; i <= pp; i++) {\r\n                V.set(i, k, -V.get(i, k));\r\n              }\r\n            }\r\n          }\r\n          while (k < pp) {\r\n            if (s[k] >= s[k + 1]) {\r\n              break;\r\n            }\r\n            let t = s[k];\r\n            s[k] = s[k + 1];\r\n            s[k + 1] = t;\r\n            if (wantv && k < n - 1) {\r\n              for (let i = 0; i < n; i++) {\r\n                t = V.get(i, k + 1);\r\n                V.set(i, k + 1, V.get(i, k));\r\n                V.set(i, k, t);\r\n              }\r\n            }\r\n            if (wantu && k < m - 1) {\r\n              for (let i = 0; i < m; i++) {\r\n                t = U.get(i, k + 1);\r\n                U.set(i, k + 1, U.get(i, k));\r\n                U.set(i, k, t);\r\n              }\r\n            }\r\n            k++;\r\n          }\r\n          p--;\r\n          break;\r\n        }\r\n        // no default\r\n      }\r\n    }\r\n\r\n    if (swapped) {\r\n      let tmp = V;\r\n      V = U;\r\n      U = tmp;\r\n    }\r\n\r\n    this.m = m;\r\n    this.n = n;\r\n    this.s = s;\r\n    this.U = U;\r\n    this.V = V;\r\n  }\r\n\r\n  solve(value) {\r\n    let Y = value;\r\n    let e = this.threshold;\r\n    let scols = this.s.length;\r\n    let Ls = Matrix.zeros(scols, scols);\r\n\r\n    for (let i = 0; i < scols; i++) {\r\n      if (Math.abs(this.s[i]) <= e) {\r\n        Ls.set(i, i, 0);\r\n      } else {\r\n        Ls.set(i, i, 1 / this.s[i]);\r\n      }\r\n    }\r\n\r\n    let U = this.U;\r\n    let V = this.rightSingularVectors;\r\n\r\n    let VL = V.mmul(Ls);\r\n    let vrows = V.rows;\r\n    let urows = U.rows;\r\n    let VLU = Matrix.zeros(vrows, urows);\r\n\r\n    for (let i = 0; i < vrows; i++) {\r\n      for (let j = 0; j < urows; j++) {\r\n        let sum = 0;\r\n        for (let k = 0; k < scols; k++) {\r\n          sum += VL.get(i, k) * U.get(j, k);\r\n        }\r\n        VLU.set(i, j, sum);\r\n      }\r\n    }\r\n\r\n    return VLU.mmul(Y);\r\n  }\r\n\r\n  solveForDiagonal(value) {\r\n    return this.solve(Matrix.diag(value));\r\n  }\r\n\r\n  inverse() {\r\n    let V = this.V;\r\n    let e = this.threshold;\r\n    let vrows = V.rows;\r\n    let vcols = V.columns;\r\n    let X = new Matrix(vrows, this.s.length);\r\n\r\n    for (let i = 0; i < vrows; i++) {\r\n      for (let j = 0; j < vcols; j++) {\r\n        if (Math.abs(this.s[j]) > e) {\r\n          X.set(i, j, V.get(i, j) / this.s[j]);\r\n        }\r\n      }\r\n    }\r\n\r\n    let U = this.U;\r\n\r\n    let urows = U.rows;\r\n    let ucols = U.columns;\r\n    let Y = new Matrix(vrows, urows);\r\n\r\n    for (let i = 0; i < vrows; i++) {\r\n      for (let j = 0; j < urows; j++) {\r\n        let sum = 0;\r\n        for (let k = 0; k < ucols; k++) {\r\n          sum += X.get(i, k) * U.get(j, k);\r\n        }\r\n        Y.set(i, j, sum);\r\n      }\r\n    }\r\n\r\n    return Y;\r\n  }\r\n\r\n  get condition() {\r\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\r\n  }\r\n\r\n  get norm2() {\r\n    return this.s[0];\r\n  }\r\n\r\n  get rank() {\r\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\r\n    let r = 0;\r\n    let s = this.s;\r\n    for (let i = 0, ii = s.length; i < ii; i++) {\r\n      if (s[i] > tol) {\r\n        r++;\r\n      }\r\n    }\r\n    return r;\r\n  }\r\n\r\n  get diagonal() {\r\n    return Array.from(this.s);\r\n  }\r\n\r\n  get threshold() {\r\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\r\n  }\r\n\r\n  get leftSingularVectors() {\r\n    return this.U;\r\n  }\r\n\r\n  get rightSingularVectors() {\r\n    return this.V;\r\n  }\r\n\r\n  get diagonalMatrix() {\r\n    return Matrix.diag(this.s);\r\n  }\r\n}\r\n\r\nfunction inverse(matrix, useSVD = false) {\r\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\r\n  if (useSVD) {\r\n    return new SingularValueDecomposition(matrix).inverse();\r\n  } else {\r\n    return solve(matrix, Matrix.eye(matrix.rows));\r\n  }\r\n}\r\n\r\nfunction solve(leftHandSide, rightHandSide, useSVD = false) {\r\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\r\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\r\n  if (useSVD) {\r\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\r\n  } else {\r\n    return leftHandSide.isSquare()\r\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\r\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\r\n  }\r\n}\r\n\r\nfunction determinant(matrix) {\r\n  matrix = Matrix.checkMatrix(matrix);\r\n  if (matrix.isSquare()) {\r\n    if (matrix.columns === 0) {\r\n      return 1;\r\n    }\r\n\r\n    let a, b, c, d;\r\n    if (matrix.columns === 2) {\r\n      // 2 x 2 matrix\r\n      a = matrix.get(0, 0);\r\n      b = matrix.get(0, 1);\r\n      c = matrix.get(1, 0);\r\n      d = matrix.get(1, 1);\r\n\r\n      return a * d - b * c;\r\n    } else if (matrix.columns === 3) {\r\n      // 3 x 3 matrix\r\n      let subMatrix0, subMatrix1, subMatrix2;\r\n      subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\r\n      subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\r\n      subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\r\n      a = matrix.get(0, 0);\r\n      b = matrix.get(0, 1);\r\n      c = matrix.get(0, 2);\r\n\r\n      return (\r\n        a * determinant(subMatrix0) -\r\n        b * determinant(subMatrix1) +\r\n        c * determinant(subMatrix2)\r\n      );\r\n    } else {\r\n      // general purpose determinant using the LU decomposition\r\n      return new LuDecomposition(matrix).determinant;\r\n    }\r\n  } else {\r\n    throw Error('determinant can only be calculated for a square matrix');\r\n  }\r\n}\r\n\r\nfunction xrange(n, exception) {\r\n  let range = [];\r\n  for (let i = 0; i < n; i++) {\r\n    if (i !== exception) {\r\n      range.push(i);\r\n    }\r\n  }\r\n  return range;\r\n}\r\n\r\nfunction dependenciesOneRow(\r\n  error,\r\n  matrix,\r\n  index,\r\n  thresholdValue = 10e-10,\r\n  thresholdError = 10e-10,\r\n) {\r\n  if (error > thresholdError) {\r\n    return new Array(matrix.rows + 1).fill(0);\r\n  } else {\r\n    let returnArray = matrix.addRow(index, [0]);\r\n    for (let i = 0; i < returnArray.rows; i++) {\r\n      if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\r\n        returnArray.set(i, 0, 0);\r\n      }\r\n    }\r\n    return returnArray.to1DArray();\r\n  }\r\n}\r\n\r\nfunction linearDependencies(matrix, options = {}) {\r\n  const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\r\n  matrix = Matrix.checkMatrix(matrix);\r\n\r\n  let n = matrix.rows;\r\n  let results = new Matrix(n, n);\r\n\r\n  for (let i = 0; i < n; i++) {\r\n    let b = Matrix.columnVector(matrix.getRow(i));\r\n    let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\r\n    let svd = new SingularValueDecomposition(Abis);\r\n    let x = svd.solve(b);\r\n    let error = Matrix.sub(b, Abis.mmul(x)).abs().max();\r\n    results.setRow(\r\n      i,\r\n      dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\r\n    );\r\n  }\r\n  return results;\r\n}\r\n\r\nfunction pseudoInverse(matrix, threshold = Number.EPSILON) {\r\n  matrix = Matrix.checkMatrix(matrix);\r\n  if (matrix.isEmpty()) {\r\n    // with a zero dimension, the pseudo-inverse is the transpose, since all 0xn and nx0 matrices are singular\r\n    // (0xn)*(nx0)*(0xn) = 0xn\r\n    // (nx0)*(0xn)*(nx0) = nx0\r\n    return matrix.transpose();\r\n  }\r\n  let svdSolution = new SingularValueDecomposition(matrix, { autoTranspose: true });\r\n\r\n  let U = svdSolution.leftSingularVectors;\r\n  let V = svdSolution.rightSingularVectors;\r\n  let s = svdSolution.diagonal;\r\n\r\n  for (let i = 0; i < s.length; i++) {\r\n    if (Math.abs(s[i]) > threshold) {\r\n      s[i] = 1.0 / s[i];\r\n    } else {\r\n      s[i] = 0.0;\r\n    }\r\n  }\r\n\r\n  return V.mmul(Matrix.diag(s).mmul(U.transpose()));\r\n}\r\n\r\nfunction covariance(xMatrix, yMatrix = xMatrix, options = {}) {\r\n  xMatrix = new Matrix(xMatrix);\r\n  let yIsSame = false;\r\n  if (\r\n    typeof yMatrix === 'object' &&\r\n    !Matrix.isMatrix(yMatrix) &&\r\n    !isAnyArray.isAnyArray(yMatrix)\r\n  ) {\r\n    options = yMatrix;\r\n    yMatrix = xMatrix;\r\n    yIsSame = true;\r\n  } else {\r\n    yMatrix = new Matrix(yMatrix);\r\n  }\r\n  if (xMatrix.rows !== yMatrix.rows) {\r\n    throw new TypeError('Both matrices must have the same number of rows');\r\n  }\r\n  const { center = true } = options;\r\n  if (center) {\r\n    xMatrix = xMatrix.center('column');\r\n    if (!yIsSame) {\r\n      yMatrix = yMatrix.center('column');\r\n    }\r\n  }\r\n  const cov = xMatrix.transpose().mmul(yMatrix);\r\n  for (let i = 0; i < cov.rows; i++) {\r\n    for (let j = 0; j < cov.columns; j++) {\r\n      cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\r\n    }\r\n  }\r\n  return cov;\r\n}\r\n\r\nfunction correlation(xMatrix, yMatrix = xMatrix, options = {}) {\r\n  xMatrix = new Matrix(xMatrix);\r\n  let yIsSame = false;\r\n  if (\r\n    typeof yMatrix === 'object' &&\r\n    !Matrix.isMatrix(yMatrix) &&\r\n    !isAnyArray.isAnyArray(yMatrix)\r\n  ) {\r\n    options = yMatrix;\r\n    yMatrix = xMatrix;\r\n    yIsSame = true;\r\n  } else {\r\n    yMatrix = new Matrix(yMatrix);\r\n  }\r\n  if (xMatrix.rows !== yMatrix.rows) {\r\n    throw new TypeError('Both matrices must have the same number of rows');\r\n  }\r\n\r\n  const { center = true, scale = true } = options;\r\n  if (center) {\r\n    xMatrix.center('column');\r\n    if (!yIsSame) {\r\n      yMatrix.center('column');\r\n    }\r\n  }\r\n  if (scale) {\r\n    xMatrix.scale('column');\r\n    if (!yIsSame) {\r\n      yMatrix.scale('column');\r\n    }\r\n  }\r\n\r\n  const sdx = xMatrix.standardDeviation('column', { unbiased: true });\r\n  const sdy = yIsSame\r\n    ? sdx\r\n    : yMatrix.standardDeviation('column', { unbiased: true });\r\n\r\n  const corr = xMatrix.transpose().mmul(yMatrix);\r\n  for (let i = 0; i < corr.rows; i++) {\r\n    for (let j = 0; j < corr.columns; j++) {\r\n      corr.set(\r\n        i,\r\n        j,\r\n        corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\r\n      );\r\n    }\r\n  }\r\n  return corr;\r\n}\r\n\r\nclass EigenvalueDecomposition {\r\n  constructor(matrix, options = {}) {\r\n    const { assumeSymmetric = false } = options;\r\n\r\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\r\n    if (!matrix.isSquare()) {\r\n      throw new Error('Matrix is not a square matrix');\r\n    }\r\n\r\n    if (matrix.isEmpty()) {\r\n      throw new Error('Matrix must be non-empty');\r\n    }\r\n\r\n    let n = matrix.columns;\r\n    let V = new Matrix(n, n);\r\n    let d = new Float64Array(n);\r\n    let e = new Float64Array(n);\r\n    let value = matrix;\r\n    let i, j;\r\n\r\n    let isSymmetric = false;\r\n    if (assumeSymmetric) {\r\n      isSymmetric = true;\r\n    } else {\r\n      isSymmetric = matrix.isSymmetric();\r\n    }\r\n\r\n    if (isSymmetric) {\r\n      for (i = 0; i < n; i++) {\r\n        for (j = 0; j < n; j++) {\r\n          V.set(i, j, value.get(i, j));\r\n        }\r\n      }\r\n      tred2(n, e, d, V);\r\n      tql2(n, e, d, V);\r\n    } else {\r\n      let H = new Matrix(n, n);\r\n      let ort = new Float64Array(n);\r\n      for (j = 0; j < n; j++) {\r\n        for (i = 0; i < n; i++) {\r\n          H.set(i, j, value.get(i, j));\r\n        }\r\n      }\r\n      orthes(n, H, ort, V);\r\n      hqr2(n, e, d, V, H);\r\n    }\r\n\r\n    this.n = n;\r\n    this.e = e;\r\n    this.d = d;\r\n    this.V = V;\r\n  }\r\n\r\n  get realEigenvalues() {\r\n    return Array.from(this.d);\r\n  }\r\n\r\n  get imaginaryEigenvalues() {\r\n    return Array.from(this.e);\r\n  }\r\n\r\n  get eigenvectorMatrix() {\r\n    return this.V;\r\n  }\r\n\r\n  get diagonalMatrix() {\r\n    let n = this.n;\r\n    let e = this.e;\r\n    let d = this.d;\r\n    let X = new Matrix(n, n);\r\n    let i, j;\r\n    for (i = 0; i < n; i++) {\r\n      for (j = 0; j < n; j++) {\r\n        X.set(i, j, 0);\r\n      }\r\n      X.set(i, i, d[i]);\r\n      if (e[i] > 0) {\r\n        X.set(i, i + 1, e[i]);\r\n      } else if (e[i] < 0) {\r\n        X.set(i, i - 1, e[i]);\r\n      }\r\n    }\r\n    return X;\r\n  }\r\n}\r\n\r\nfunction tred2(n, e, d, V) {\r\n  let f, g, h, i, j, k, hh, scale;\r\n\r\n  for (j = 0; j < n; j++) {\r\n    d[j] = V.get(n - 1, j);\r\n  }\r\n\r\n  for (i = n - 1; i > 0; i--) {\r\n    scale = 0;\r\n    h = 0;\r\n    for (k = 0; k < i; k++) {\r\n      scale = scale + Math.abs(d[k]);\r\n    }\r\n\r\n    if (scale === 0) {\r\n      e[i] = d[i - 1];\r\n      for (j = 0; j < i; j++) {\r\n        d[j] = V.get(i - 1, j);\r\n        V.set(i, j, 0);\r\n        V.set(j, i, 0);\r\n      }\r\n    } else {\r\n      for (k = 0; k < i; k++) {\r\n        d[k] /= scale;\r\n        h += d[k] * d[k];\r\n      }\r\n\r\n      f = d[i - 1];\r\n      g = Math.sqrt(h);\r\n      if (f > 0) {\r\n        g = -g;\r\n      }\r\n\r\n      e[i] = scale * g;\r\n      h = h - f * g;\r\n      d[i - 1] = f - g;\r\n      for (j = 0; j < i; j++) {\r\n        e[j] = 0;\r\n      }\r\n\r\n      for (j = 0; j < i; j++) {\r\n        f = d[j];\r\n        V.set(j, i, f);\r\n        g = e[j] + V.get(j, j) * f;\r\n        for (k = j + 1; k <= i - 1; k++) {\r\n          g += V.get(k, j) * d[k];\r\n          e[k] += V.get(k, j) * f;\r\n        }\r\n        e[j] = g;\r\n      }\r\n\r\n      f = 0;\r\n      for (j = 0; j < i; j++) {\r\n        e[j] /= h;\r\n        f += e[j] * d[j];\r\n      }\r\n\r\n      hh = f / (h + h);\r\n      for (j = 0; j < i; j++) {\r\n        e[j] -= hh * d[j];\r\n      }\r\n\r\n      for (j = 0; j < i; j++) {\r\n        f = d[j];\r\n        g = e[j];\r\n        for (k = j; k <= i - 1; k++) {\r\n          V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\r\n        }\r\n        d[j] = V.get(i - 1, j);\r\n        V.set(i, j, 0);\r\n      }\r\n    }\r\n    d[i] = h;\r\n  }\r\n\r\n  for (i = 0; i < n - 1; i++) {\r\n    V.set(n - 1, i, V.get(i, i));\r\n    V.set(i, i, 1);\r\n    h = d[i + 1];\r\n    if (h !== 0) {\r\n      for (k = 0; k <= i; k++) {\r\n        d[k] = V.get(k, i + 1) / h;\r\n      }\r\n\r\n      for (j = 0; j <= i; j++) {\r\n        g = 0;\r\n        for (k = 0; k <= i; k++) {\r\n          g += V.get(k, i + 1) * V.get(k, j);\r\n        }\r\n        for (k = 0; k <= i; k++) {\r\n          V.set(k, j, V.get(k, j) - g * d[k]);\r\n        }\r\n      }\r\n    }\r\n\r\n    for (k = 0; k <= i; k++) {\r\n      V.set(k, i + 1, 0);\r\n    }\r\n  }\r\n\r\n  for (j = 0; j < n; j++) {\r\n    d[j] = V.get(n - 1, j);\r\n    V.set(n - 1, j, 0);\r\n  }\r\n\r\n  V.set(n - 1, n - 1, 1);\r\n  e[0] = 0;\r\n}\r\n\r\nfunction tql2(n, e, d, V) {\r\n  let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2;\r\n\r\n  for (i = 1; i < n; i++) {\r\n    e[i - 1] = e[i];\r\n  }\r\n\r\n  e[n - 1] = 0;\r\n\r\n  let f = 0;\r\n  let tst1 = 0;\r\n  let eps = Number.EPSILON;\r\n\r\n  for (l = 0; l < n; l++) {\r\n    tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\r\n    m = l;\r\n    while (m < n) {\r\n      if (Math.abs(e[m]) <= eps * tst1) {\r\n        break;\r\n      }\r\n      m++;\r\n    }\r\n\r\n    if (m > l) {\r\n      do {\r\n\r\n        g = d[l];\r\n        p = (d[l + 1] - g) / (2 * e[l]);\r\n        r = hypotenuse(p, 1);\r\n        if (p < 0) {\r\n          r = -r;\r\n        }\r\n\r\n        d[l] = e[l] / (p + r);\r\n        d[l + 1] = e[l] * (p + r);\r\n        dl1 = d[l + 1];\r\n        h = g - d[l];\r\n        for (i = l + 2; i < n; i++) {\r\n          d[i] -= h;\r\n        }\r\n\r\n        f = f + h;\r\n\r\n        p = d[m];\r\n        c = 1;\r\n        c2 = c;\r\n        c3 = c;\r\n        el1 = e[l + 1];\r\n        s = 0;\r\n        s2 = 0;\r\n        for (i = m - 1; i >= l; i--) {\r\n          c3 = c2;\r\n          c2 = c;\r\n          s2 = s;\r\n          g = c * e[i];\r\n          h = c * p;\r\n          r = hypotenuse(p, e[i]);\r\n          e[i + 1] = s * r;\r\n          s = e[i] / r;\r\n          c = p / r;\r\n          p = c * d[i] - s * g;\r\n          d[i + 1] = h + s * (c * g + s * d[i]);\r\n\r\n          for (k = 0; k < n; k++) {\r\n            h = V.get(k, i + 1);\r\n            V.set(k, i + 1, s * V.get(k, i) + c * h);\r\n            V.set(k, i, c * V.get(k, i) - s * h);\r\n          }\r\n        }\r\n\r\n        p = (-s * s2 * c3 * el1 * e[l]) / dl1;\r\n        e[l] = s * p;\r\n        d[l] = c * p;\r\n      } while (Math.abs(e[l]) > eps * tst1);\r\n    }\r\n    d[l] = d[l] + f;\r\n    e[l] = 0;\r\n  }\r\n\r\n  for (i = 0; i < n - 1; i++) {\r\n    k = i;\r\n    p = d[i];\r\n    for (j = i + 1; j < n; j++) {\r\n      if (d[j] < p) {\r\n        k = j;\r\n        p = d[j];\r\n      }\r\n    }\r\n\r\n    if (k !== i) {\r\n      d[k] = d[i];\r\n      d[i] = p;\r\n      for (j = 0; j < n; j++) {\r\n        p = V.get(j, i);\r\n        V.set(j, i, V.get(j, k));\r\n        V.set(j, k, p);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nfunction orthes(n, H, ort, V) {\r\n  let low = 0;\r\n  let high = n - 1;\r\n  let f, g, h, i, j, m;\r\n  let scale;\r\n\r\n  for (m = low + 1; m <= high - 1; m++) {\r\n    scale = 0;\r\n    for (i = m; i <= high; i++) {\r\n      scale = scale + Math.abs(H.get(i, m - 1));\r\n    }\r\n\r\n    if (scale !== 0) {\r\n      h = 0;\r\n      for (i = high; i >= m; i--) {\r\n        ort[i] = H.get(i, m - 1) / scale;\r\n        h += ort[i] * ort[i];\r\n      }\r\n\r\n      g = Math.sqrt(h);\r\n      if (ort[m] > 0) {\r\n        g = -g;\r\n      }\r\n\r\n      h = h - ort[m] * g;\r\n      ort[m] = ort[m] - g;\r\n\r\n      for (j = m; j < n; j++) {\r\n        f = 0;\r\n        for (i = high; i >= m; i--) {\r\n          f += ort[i] * H.get(i, j);\r\n        }\r\n\r\n        f = f / h;\r\n        for (i = m; i <= high; i++) {\r\n          H.set(i, j, H.get(i, j) - f * ort[i]);\r\n        }\r\n      }\r\n\r\n      for (i = 0; i <= high; i++) {\r\n        f = 0;\r\n        for (j = high; j >= m; j--) {\r\n          f += ort[j] * H.get(i, j);\r\n        }\r\n\r\n        f = f / h;\r\n        for (j = m; j <= high; j++) {\r\n          H.set(i, j, H.get(i, j) - f * ort[j]);\r\n        }\r\n      }\r\n\r\n      ort[m] = scale * ort[m];\r\n      H.set(m, m - 1, scale * g);\r\n    }\r\n  }\r\n\r\n  for (i = 0; i < n; i++) {\r\n    for (j = 0; j < n; j++) {\r\n      V.set(i, j, i === j ? 1 : 0);\r\n    }\r\n  }\r\n\r\n  for (m = high - 1; m >= low + 1; m--) {\r\n    if (H.get(m, m - 1) !== 0) {\r\n      for (i = m + 1; i <= high; i++) {\r\n        ort[i] = H.get(i, m - 1);\r\n      }\r\n\r\n      for (j = m; j <= high; j++) {\r\n        g = 0;\r\n        for (i = m; i <= high; i++) {\r\n          g += ort[i] * V.get(i, j);\r\n        }\r\n\r\n        g = g / ort[m] / H.get(m, m - 1);\r\n        for (i = m; i <= high; i++) {\r\n          V.set(i, j, V.get(i, j) + g * ort[i]);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nfunction hqr2(nn, e, d, V, H) {\r\n  let n = nn - 1;\r\n  let low = 0;\r\n  let high = nn - 1;\r\n  let eps = Number.EPSILON;\r\n  let exshift = 0;\r\n  let norm = 0;\r\n  let p = 0;\r\n  let q = 0;\r\n  let r = 0;\r\n  let s = 0;\r\n  let z = 0;\r\n  let iter = 0;\r\n  let i, j, k, l, m, t, w, x, y;\r\n  let ra, sa, vr, vi;\r\n  let notlast, cdivres;\r\n\r\n  for (i = 0; i < nn; i++) {\r\n    if (i < low || i > high) {\r\n      d[i] = H.get(i, i);\r\n      e[i] = 0;\r\n    }\r\n\r\n    for (j = Math.max(i - 1, 0); j < nn; j++) {\r\n      norm = norm + Math.abs(H.get(i, j));\r\n    }\r\n  }\r\n\r\n  while (n >= low) {\r\n    l = n;\r\n    while (l > low) {\r\n      s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\r\n      if (s === 0) {\r\n        s = norm;\r\n      }\r\n      if (Math.abs(H.get(l, l - 1)) < eps * s) {\r\n        break;\r\n      }\r\n      l--;\r\n    }\r\n\r\n    if (l === n) {\r\n      H.set(n, n, H.get(n, n) + exshift);\r\n      d[n] = H.get(n, n);\r\n      e[n] = 0;\r\n      n--;\r\n      iter = 0;\r\n    } else if (l === n - 1) {\r\n      w = H.get(n, n - 1) * H.get(n - 1, n);\r\n      p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\r\n      q = p * p + w;\r\n      z = Math.sqrt(Math.abs(q));\r\n      H.set(n, n, H.get(n, n) + exshift);\r\n      H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\r\n      x = H.get(n, n);\r\n\r\n      if (q >= 0) {\r\n        z = p >= 0 ? p + z : p - z;\r\n        d[n - 1] = x + z;\r\n        d[n] = d[n - 1];\r\n        if (z !== 0) {\r\n          d[n] = x - w / z;\r\n        }\r\n        e[n - 1] = 0;\r\n        e[n] = 0;\r\n        x = H.get(n, n - 1);\r\n        s = Math.abs(x) + Math.abs(z);\r\n        p = x / s;\r\n        q = z / s;\r\n        r = Math.sqrt(p * p + q * q);\r\n        p = p / r;\r\n        q = q / r;\r\n\r\n        for (j = n - 1; j < nn; j++) {\r\n          z = H.get(n - 1, j);\r\n          H.set(n - 1, j, q * z + p * H.get(n, j));\r\n          H.set(n, j, q * H.get(n, j) - p * z);\r\n        }\r\n\r\n        for (i = 0; i <= n; i++) {\r\n          z = H.get(i, n - 1);\r\n          H.set(i, n - 1, q * z + p * H.get(i, n));\r\n          H.set(i, n, q * H.get(i, n) - p * z);\r\n        }\r\n\r\n        for (i = low; i <= high; i++) {\r\n          z = V.get(i, n - 1);\r\n          V.set(i, n - 1, q * z + p * V.get(i, n));\r\n          V.set(i, n, q * V.get(i, n) - p * z);\r\n        }\r\n      } else {\r\n        d[n - 1] = x + p;\r\n        d[n] = x + p;\r\n        e[n - 1] = z;\r\n        e[n] = -z;\r\n      }\r\n\r\n      n = n - 2;\r\n      iter = 0;\r\n    } else {\r\n      x = H.get(n, n);\r\n      y = 0;\r\n      w = 0;\r\n      if (l < n) {\r\n        y = H.get(n - 1, n - 1);\r\n        w = H.get(n, n - 1) * H.get(n - 1, n);\r\n      }\r\n\r\n      if (iter === 10) {\r\n        exshift += x;\r\n        for (i = low; i <= n; i++) {\r\n          H.set(i, i, H.get(i, i) - x);\r\n        }\r\n        s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\r\n        // eslint-disable-next-line no-multi-assign\r\n        x = y = 0.75 * s;\r\n        w = -0.4375 * s * s;\r\n      }\r\n\r\n      if (iter === 30) {\r\n        s = (y - x) / 2;\r\n        s = s * s + w;\r\n        if (s > 0) {\r\n          s = Math.sqrt(s);\r\n          if (y < x) {\r\n            s = -s;\r\n          }\r\n          s = x - w / ((y - x) / 2 + s);\r\n          for (i = low; i <= n; i++) {\r\n            H.set(i, i, H.get(i, i) - s);\r\n          }\r\n          exshift += s;\r\n          // eslint-disable-next-line no-multi-assign\r\n          x = y = w = 0.964;\r\n        }\r\n      }\r\n\r\n      iter = iter + 1;\r\n\r\n      m = n - 2;\r\n      while (m >= l) {\r\n        z = H.get(m, m);\r\n        r = x - z;\r\n        s = y - z;\r\n        p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\r\n        q = H.get(m + 1, m + 1) - z - r - s;\r\n        r = H.get(m + 2, m + 1);\r\n        s = Math.abs(p) + Math.abs(q) + Math.abs(r);\r\n        p = p / s;\r\n        q = q / s;\r\n        r = r / s;\r\n        if (m === l) {\r\n          break;\r\n        }\r\n        if (\r\n          Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\r\n          eps *\r\n            (Math.abs(p) *\r\n              (Math.abs(H.get(m - 1, m - 1)) +\r\n                Math.abs(z) +\r\n                Math.abs(H.get(m + 1, m + 1))))\r\n        ) {\r\n          break;\r\n        }\r\n        m--;\r\n      }\r\n\r\n      for (i = m + 2; i <= n; i++) {\r\n        H.set(i, i - 2, 0);\r\n        if (i > m + 2) {\r\n          H.set(i, i - 3, 0);\r\n        }\r\n      }\r\n\r\n      for (k = m; k <= n - 1; k++) {\r\n        notlast = k !== n - 1;\r\n        if (k !== m) {\r\n          p = H.get(k, k - 1);\r\n          q = H.get(k + 1, k - 1);\r\n          r = notlast ? H.get(k + 2, k - 1) : 0;\r\n          x = Math.abs(p) + Math.abs(q) + Math.abs(r);\r\n          if (x !== 0) {\r\n            p = p / x;\r\n            q = q / x;\r\n            r = r / x;\r\n          }\r\n        }\r\n\r\n        if (x === 0) {\r\n          break;\r\n        }\r\n\r\n        s = Math.sqrt(p * p + q * q + r * r);\r\n        if (p < 0) {\r\n          s = -s;\r\n        }\r\n\r\n        if (s !== 0) {\r\n          if (k !== m) {\r\n            H.set(k, k - 1, -s * x);\r\n          } else if (l !== m) {\r\n            H.set(k, k - 1, -H.get(k, k - 1));\r\n          }\r\n\r\n          p = p + s;\r\n          x = p / s;\r\n          y = q / s;\r\n          z = r / s;\r\n          q = q / p;\r\n          r = r / p;\r\n\r\n          for (j = k; j < nn; j++) {\r\n            p = H.get(k, j) + q * H.get(k + 1, j);\r\n            if (notlast) {\r\n              p = p + r * H.get(k + 2, j);\r\n              H.set(k + 2, j, H.get(k + 2, j) - p * z);\r\n            }\r\n\r\n            H.set(k, j, H.get(k, j) - p * x);\r\n            H.set(k + 1, j, H.get(k + 1, j) - p * y);\r\n          }\r\n\r\n          for (i = 0; i <= Math.min(n, k + 3); i++) {\r\n            p = x * H.get(i, k) + y * H.get(i, k + 1);\r\n            if (notlast) {\r\n              p = p + z * H.get(i, k + 2);\r\n              H.set(i, k + 2, H.get(i, k + 2) - p * r);\r\n            }\r\n\r\n            H.set(i, k, H.get(i, k) - p);\r\n            H.set(i, k + 1, H.get(i, k + 1) - p * q);\r\n          }\r\n\r\n          for (i = low; i <= high; i++) {\r\n            p = x * V.get(i, k) + y * V.get(i, k + 1);\r\n            if (notlast) {\r\n              p = p + z * V.get(i, k + 2);\r\n              V.set(i, k + 2, V.get(i, k + 2) - p * r);\r\n            }\r\n\r\n            V.set(i, k, V.get(i, k) - p);\r\n            V.set(i, k + 1, V.get(i, k + 1) - p * q);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  if (norm === 0) {\r\n    return;\r\n  }\r\n\r\n  for (n = nn - 1; n >= 0; n--) {\r\n    p = d[n];\r\n    q = e[n];\r\n\r\n    if (q === 0) {\r\n      l = n;\r\n      H.set(n, n, 1);\r\n      for (i = n - 1; i >= 0; i--) {\r\n        w = H.get(i, i) - p;\r\n        r = 0;\r\n        for (j = l; j <= n; j++) {\r\n          r = r + H.get(i, j) * H.get(j, n);\r\n        }\r\n\r\n        if (e[i] < 0) {\r\n          z = w;\r\n          s = r;\r\n        } else {\r\n          l = i;\r\n          if (e[i] === 0) {\r\n            H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\r\n          } else {\r\n            x = H.get(i, i + 1);\r\n            y = H.get(i + 1, i);\r\n            q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\r\n            t = (x * s - z * r) / q;\r\n            H.set(i, n, t);\r\n            H.set(\r\n              i + 1,\r\n              n,\r\n              Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\r\n            );\r\n          }\r\n\r\n          t = Math.abs(H.get(i, n));\r\n          if (eps * t * t > 1) {\r\n            for (j = i; j <= n; j++) {\r\n              H.set(j, n, H.get(j, n) / t);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (q < 0) {\r\n      l = n - 1;\r\n\r\n      if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\r\n        H.set(n - 1, n - 1, q / H.get(n, n - 1));\r\n        H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\r\n      } else {\r\n        cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\r\n        H.set(n - 1, n - 1, cdivres[0]);\r\n        H.set(n - 1, n, cdivres[1]);\r\n      }\r\n\r\n      H.set(n, n - 1, 0);\r\n      H.set(n, n, 1);\r\n      for (i = n - 2; i >= 0; i--) {\r\n        ra = 0;\r\n        sa = 0;\r\n        for (j = l; j <= n; j++) {\r\n          ra = ra + H.get(i, j) * H.get(j, n - 1);\r\n          sa = sa + H.get(i, j) * H.get(j, n);\r\n        }\r\n\r\n        w = H.get(i, i) - p;\r\n\r\n        if (e[i] < 0) {\r\n          z = w;\r\n          r = ra;\r\n          s = sa;\r\n        } else {\r\n          l = i;\r\n          if (e[i] === 0) {\r\n            cdivres = cdiv(-ra, -sa, w, q);\r\n            H.set(i, n - 1, cdivres[0]);\r\n            H.set(i, n, cdivres[1]);\r\n          } else {\r\n            x = H.get(i, i + 1);\r\n            y = H.get(i + 1, i);\r\n            vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\r\n            vi = (d[i] - p) * 2 * q;\r\n            if (vr === 0 && vi === 0) {\r\n              vr =\r\n                eps *\r\n                norm *\r\n                (Math.abs(w) +\r\n                  Math.abs(q) +\r\n                  Math.abs(x) +\r\n                  Math.abs(y) +\r\n                  Math.abs(z));\r\n            }\r\n            cdivres = cdiv(\r\n              x * r - z * ra + q * sa,\r\n              x * s - z * sa - q * ra,\r\n              vr,\r\n              vi,\r\n            );\r\n            H.set(i, n - 1, cdivres[0]);\r\n            H.set(i, n, cdivres[1]);\r\n            if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\r\n              H.set(\r\n                i + 1,\r\n                n - 1,\r\n                (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\r\n              );\r\n              H.set(\r\n                i + 1,\r\n                n,\r\n                (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\r\n              );\r\n            } else {\r\n              cdivres = cdiv(\r\n                -r - y * H.get(i, n - 1),\r\n                -s - y * H.get(i, n),\r\n                z,\r\n                q,\r\n              );\r\n              H.set(i + 1, n - 1, cdivres[0]);\r\n              H.set(i + 1, n, cdivres[1]);\r\n            }\r\n          }\r\n\r\n          t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\r\n          if (eps * t * t > 1) {\r\n            for (j = i; j <= n; j++) {\r\n              H.set(j, n - 1, H.get(j, n - 1) / t);\r\n              H.set(j, n, H.get(j, n) / t);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  for (i = 0; i < nn; i++) {\r\n    if (i < low || i > high) {\r\n      for (j = i; j < nn; j++) {\r\n        V.set(i, j, H.get(i, j));\r\n      }\r\n    }\r\n  }\r\n\r\n  for (j = nn - 1; j >= low; j--) {\r\n    for (i = low; i <= high; i++) {\r\n      z = 0;\r\n      for (k = low; k <= Math.min(j, high); k++) {\r\n        z = z + V.get(i, k) * H.get(k, j);\r\n      }\r\n      V.set(i, j, z);\r\n    }\r\n  }\r\n}\r\n\r\nfunction cdiv(xr, xi, yr, yi) {\r\n  let r, d;\r\n  if (Math.abs(yr) > Math.abs(yi)) {\r\n    r = yi / yr;\r\n    d = yr + r * yi;\r\n    return [(xr + r * xi) / d, (xi - r * xr) / d];\r\n  } else {\r\n    r = yr / yi;\r\n    d = yi + r * yr;\r\n    return [(r * xr + xi) / d, (r * xi - xr) / d];\r\n  }\r\n}\r\n\r\nclass CholeskyDecomposition {\r\n  constructor(value) {\r\n    value = WrapperMatrix2D.checkMatrix(value);\r\n    if (!value.isSymmetric()) {\r\n      throw new Error('Matrix is not symmetric');\r\n    }\r\n\r\n    let a = value;\r\n    let dimension = a.rows;\r\n    let l = new Matrix(dimension, dimension);\r\n    let positiveDefinite = true;\r\n    let i, j, k;\r\n\r\n    for (j = 0; j < dimension; j++) {\r\n      let d = 0;\r\n      for (k = 0; k < j; k++) {\r\n        let s = 0;\r\n        for (i = 0; i < k; i++) {\r\n          s += l.get(k, i) * l.get(j, i);\r\n        }\r\n        s = (a.get(j, k) - s) / l.get(k, k);\r\n        l.set(j, k, s);\r\n        d = d + s * s;\r\n      }\r\n\r\n      d = a.get(j, j) - d;\r\n\r\n      positiveDefinite &&= d > 0;\r\n      l.set(j, j, Math.sqrt(Math.max(d, 0)));\r\n      for (k = j + 1; k < dimension; k++) {\r\n        l.set(j, k, 0);\r\n      }\r\n    }\r\n\r\n    this.L = l;\r\n    this.positiveDefinite = positiveDefinite;\r\n  }\r\n\r\n  isPositiveDefinite() {\r\n    return this.positiveDefinite;\r\n  }\r\n\r\n  solve(value) {\r\n    value = WrapperMatrix2D.checkMatrix(value);\r\n\r\n    let l = this.L;\r\n    let dimension = l.rows;\r\n\r\n    if (value.rows !== dimension) {\r\n      throw new Error('Matrix dimensions do not match');\r\n    }\r\n    if (this.isPositiveDefinite() === false) {\r\n      throw new Error('Matrix is not positive definite');\r\n    }\r\n\r\n    let count = value.columns;\r\n    let B = value.clone();\r\n    let i, j, k;\r\n\r\n    for (k = 0; k < dimension; k++) {\r\n      for (j = 0; j < count; j++) {\r\n        for (i = 0; i < k; i++) {\r\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\r\n        }\r\n        B.set(k, j, B.get(k, j) / l.get(k, k));\r\n      }\r\n    }\r\n\r\n    for (k = dimension - 1; k >= 0; k--) {\r\n      for (j = 0; j < count; j++) {\r\n        for (i = k + 1; i < dimension; i++) {\r\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\r\n        }\r\n        B.set(k, j, B.get(k, j) / l.get(k, k));\r\n      }\r\n    }\r\n\r\n    return B;\r\n  }\r\n\r\n  get lowerTriangularMatrix() {\r\n    return this.L;\r\n  }\r\n}\r\n\r\nclass nipals {\r\n  constructor(X, options = {}) {\r\n    X = WrapperMatrix2D.checkMatrix(X);\r\n    let { Y } = options;\r\n    const {\r\n      scaleScores = false,\r\n      maxIterations = 1000,\r\n      terminationCriteria = 1e-10,\r\n    } = options;\r\n\r\n    let u;\r\n    if (Y) {\r\n      if (isAnyArray.isAnyArray(Y) && typeof Y[0] === 'number') {\r\n        Y = Matrix.columnVector(Y);\r\n      } else {\r\n        Y = WrapperMatrix2D.checkMatrix(Y);\r\n      }\r\n      if (Y.rows !== X.rows) {\r\n        throw new Error('Y should have the same number of rows as X');\r\n      }\r\n      u = Y.getColumnVector(0);\r\n    } else {\r\n      u = X.getColumnVector(0);\r\n    }\r\n\r\n    let diff = 1;\r\n    let t, q, w, tOld;\r\n\r\n    for (\r\n      let counter = 0;\r\n      counter < maxIterations && diff > terminationCriteria;\r\n      counter++\r\n    ) {\r\n      w = X.transpose().mmul(u).div(u.transpose().mmul(u).get(0, 0));\r\n      w = w.div(w.norm());\r\n\r\n      t = X.mmul(w).div(w.transpose().mmul(w).get(0, 0));\r\n\r\n      if (counter > 0) {\r\n        diff = t.clone().sub(tOld).pow(2).sum();\r\n      }\r\n      tOld = t.clone();\r\n\r\n      if (Y) {\r\n        q = Y.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\r\n        q = q.div(q.norm());\r\n\r\n        u = Y.mmul(q).div(q.transpose().mmul(q).get(0, 0));\r\n      } else {\r\n        u = t;\r\n      }\r\n    }\r\n\r\n    if (Y) {\r\n      let p = X.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\r\n      p = p.div(p.norm());\r\n      let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\r\n      let residual = u.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\r\n      let yResidual = Y.clone().sub(\r\n        t.clone().mulS(residual.get(0, 0)).mmul(q.transpose()),\r\n      );\r\n\r\n      this.t = t;\r\n      this.p = p.transpose();\r\n      this.w = w.transpose();\r\n      this.q = q;\r\n      this.u = u;\r\n      this.s = t.transpose().mmul(t);\r\n      this.xResidual = xResidual;\r\n      this.yResidual = yResidual;\r\n      this.betas = residual;\r\n    } else {\r\n      this.w = w.transpose();\r\n      this.s = t.transpose().mmul(t).sqrt();\r\n      if (scaleScores) {\r\n        this.t = t.clone().div(this.s.get(0, 0));\r\n      } else {\r\n        this.t = t;\r\n      }\r\n      this.xResidual = X.sub(t.mmul(w.transpose()));\r\n    }\r\n  }\r\n}\r\n\r\nexports.AbstractMatrix = AbstractMatrix;\r\nexports.CHO = CholeskyDecomposition;\r\nexports.CholeskyDecomposition = CholeskyDecomposition;\r\nexports.DistanceMatrix = DistanceMatrix;\r\nexports.EVD = EigenvalueDecomposition;\r\nexports.EigenvalueDecomposition = EigenvalueDecomposition;\r\nexports.LU = LuDecomposition;\r\nexports.LuDecomposition = LuDecomposition;\r\nexports.Matrix = Matrix;\r\nexports.MatrixColumnSelectionView = MatrixColumnSelectionView;\r\nexports.MatrixColumnView = MatrixColumnView;\r\nexports.MatrixFlipColumnView = MatrixFlipColumnView;\r\nexports.MatrixFlipRowView = MatrixFlipRowView;\r\nexports.MatrixRowSelectionView = MatrixRowSelectionView;\r\nexports.MatrixRowView = MatrixRowView;\r\nexports.MatrixSelectionView = MatrixSelectionView;\r\nexports.MatrixSubView = MatrixSubView;\r\nexports.MatrixTransposeView = MatrixTransposeView;\r\nexports.NIPALS = nipals;\r\nexports.Nipals = nipals;\r\nexports.QR = QrDecomposition;\r\nexports.QrDecomposition = QrDecomposition;\r\nexports.SVD = SingularValueDecomposition;\r\nexports.SingularValueDecomposition = SingularValueDecomposition;\r\nexports.SymmetricMatrix = SymmetricMatrix;\r\nexports.WrapperMatrix1D = WrapperMatrix1D;\r\nexports.WrapperMatrix2D = WrapperMatrix2D;\r\nexports.correlation = correlation;\r\nexports.covariance = covariance;\r\nexports.default = Matrix;\r\nexports.determinant = determinant;\r\nexports.inverse = inverse;\r\nexports.linearDependencies = linearDependencies;\r\nexports.pseudoInverse = pseudoInverse;\r\nexports.solve = solve;\r\nexports.wrap = wrap;\r\n","import * as matrix from './matrix.js';\r\n\r\nexport const AbstractMatrix = matrix.AbstractMatrix;\r\nexport const CHO = matrix.CHO;\r\nexport const CholeskyDecomposition = matrix.CholeskyDecomposition;\r\nexport const DistanceMatrix = matrix.DistanceMatrix;\r\nexport const EVD = matrix.EVD;\r\nexport const EigenvalueDecomposition = matrix.EigenvalueDecomposition;\r\nexport const LU = matrix.LU;\r\nexport const LuDecomposition = matrix.LuDecomposition;\r\nexport const Matrix = matrix.Matrix;\r\nexport const MatrixColumnSelectionView = matrix.MatrixColumnSelectionView;\r\nexport const MatrixColumnView = matrix.MatrixColumnView;\r\nexport const MatrixFlipColumnView = matrix.MatrixFlipColumnView;\r\nexport const MatrixFlipRowView = matrix.MatrixFlipRowView;\r\nexport const MatrixRowSelectionView = matrix.MatrixRowSelectionView;\r\nexport const MatrixRowView = matrix.MatrixRowView;\r\nexport const MatrixSelectionView = matrix.MatrixSelectionView;\r\nexport const MatrixSubView = matrix.MatrixSubView;\r\nexport const MatrixTransposeView = matrix.MatrixTransposeView;\r\nexport const NIPALS = matrix.NIPALS;\r\nexport const Nipals = matrix.Nipals;\r\nexport const QR = matrix.QR;\r\nexport const QrDecomposition = matrix.QrDecomposition;\r\nexport const SVD = matrix.SVD;\r\nexport const SingularValueDecomposition = matrix.SingularValueDecomposition;\r\nexport const SymmetricMatrix = matrix.SymmetricMatrix;\r\nexport const WrapperMatrix1D = matrix.WrapperMatrix1D;\r\nexport const WrapperMatrix2D = matrix.WrapperMatrix2D;\r\nexport const correlation = matrix.correlation;\r\nexport const covariance = matrix.covariance;\r\nexport default matrix.default.Matrix ? matrix.default.Matrix : matrix.Matrix;\r\nexport const determinant = matrix.determinant;\r\nexport const inverse = matrix.inverse;\r\nexport const linearDependencies = matrix.linearDependencies;\r\nexport const pseudoInverse = matrix.pseudoInverse;\r\nexport const solve = matrix.solve;\r\nexport const wrap = matrix.wrap;\r\n","// Generated by CoffeeScript 1.8.0\r\n(function() {\r\n  var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup;\r\n\r\n  floor = Math.floor, min = Math.min;\r\n\r\n\r\n  /*\r\n  Default comparison function to be used\r\n   */\r\n\r\n  defaultCmp = function(x, y) {\r\n    if (x < y) {\r\n      return -1;\r\n    }\r\n    if (x > y) {\r\n      return 1;\r\n    }\r\n    return 0;\r\n  };\r\n\r\n\r\n  /*\r\n  Insert item x in list a, and keep it sorted assuming a is sorted.\r\n  \r\n  If x is already in a, insert it to the right of the rightmost x.\r\n  \r\n  Optional args lo (default 0) and hi (default a.length) bound the slice\r\n  of a to be searched.\r\n   */\r\n\r\n  insort = function(a, x, lo, hi, cmp) {\r\n    var mid;\r\n    if (lo == null) {\r\n      lo = 0;\r\n    }\r\n    if (cmp == null) {\r\n      cmp = defaultCmp;\r\n    }\r\n    if (lo < 0) {\r\n      throw new Error('lo must be non-negative');\r\n    }\r\n    if (hi == null) {\r\n      hi = a.length;\r\n    }\r\n    while (lo < hi) {\r\n      mid = floor((lo + hi) / 2);\r\n      if (cmp(x, a[mid]) < 0) {\r\n        hi = mid;\r\n      } else {\r\n        lo = mid + 1;\r\n      }\r\n    }\r\n    return ([].splice.apply(a, [lo, lo - lo].concat(x)), x);\r\n  };\r\n\r\n\r\n  /*\r\n  Push item onto heap, maintaining the heap invariant.\r\n   */\r\n\r\n  heappush = function(array, item, cmp) {\r\n    if (cmp == null) {\r\n      cmp = defaultCmp;\r\n    }\r\n    array.push(item);\r\n    return _siftdown(array, 0, array.length - 1, cmp);\r\n  };\r\n\r\n\r\n  /*\r\n  Pop the smallest item off the heap, maintaining the heap invariant.\r\n   */\r\n\r\n  heappop = function(array, cmp) {\r\n    var lastelt, returnitem;\r\n    if (cmp == null) {\r\n      cmp = defaultCmp;\r\n    }\r\n    lastelt = array.pop();\r\n    if (array.length) {\r\n      returnitem = array[0];\r\n      array[0] = lastelt;\r\n      _siftup(array, 0, cmp);\r\n    } else {\r\n      returnitem = lastelt;\r\n    }\r\n    return returnitem;\r\n  };\r\n\r\n\r\n  /*\r\n  Pop and return the current smallest value, and add the new item.\r\n  \r\n  This is more efficient than heappop() followed by heappush(), and can be\r\n  more appropriate when using a fixed size heap. Note that the value\r\n  returned may be larger than item! That constrains reasonable use of\r\n  this routine unless written as part of a conditional replacement:\r\n      if item > array[0]\r\n        item = heapreplace(array, item)\r\n   */\r\n\r\n  heapreplace = function(array, item, cmp) {\r\n    var returnitem;\r\n    if (cmp == null) {\r\n      cmp = defaultCmp;\r\n    }\r\n    returnitem = array[0];\r\n    array[0] = item;\r\n    _siftup(array, 0, cmp);\r\n    return returnitem;\r\n  };\r\n\r\n\r\n  /*\r\n  Fast version of a heappush followed by a heappop.\r\n   */\r\n\r\n  heappushpop = function(array, item, cmp) {\r\n    var _ref;\r\n    if (cmp == null) {\r\n      cmp = defaultCmp;\r\n    }\r\n    if (array.length && cmp(array[0], item) < 0) {\r\n      _ref = [array[0], item], item = _ref[0], array[0] = _ref[1];\r\n      _siftup(array, 0, cmp);\r\n    }\r\n    return item;\r\n  };\r\n\r\n\r\n  /*\r\n  Transform list into a heap, in-place, in O(array.length) time.\r\n   */\r\n\r\n  heapify = function(array, cmp) {\r\n    var i, _i, _j, _len, _ref, _ref1, _results, _results1;\r\n    if (cmp == null) {\r\n      cmp = defaultCmp;\r\n    }\r\n    _ref1 = (function() {\r\n      _results1 = [];\r\n      for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); }\r\n      return _results1;\r\n    }).apply(this).reverse();\r\n    _results = [];\r\n    for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\r\n      i = _ref1[_i];\r\n      _results.push(_siftup(array, i, cmp));\r\n    }\r\n    return _results;\r\n  };\r\n\r\n\r\n  /*\r\n  Update the position of the given item in the heap.\r\n  This function should be called every time the item is being modified.\r\n   */\r\n\r\n  updateItem = function(array, item, cmp) {\r\n    var pos;\r\n    if (cmp == null) {\r\n      cmp = defaultCmp;\r\n    }\r\n    pos = array.indexOf(item);\r\n    if (pos === -1) {\r\n      return;\r\n    }\r\n    _siftdown(array, 0, pos, cmp);\r\n    return _siftup(array, pos, cmp);\r\n  };\r\n\r\n\r\n  /*\r\n  Find the n largest elements in a dataset.\r\n   */\r\n\r\n  nlargest = function(array, n, cmp) {\r\n    var elem, result, _i, _len, _ref;\r\n    if (cmp == null) {\r\n      cmp = defaultCmp;\r\n    }\r\n    result = array.slice(0, n);\r\n    if (!result.length) {\r\n      return result;\r\n    }\r\n    heapify(result, cmp);\r\n    _ref = array.slice(n);\r\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n      elem = _ref[_i];\r\n      heappushpop(result, elem, cmp);\r\n    }\r\n    return result.sort(cmp).reverse();\r\n  };\r\n\r\n\r\n  /*\r\n  Find the n smallest elements in a dataset.\r\n   */\r\n\r\n  nsmallest = function(array, n, cmp) {\r\n    var elem, i, los, result, _i, _j, _len, _ref, _ref1, _results;\r\n    if (cmp == null) {\r\n      cmp = defaultCmp;\r\n    }\r\n    if (n * 10 <= array.length) {\r\n      result = array.slice(0, n).sort(cmp);\r\n      if (!result.length) {\r\n        return result;\r\n      }\r\n      los = result[result.length - 1];\r\n      _ref = array.slice(n);\r\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n        elem = _ref[_i];\r\n        if (cmp(elem, los) < 0) {\r\n          insort(result, elem, 0, null, cmp);\r\n          result.pop();\r\n          los = result[result.length - 1];\r\n        }\r\n      }\r\n      return result;\r\n    }\r\n    heapify(array, cmp);\r\n    _results = [];\r\n    for (i = _j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) {\r\n      _results.push(heappop(array, cmp));\r\n    }\r\n    return _results;\r\n  };\r\n\r\n  _siftdown = function(array, startpos, pos, cmp) {\r\n    var newitem, parent, parentpos;\r\n    if (cmp == null) {\r\n      cmp = defaultCmp;\r\n    }\r\n    newitem = array[pos];\r\n    while (pos > startpos) {\r\n      parentpos = (pos - 1) >> 1;\r\n      parent = array[parentpos];\r\n      if (cmp(newitem, parent) < 0) {\r\n        array[pos] = parent;\r\n        pos = parentpos;\r\n        continue;\r\n      }\r\n      break;\r\n    }\r\n    return array[pos] = newitem;\r\n  };\r\n\r\n  _siftup = function(array, pos, cmp) {\r\n    var childpos, endpos, newitem, rightpos, startpos;\r\n    if (cmp == null) {\r\n      cmp = defaultCmp;\r\n    }\r\n    endpos = array.length;\r\n    startpos = pos;\r\n    newitem = array[pos];\r\n    childpos = 2 * pos + 1;\r\n    while (childpos < endpos) {\r\n      rightpos = childpos + 1;\r\n      if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) {\r\n        childpos = rightpos;\r\n      }\r\n      array[pos] = array[childpos];\r\n      pos = childpos;\r\n      childpos = 2 * pos + 1;\r\n    }\r\n    array[pos] = newitem;\r\n    return _siftdown(array, startpos, pos, cmp);\r\n  };\r\n\r\n  Heap = (function() {\r\n    Heap.push = heappush;\r\n\r\n    Heap.pop = heappop;\r\n\r\n    Heap.replace = heapreplace;\r\n\r\n    Heap.pushpop = heappushpop;\r\n\r\n    Heap.heapify = heapify;\r\n\r\n    Heap.updateItem = updateItem;\r\n\r\n    Heap.nlargest = nlargest;\r\n\r\n    Heap.nsmallest = nsmallest;\r\n\r\n    function Heap(cmp) {\r\n      this.cmp = cmp != null ? cmp : defaultCmp;\r\n      this.nodes = [];\r\n    }\r\n\r\n    Heap.prototype.push = function(x) {\r\n      return heappush(this.nodes, x, this.cmp);\r\n    };\r\n\r\n    Heap.prototype.pop = function() {\r\n      return heappop(this.nodes, this.cmp);\r\n    };\r\n\r\n    Heap.prototype.peek = function() {\r\n      return this.nodes[0];\r\n    };\r\n\r\n    Heap.prototype.contains = function(x) {\r\n      return this.nodes.indexOf(x) !== -1;\r\n    };\r\n\r\n    Heap.prototype.replace = function(x) {\r\n      return heapreplace(this.nodes, x, this.cmp);\r\n    };\r\n\r\n    Heap.prototype.pushpop = function(x) {\r\n      return heappushpop(this.nodes, x, this.cmp);\r\n    };\r\n\r\n    Heap.prototype.heapify = function() {\r\n      return heapify(this.nodes, this.cmp);\r\n    };\r\n\r\n    Heap.prototype.updateItem = function(x) {\r\n      return updateItem(this.nodes, x, this.cmp);\r\n    };\r\n\r\n    Heap.prototype.clear = function() {\r\n      return this.nodes = [];\r\n    };\r\n\r\n    Heap.prototype.empty = function() {\r\n      return this.nodes.length === 0;\r\n    };\r\n\r\n    Heap.prototype.size = function() {\r\n      return this.nodes.length;\r\n    };\r\n\r\n    Heap.prototype.clone = function() {\r\n      var heap;\r\n      heap = new Heap();\r\n      heap.nodes = this.nodes.slice(0);\r\n      return heap;\r\n    };\r\n\r\n    Heap.prototype.toArray = function() {\r\n      return this.nodes.slice(0);\r\n    };\r\n\r\n    Heap.prototype.insert = Heap.prototype.push;\r\n\r\n    Heap.prototype.top = Heap.prototype.peek;\r\n\r\n    Heap.prototype.front = Heap.prototype.peek;\r\n\r\n    Heap.prototype.has = Heap.prototype.contains;\r\n\r\n    Heap.prototype.copy = Heap.prototype.clone;\r\n\r\n    return Heap;\r\n\r\n  })();\r\n\r\n  (function(root, factory) {\r\n    if (typeof define === 'function' && define.amd) {\r\n      return define([], factory);\r\n    } else if (typeof exports === 'object') {\r\n      return module.exports = factory();\r\n    } else {\r\n      return root.Heap = factory();\r\n    }\r\n  })(this, function() {\r\n    return Heap;\r\n  });\r\n\r\n}).call(this);\r\n","module.exports = require('./lib/heap');\r\n","import Heap from 'heap';\r\n\r\nexport default class Cluster {\r\n  constructor() {\r\n    this.children = [];\r\n    this.height = 0;\r\n    this.size = 1;\r\n    this.index = -1;\r\n    this.isLeaf = false;\r\n  }\r\n\r\n  /**\r\n   * Creates an array of clusters where the maximum height is smaller than the threshold\r\n   * @param {number} threshold\r\n   * @return {Array<Cluster>}\r\n   */\r\n  cut(threshold) {\r\n    if (typeof threshold !== 'number') {\r\n      throw new TypeError('threshold must be a number');\r\n    }\r\n    if (threshold < 0) {\r\n      throw new RangeError('threshold must be a positive number');\r\n    }\r\n    let list = [this];\r\n    const ans = [];\r\n    while (list.length > 0) {\r\n      const aux = list.shift();\r\n      if (threshold >= aux.height) {\r\n        ans.push(aux);\r\n      } else {\r\n        list = list.concat(aux.children);\r\n      }\r\n    }\r\n    return ans;\r\n  }\r\n\r\n  /**\r\n   * Merge the leaves in the minimum way to have `groups` number of clusters.\r\n   * @param {number} groups - Them number of children the first level of the tree should have.\r\n   * @return {Cluster}\r\n   */\r\n  group(groups) {\r\n    if (!Number.isInteger(groups) || groups < 1) {\r\n      throw new RangeError('groups must be a positive integer');\r\n    }\r\n\r\n    const heap = new Heap((a, b) => {\r\n      return b.height - a.height;\r\n    });\r\n\r\n    heap.push(this);\r\n\r\n    while (heap.size() < groups) {\r\n      const first = heap.pop();\r\n      if (first.children.length === 0) {\r\n        break;\r\n      }\r\n      first.children.forEach((child) => heap.push(child));\r\n    }\r\n\r\n    const root = new Cluster();\r\n    root.children = heap.toArray();\r\n    root.height = this.height;\r\n\r\n    return root;\r\n  }\r\n\r\n  /**\r\n   * Traverses the tree depth-first and calls the provided callback with each individual node\r\n   * @param {function} cb - The callback to be called on each node encounter\r\n   */\r\n  traverse(cb) {\r\n    function visit(root, callback) {\r\n      callback(root);\r\n      if (root.children) {\r\n        for (const child of root.children) {\r\n          visit(child, callback);\r\n        }\r\n      }\r\n    }\r\n    visit(this, cb);\r\n  }\r\n\r\n  /**\r\n   * Returns a list of indices for all the leaves of this cluster.\r\n   * The list is ordered in such a way that a dendrogram could be drawn without crossing branches.\r\n   * @returns {Array<number>}\r\n   */\r\n  indices() {\r\n    const result = [];\r\n    this.traverse((cluster) => {\r\n      if (cluster.isLeaf) {\r\n        result.push(cluster.index);\r\n      }\r\n    });\r\n    return result;\r\n  }\r\n}\r\n","import { euclidean } from 'ml-distance-euclidean';\r\nimport getDistanceMatrix from 'ml-distance-matrix';\r\nimport { Matrix } from 'ml-matrix';\r\n\r\nimport Cluster from './Cluster';\r\n\r\nfunction singleLink(dKI, dKJ) {\r\n  return Math.min(dKI, dKJ);\r\n}\r\n\r\nfunction completeLink(dKI, dKJ) {\r\n  return Math.max(dKI, dKJ);\r\n}\r\n\r\nfunction averageLink(dKI, dKJ, dIJ, ni, nj) {\r\n  const ai = ni / (ni + nj);\r\n  const aj = nj / (ni + nj);\r\n  return ai * dKI + aj * dKJ;\r\n}\r\n\r\nfunction weightedAverageLink(dKI, dKJ) {\r\n  return (dKI + dKJ) / 2;\r\n}\r\n\r\nfunction centroidLink(dKI, dKJ, dIJ, ni, nj) {\r\n  const ai = ni / (ni + nj);\r\n  const aj = nj / (ni + nj);\r\n  const b = -(ni * nj) / (ni + nj) ** 2;\r\n  return ai * dKI + aj * dKJ + b * dIJ;\r\n}\r\n\r\nfunction medianLink(dKI, dKJ, dIJ) {\r\n  return dKI / 2 + dKJ / 2 - dIJ / 4;\r\n}\r\n\r\nfunction wardLink(dKI, dKJ, dIJ, ni, nj, nk) {\r\n  const ai = (ni + nk) / (ni + nj + nk);\r\n  const aj = (nj + nk) / (ni + nj + nk);\r\n  const b = -nk / (ni + nj + nk);\r\n  return ai * dKI + aj * dKJ + b * dIJ;\r\n}\r\n\r\nfunction wardLink2(dKI, dKJ, dIJ, ni, nj, nk) {\r\n  const ai = (ni + nk) / (ni + nj + nk);\r\n  const aj = (nj + nk) / (ni + nj + nk);\r\n  const b = -nk / (ni + nj + nk);\r\n  return Math.sqrt(ai * dKI * dKI + aj * dKJ * dKJ + b * dIJ * dIJ);\r\n}\r\n\r\n/**\r\n * Continuously merge nodes that have the least dissimilarity\r\n * @param {Array<Array<number>>} data - Array of points to be clustered\r\n * @param {object} [options]\r\n * @param {Function} [options.distanceFunction]\r\n * @param {string} [options.method] - Default: `'complete'`\r\n * @param {boolean} [options.isDistanceMatrix] - Is the input already a distance matrix?\r\n * @constructor\r\n */\r\nexport function agnes(data, options = {}) {\r\n  const {\r\n    distanceFunction = euclidean,\r\n    method = 'complete',\r\n    isDistanceMatrix = false,\r\n  } = options;\r\n\r\n  let updateFunc;\r\n  if (!isDistanceMatrix) {\r\n    data = getDistanceMatrix(data, distanceFunction);\r\n  }\r\n  let distanceMatrix = new Matrix(data);\r\n  const numLeaves = distanceMatrix.rows;\r\n\r\n  // allows to use a string or a given function\r\n  if (typeof method === 'string') {\r\n    switch (method.toLowerCase()) {\r\n      case 'single':\r\n        updateFunc = singleLink;\r\n        break;\r\n      case 'complete':\r\n        updateFunc = completeLink;\r\n        break;\r\n      case 'average':\r\n      case 'upgma':\r\n        updateFunc = averageLink;\r\n        break;\r\n      case 'wpgma':\r\n        updateFunc = weightedAverageLink;\r\n        break;\r\n      case 'centroid':\r\n      case 'upgmc':\r\n        updateFunc = centroidLink;\r\n        break;\r\n      case 'median':\r\n      case 'wpgmc':\r\n        updateFunc = medianLink;\r\n        break;\r\n      case 'ward':\r\n        updateFunc = wardLink;\r\n        break;\r\n      case 'ward2':\r\n        updateFunc = wardLink2;\r\n        break;\r\n      default:\r\n        throw new RangeError(`unknown clustering method: ${method}`);\r\n    }\r\n  } else if (typeof method !== 'function') {\r\n    throw new TypeError('method must be a string or function');\r\n  }\r\n\r\n  let clusters = [];\r\n  for (let i = 0; i < numLeaves; i++) {\r\n    const cluster = new Cluster();\r\n    cluster.isLeaf = true;\r\n    cluster.index = i;\r\n    clusters.push(cluster);\r\n  }\r\n\r\n  for (let n = 0; n < numLeaves - 1; n++) {\r\n    const [row, column, distance] = getSmallestDistance(distanceMatrix);\r\n    const cluster1 = clusters[row];\r\n    const cluster2 = clusters[column];\r\n    const newCluster = new Cluster();\r\n    newCluster.size = cluster1.size + cluster2.size;\r\n    newCluster.children.push(cluster1, cluster2);\r\n    newCluster.height = distance;\r\n\r\n    const newClusters = [newCluster];\r\n    const newDistanceMatrix = new Matrix(\r\n      distanceMatrix.rows - 1,\r\n      distanceMatrix.rows - 1,\r\n    );\r\n    const previous = (newIndex) =>\r\n      getPreviousIndex(newIndex, Math.min(row, column), Math.max(row, column));\r\n\r\n    for (let i = 1; i < newDistanceMatrix.rows; i++) {\r\n      const prevI = previous(i);\r\n      const prevICluster = clusters[prevI];\r\n      newClusters.push(prevICluster);\r\n      for (let j = 0; j < i; j++) {\r\n        if (j === 0) {\r\n          const dKI = distanceMatrix.get(row, prevI);\r\n          const dKJ = distanceMatrix.get(prevI, column);\r\n          const val = updateFunc(\r\n            dKI,\r\n            dKJ,\r\n            distance,\r\n            cluster1.size,\r\n            cluster2.size,\r\n            prevICluster.size,\r\n          );\r\n          newDistanceMatrix.set(i, j, val);\r\n          newDistanceMatrix.set(j, i, val);\r\n        } else {\r\n          // Just copy distance from previous matrix\r\n          const val = distanceMatrix.get(prevI, previous(j));\r\n          newDistanceMatrix.set(i, j, val);\r\n          newDistanceMatrix.set(j, i, val);\r\n        }\r\n      }\r\n    }\r\n\r\n    clusters = newClusters;\r\n    distanceMatrix = newDistanceMatrix;\r\n  }\r\n\r\n  return clusters[0];\r\n}\r\n\r\nfunction getSmallestDistance(distance) {\r\n  let smallest = Infinity;\r\n  let smallestI = 0;\r\n  let smallestJ = 0;\r\n  for (let i = 1; i < distance.rows; i++) {\r\n    for (let j = 0; j < i; j++) {\r\n      if (distance.get(i, j) < smallest) {\r\n        smallest = distance.get(i, j);\r\n        smallestI = i;\r\n        smallestJ = j;\r\n      }\r\n    }\r\n  }\r\n  return [smallestI, smallestJ, smallest];\r\n}\r\n\r\nfunction getPreviousIndex(newIndex, prev1, prev2) {\r\n  newIndex -= 1;\r\n  if (newIndex >= prev1) newIndex++;\r\n  if (newIndex >= prev2) newIndex++;\r\n  return newIndex;\r\n}\r\n","/**\r\n * Computes a distance/similarity matrix given an array of data and a distance/similarity function.\r\n * @param {Array} data An array of data\r\n * @param {function} distanceFn  A function that accepts two arguments and computes a distance/similarity between them\r\n * @return {Array<Array>} The distance/similarity matrix. The matrix is square and has a size equal to the length of\r\n * the data array\r\n */\r\nexport default function distanceMatrix(data, distanceFn) {\r\n  const result = getMatrix(data.length);\r\n\r\n  // Compute upper distance matrix\r\n  for (let i = 0; i < data.length; i++) {\r\n    for (let j = 0; j <= i; j++) {\r\n      result[i][j] = distanceFn(data[i], data[j]);\r\n      result[j][i] = result[i][j];\r\n    }\r\n  }\r\n\r\n  return result;\r\n}\r\n\r\nfunction getMatrix(size) {\r\n  const matrix = [];\r\n  for (let i = 0; i < size; i++) {\r\n    const row = [];\r\n    matrix.push(row);\r\n    for (let j = 0; j < size; j++) {\r\n      row.push(0);\r\n    }\r\n  }\r\n  return matrix;\r\n}\r\n","// Shared plot-title renderer so every clustjs plot title looks identical:\r\n// sans-serif, 16px, semibold, dark fill, centered at the given coordinates.\r\n// Append to the plot's zoom layer so the title zooms/pans together with the plot.\r\nexport function addPlotTitle(svg, title, x, y) {\r\n    if (!title) return null;\r\n    return svg.append(\"text\")\r\n        .attr(\"class\", \"plot-title\")\r\n        .attr(\"x\", x)\r\n        .attr(\"y\", y)\r\n        .attr(\"text-anchor\", \"middle\")\r\n        .attr(\"font-family\", \"sans-serif\")\r\n        .attr(\"font-size\", \"16px\")\r\n        .attr(\"font-weight\", \"600\")\r\n        .attr(\"fill\", \"#111111\")\r\n        .text(title);\r\n}\r\n","import * as d3 from \"d3\";\r\n\r\n// Shared d3-zoom wiring for all clustjs plots: wheel to zoom toward the cursor,\r\n// drag to pan. Transforms `layer` (which includes the plot title) while anything\r\n// outside it stays fixed. Exposes node.plotZoom.resetZoom(); the reset is applied\r\n// synchronously (no transition) so it also works when rAF is throttled\r\n// (e.g. background tabs).\r\nexport function attachPlotZoom(svg, layer, { enabled = true, scaleExtent = [0.5, 8] } = {}) {\r\n    const zoom = d3.zoom()\r\n        .scaleExtent(scaleExtent)\r\n        .on(\"zoom\", event => layer.attr(\"transform\", event.transform));\r\n\r\n    const resetZoom = () => {\r\n        if (enabled) svg.call(zoom.transform, d3.zoomIdentity);\r\n    };\r\n\r\n    if (enabled) svg.call(zoom);\r\n\r\n    svg.node().plotZoom = { enabled, resetZoom };\r\n    return resetZoom;\r\n}\r\n","import * as d3 from \"d3\";\r\nimport d3tip from \"d3-tip\";\r\nimport irisData from \"./data/irisData.js\";\r\nimport { addPlotTitle } from \"./plotTitle.mjs\";\r\nimport { attachPlotZoom } from \"./plotZoom.mjs\";\r\n\r\n\r\n// auxiliary function to convert a data to a data array\r\nconst buildData = async function (data) {\r\n  let array = []\r\n  d3.range(data.length).map((d) => {\r\n    const o = d3.range(data[0].length).map((t) => ({\r\n      t: t,\r\n      n: d,\r\n      value: data[d][t]\r\n    }))\r\n    array = [...array, ...o]\r\n  })\r\n  return array\r\n}\r\n\r\n// trim label lengths if they are greater than maxLen characters\r\nfunction trimText(arr, maxLen = 20) {\r\n  return arr.map(label => {\r\n    const str = String(label);\r\n    if (str.length > maxLen) {\r\n      return str.slice(0, maxLen) + \"...\";\r\n    }\r\n    return str;\r\n  });\r\n}\r\n\r\n\r\n\r\nexport async function heatmap_plot(options = {}) {\r\n  //console.log(\"RUNNING heatmap_plot()----------------------\");\r\n \r\n\r\n  const {\r\n    divId: divId = \"\",\r\n    data: data = irisData.map(obj => Object.values(obj)).map(row => row.slice(0, -1)),\r\n    rowNames: rowNames = irisData.map(obj => Object.values(obj)).map((d, idx) => d[4] + idx),\r\n    colNames: colNames = Object.keys(irisData[0]).slice(0, -1),\r\n    height: inputHeight,\r\n    width: inputWidth,\r\n    color: inputColor = null, // array of 3 colors: [low, middle, high]\r\n    marginTop: marginTop = 0,\r\n    marginBottom: marginBottom = 0,\r\n    marginLeft: marginLeft = 0,\r\n    marginRight: marginRight = 0,\r\n    legendOffsetX: legendOffsetX = 0,\r\n    title: title = \"Heatmap\", // optional plot title rendered above the heatmap; null/\"\" to hide\r\n\r\n    colorScale: colorScale = null,\r\n    // sentinel marking missing cells. NOTE: the standalone heatmap default is -1 for\r\n    // backward compatibility; hclust_plot() uses null and passes NaN through here.\r\n    missingValue: missingValue = -1,\r\n    // fill color for missing cells (and the \"Missing\" legend swatch)\r\n    missingColor: missingColor = \"#bdbdbd\",\r\n    denseLabelThreshold: denseLabelThreshold = 49,\r\n    denseLabelBoost: denseLabelBoost = 1.8,\r\n    // angle (degrees) for bottom column labels; -90 = vertical, -45 = diagonal, 0 = horizontal\r\n    bottomLabelAngle: bottomLabelAngle = -90,\r\n    // maximum characters shown for row/column tick labels before truncation with an ellipsis\r\n    maxLabelLength: maxLabelLength = 20,\r\n    // arrays of row/col indices to highlight with a violet outline (like hclust selection)\r\n    highlightRows: highlightRows = null,\r\n    highlightCols: highlightCols = null,\r\n         // hover tooltip\r\n        tooltip_decimal: tooltip_decimal = 2,\r\n        tooltip_fontFamily: tooltip_fontFamily = 'monospace',\r\n        tooltip_fontSize: tooltip_fontSize = '14px',\r\n        mountToDOM: mountToDOM = true,\r\n        // wheel to zoom, drag to pan when mounted standalone;\r\n        // ignored when embedded by hclust (mountToDOM=false), which has its own zoom\r\n        zoomable: zoomable = true,\r\n        // when true, prints layout/diagnostic console.log messages\r\n        debug: debug = false,\r\n\r\n  } = options\r\n        const targetDivId = divId;\r\n\r\n  // Default color palette: blue (low) → yellow (middle) → red (high)\r\n  const color = inputColor ?? ['#4575b4', '#ffffbf', '#d73027'];\r\n\r\n  const maxAutoSize = 500; // maximum size for auto-scaling to prevent excessively large plots\r\n  const colCount = data[0]?.length ?? 0;\r\n  const rowCount = data.length;\r\n  const autoWidth = Math.min(maxAutoSize, Math.max(500, colCount * 16 + 180));\r\n  const autoHeight = Math.min(maxAutoSize, Math.max(500, rowCount * 16 + 180));\r\n  if (debug) console.log(\"Calculated autoWidth:\", autoWidth, \"autoHeight:\", autoHeight);\r\n  const width = Number.isFinite(inputWidth) && inputWidth > 0 ? inputWidth : autoWidth;\r\n  const height = Number.isFinite(inputHeight) && inputHeight > 0 ? inputHeight : autoHeight;\r\n\r\n  if (debug) console.log(\"heatmap_plot dimensions:\", { width, height });\r\n\r\n  // Reserve room for the title above the heatmap\r\n  const effectiveMarginTop = title ? Math.max(marginTop, 34) : marginTop;\r\n\r\n  // start of heatmap\r\nlet color_scale;\r\nlet derivedScale;\r\n\r\n// If user provides full scale → use it directly\r\nif (typeof colorScale === \"function\") {\r\n  color_scale = colorScale;\r\n\r\n  const d = colorScale.domain();\r\n  derivedScale = [d[0], d[d.length - 1]];\r\n\r\n} else {\r\n  // exclude missing\r\n  const flatValues = data.flat().filter(v => Number.isFinite(v) && v !== missingValue);\r\n\r\n  const extent = d3.extent(flatValues);\r\n\r\n  derivedScale =\r\n    extent[0] === extent[1]\r\n      ? [extent[0] ?? 0, (extent[1] ?? 0) + 1]\r\n      : extent;\r\n\r\n  const midVal = (derivedScale[0] + derivedScale[1]) / 2;\r\n\r\n  color_scale = d3.scaleLinear()\r\n    .domain([derivedScale[0], midVal, derivedScale[1]])\r\n    .range(color);\r\n}\r\n\r\n  // bottom labels: Calculate font size as half the heatmap cell width\r\n  const cellWidth = (width - marginLeft - marginRight ) / data[0].length;\r\n  let labelFontSizeBottom = Math.min(Math.max(cellWidth / 6, 8), 20); // clamp between 8px and 20px\r\n  // Many columns: smaller text so more labels fit tightly (ticks below are only\r\n  // thinned when adjacent labels would actually overlap)\r\n  if (colNames.length > denseLabelThreshold) labelFontSizeBottom = Math.min(labelFontSizeBottom, 10);\r\n  const maxColLabelLength = Math.min(d3.max(colNames.map(c => String(c).length)), maxLabelLength);\r\n  // Bottom margin depends on label angle: sin(|angle|) determines vertical projection of the rotated text\r\n  const bottomAngleRad = (Math.abs(bottomLabelAngle) * Math.PI) / 180;\r\n  const bottomLabelTextWidth = labelFontSizeBottom * maxColLabelLength * 0.5;\r\n  const dynamicBottomMargin = Math.max(\r\n    marginBottom,\r\n    Math.abs(Math.sin(bottomAngleRad)) * bottomLabelTextWidth + labelFontSizeBottom + 5\r\n  );\r\n  const cellHeight = (height - effectiveMarginTop - dynamicBottomMargin) / data.length;\r\n  let labelFontSizeRight = Math.min(Math.max(cellHeight / 3, 7), 20); // clamp between 7px and 20px\r\n  // Many rows: smaller text so more labels fit tightly\r\n  if (rowNames.length > denseLabelThreshold) labelFontSizeRight = Math.min(labelFontSizeRight, 9);\r\n  const maxRowLabelLength = Math.min(d3.max(rowNames.map(r => String(r).length)), maxLabelLength);\r\n  const dynamicRightMargin = Math.max(200, labelFontSizeRight * maxRowLabelLength * 0.6 + 100);\r\n  const margin = ({\r\n    top: effectiveMarginTop,\r\n    bottom: dynamicBottomMargin,\r\n    left: marginLeft,\r\n    right: dynamicRightMargin\r\n  });\r\n  const innerHeight = height - margin.top - margin.bottom;\r\n  const innerWidth = width - margin.left - margin.right;\r\n\r\n  // console.log(\"HEATMAP ###########################################\")\r\n\r\n  // console.log(\"height2:\", height);\r\n  // console.log(\"width2:\", width);\r\n  // console.log(\"color2:\", color);\r\n  // console.log(\"marginTop2:\", marginTop);\r\n  // console.log(\"marginBottom2:\", marginBottom);\r\n  // console.log(\"marginLeft2:\", marginLeft);\r\n  // console.log(\"marginRight2:\", marginRight);\r\n  // console.log(\"colorScale2:\", colorScale);\r\n  // console.log(\"cellWidth2-------:\", cellWidth);\r\n  //   console.log(\"cellHeight2:\", cellHeight);\r\n  // console.log(\"labelFontSizeBottom2:\", labelFontSizeBottom);\r\n  // console.log(\"maxColLabelLength2:\", maxColLabelLength);\r\n  // console.log(\"dynamicBottomMargin2:\", dynamicBottomMargin);\r\n\r\n  // console.log(\"labelFontSizeRight2:\", labelFontSizeRight);\r\n  // console.log(\"maxRowLabelLength2:\", maxRowLabelLength);\r\n  // console.log(\"dynamicRightMargin2:\", dynamicRightMargin);\r\n  // console.log(\"2: labelFontSizeBottom * maxColLabelLength * 0.5 + 5:\", labelFontSizeBottom * maxColLabelLength * 0.5 + 5)\r\n  // console.log(\"margin2:\", margin);\r\n  // console.log(\"innerHeight2:\", innerHeight);\r\n  // console.log(\"innerWidth2:\", innerWidth);\r\n\r\n  // Trim labels to maxLabelLength characters max (for display only)\r\n  const trimmedColnames = trimText(colNames, maxLabelLength);\r\n  const trimmedRownames = trimText(rowNames, maxLabelLength);\r\n\r\n  // Use indices for scale domain to avoid duplicate label issues\r\n  const colIndices = d3.range(data[0].length);\r\n  const rowIndices = d3.range(data.length);\r\n\r\n  // Minimal spacing between labels: show every label that fits, thinning ticks\r\n  // only when adjacent labels would overlap. The horizontal footprint of a\r\n  // bottom label depends on its rotation angle (vertical text ≈ font height).\r\n  const colSpacing = innerWidth / Math.max(colIndices.length, 1);\r\n  let bottomLabelFootprint = Math.abs(Math.sin(bottomAngleRad)) * labelFontSizeBottom\r\n    + Math.abs(Math.cos(bottomAngleRad)) * labelFontSizeBottom * 0.55 * maxColLabelLength;\r\n  let xLabelStep = Math.max(1, Math.ceil((bottomLabelFootprint + 1) / colSpacing));\r\n  // Prefer slightly smaller text over skipping labels when that lets every label fit\r\n  if (xLabelStep > 1 && Math.abs(Math.sin(bottomAngleRad)) > 0.9) {\r\n    const fitFont = colSpacing - 1;\r\n    if (fitFont >= 7) {\r\n      labelFontSizeBottom = fitFont;\r\n      bottomLabelFootprint = fitFont;\r\n      xLabelStep = 1;\r\n    }\r\n  }\r\n  const xTickValues = colIndices.filter(i => i % xLabelStep === 0);\r\n  // Append the final label only when it won't collide with the previous tick\r\n  const lastCol = colIndices[colIndices.length - 1];\r\n  if (\r\n    colIndices.length > 0 &&\r\n    xTickValues[xTickValues.length - 1] !== lastCol &&\r\n    (lastCol - xTickValues[xTickValues.length - 1]) * colSpacing >= bottomLabelFootprint + 1\r\n  ) {\r\n    xTickValues.push(lastCol);\r\n  }\r\n\r\n  // Row labels are horizontal, so their vertical footprint is the font height\r\n  const rowSpacing = innerHeight / Math.max(rowIndices.length, 1);\r\n  let yLabelStep = Math.max(1, Math.ceil((labelFontSizeRight + 1) / rowSpacing));\r\n  // Prefer slightly smaller text over skipping labels when that lets every label fit\r\n  if (yLabelStep > 1) {\r\n    const fitFont = rowSpacing - 0.5;\r\n    if (fitFont >= 6.5) {\r\n      labelFontSizeRight = fitFont;\r\n      yLabelStep = 1;\r\n    }\r\n  }\r\n  const yTickValues = rowIndices.filter(i => i % yLabelStep === 0);\r\n  // Append the final label only when it won't collide with the previous tick\r\n  const lastRow = rowIndices[rowIndices.length - 1];\r\n  if (\r\n    rowIndices.length > 0 &&\r\n    yTickValues[yTickValues.length - 1] !== lastRow &&\r\n    (lastRow - yTickValues[yTickValues.length - 1]) * rowSpacing >= labelFontSizeRight + 1\r\n  ) {\r\n    yTickValues.push(lastRow);\r\n  }\r\n\r\n  let x_scale = d3.scaleBand()\r\n    .domain(colIndices)\r\n    .range([0, innerWidth])\r\n    .padding(0)\r\n\r\n  let y_scale = d3.scaleBand()\r\n    .domain(rowIndices)\r\n    .range([0, innerHeight])\r\n    .padding(0)\r\n\r\n\r\n  // index of the rows based on cluster hierarchy\r\n  const svg = d3.create(\"svg\");\r\n\r\n  // Set SVG size \r\n  svg\r\n    .attr('width', width)\r\n    .attr('height', height);\r\n\r\n  // Solid white background to ensure white behind dendrograms/heatmap\r\n  svg.append('rect')\r\n    .attr('x', 0)\r\n    .attr('y', 0)\r\n    .attr('width', width)\r\n    .attr('height', height)\r\n    .attr('fill', '#ffffff');\r\n\r\n  // Zoom wrapper (standalone mode only): hclust embeds this heatmap, applies its own\r\n  // zoom and extracts the first <g>, so no wrapper may be added when mountToDOM=false.\r\n  const useZoom = mountToDOM && zoomable;\r\n  const zoomHost = useZoom ? svg.append('g').attr('class', 'zoom-layer') : svg;\r\n  if (useZoom) attachPlotZoom(svg, zoomHost, { enabled: true });\r\n\r\n  // Optional title, centered over the heatmap area (shared style; inside the zoom\r\n  // layer so it moves with the plot)\r\n  addPlotTitle(zoomHost, title, margin.left + innerWidth / 2, Math.max(20, margin.top - 12));\r\n\r\n  const g = zoomHost\r\n    .append('g')\r\n    // move the entire graph down and right to accomodate labels\r\n    .attr('transform', `translate(${margin.left}, ${margin.top})`)\r\n\r\n  //create x axis plus text labels (at bottom of heatmap)\r\n  const x_axis = g.append('g')\r\n    .attr('transform', `translate(0, ${innerHeight})`)\r\n    .call(d3.axisBottom(x_scale)\r\n      .tickValues(xTickValues)\r\n      .tickFormat(i => trimmedColnames[i]))\r\n    .style(\"font-size\", labelFontSizeBottom + \"px\");\r\n\r\n\r\n  x_axis.selectAll('.tick').selectAll('line').remove()\r\n  const isVerticalBottomLabel = Math.abs(bottomLabelAngle) === 90;\r\n  x_axis.selectAll(\"text\")\r\n    .style(\"text-anchor\", bottomLabelAngle === 0 ? \"middle\" : \"end\")\r\n    // d3 axisBottom sets y=9 on tick text; after a 90° rotation that becomes a\r\n    // horizontal shift, pushing labels off their cell centers — zero it out and\r\n    // center the glyph body on the tick with dy instead.\r\n    .attr(\"y\", isVerticalBottomLabel ? 0 : 9)\r\n    .attr(\"x\", isVerticalBottomLabel ? -4 : 0)\r\n    .attr(\"dx\", bottomLabelAngle === 0 ? \"0px\" : (isVerticalBottomLabel ? \"0px\" : \"-2px\"))\r\n    .attr(\"dy\", bottomLabelAngle === 0 ? \"0.9em\" : (isVerticalBottomLabel ? \"0.35em\" : \"0.3em\"))\r\n    .attr(\"class\", \"xa\")\r\n    .attr(\"transform\", `rotate(${bottomLabelAngle})`)\r\n    .style(\"fill\", \"#000\")\r\n\r\n  //create y axis  plus text labels (at right of heatmap)\r\n  let y_axis = g.append('g')\r\n    .attr('transform', `translate( ${innerWidth},0)`)\r\n    .call(d3.axisRight(y_scale)\r\n      .tickValues(yTickValues)\r\n      .tickFormat(i => trimmedRownames[i]))\r\n    .attr(\"id\", \"ya\")\r\n    .style(\"font-size\", labelFontSizeRight + \"px\");\r\n\r\n  y_axis.selectAll('.tick').selectAll('line').remove()\r\n  y_axis.selectAll(\"text\")\r\n    .attr(\"dx\", \"3px\")\r\n    .attr(\"dy\", \"0.3em\")\r\n    .attr(\"class\", \"yaa\")\r\n    .style(\"text-anchor\", \"start\")\r\n    .style(\"fill\", \"#000\")\r\n\r\n\r\n  // interactive labels\r\n  const tooltip = d3tip()\r\n    .style('border', 'solid 3px black')\r\n    .style('background-color', 'white')\r\n    .style('color', '#000')\r\n    .style('border-radius', '10px')\r\n    .style('float', 'left')\r\n    .style('font-family', tooltip_fontFamily)\r\n    .style(\"font-size\", tooltip_fontSize)\r\n    .html((event, d) => `\r\n        <div style='float: right; color: #000;'>\r\n           val:${d.value.toFixed(tooltip_decimal)} <br/>\r\n             row:${rowNames[d.n]}, col:${(colNames[d.t])} \r\n        </div>`)\r\n  svg.call(tooltip)\r\n\r\n  // create heatmap squares\r\n  const heatMapData = await buildData(data)\r\n\r\n  const gPoints = g.append(\"g\").attr(\"class\", \"gPoints\");\r\n\r\n\r\n  function getHeatmapColor(v, color_scale) {\r\n  if (v === missingValue || !Number.isFinite(v)) return missingColor;\r\n  return color_scale(v);\r\n}\r\n\r\n  gPoints.selectAll()\r\n    .data(heatMapData)\r\n    .enter()\r\n    .append('rect')\r\n    .attr('x', (d) => x_scale(d.t))\r\n    .attr('y', (d) => y_scale(d.n))\r\n    .attr('width', x_scale.bandwidth())\r\n    .attr('height', y_scale.bandwidth())\r\n    .attr('fill', (d) => getHeatmapColor(d.value, color_scale))\r\n    // show the tooltip when \"mouseover\"\r\n    .on('mouseover', tooltip.show)\r\n    // Hide the tooltip when \"mouseout\"\r\n    .on('mouseout', tooltip.hide)\r\n\r\n  // Optional highlight: outline the selected rows/cols in violet, like hclust's\r\n  // branch selection. Non-contiguous selections get one box per contiguous run.\r\n  const HIGHLIGHT = \"#7c3aed\"; // same vivid violet as hclust\r\n  const rowHi = Array.isArray(highlightRows) && highlightRows.length ? highlightRows : null;\r\n  const colHi = Array.isArray(highlightCols) && highlightCols.length ? highlightCols : null;\r\n  if (rowHi || colHi) {\r\n    // group sorted indices into contiguous runs, e.g. [1,2,3,7,8] -> [[1,3],[7,8]]\r\n    const runs = idx => {\r\n      const sorted = [...new Set(idx)].sort((a, b) => a - b);\r\n      const out = [];\r\n      for (const i of sorted) {\r\n        const last = out[out.length - 1];\r\n        if (last && i === last[1] + 1) last[1] = i;\r\n        else out.push([i, i]);\r\n      }\r\n      return out;\r\n    };\r\n    const rowRuns = rowHi ? runs(rowHi) : [[0, data.length - 1]];\r\n    const colRuns = colHi ? runs(colHi) : [[0, (data[0]?.length ?? 1) - 1]];\r\n    const bands = g.append(\"g\").attr(\"class\", \"heatmap-highlight\");\r\n    for (const [r0, r1] of rowRuns) {\r\n      for (const [c0, c1] of colRuns) {\r\n        bands.append(\"rect\")\r\n          .attr(\"x\", x_scale(c0))\r\n          .attr(\"y\", y_scale(r0))\r\n          .attr(\"width\", x_scale(c1) + x_scale.bandwidth() - x_scale(c0))\r\n          .attr(\"height\", y_scale(r1) + y_scale.bandwidth() - y_scale(r0))\r\n          .attr(\"fill\", \"none\")\r\n          .attr(\"stroke\", HIGHLIGHT)\r\n          .attr(\"stroke-width\", 3)\r\n          .style(\"pointer-events\", \"none\");\r\n      }\r\n    }\r\n    // Emphasize the selected labels in the same violet\r\n    if (colHi) {\r\n      const set = new Set(colHi);\r\n      x_axis.selectAll(\"text\")\r\n        .style(\"fill\", i => (set.has(i) ? HIGHLIGHT : \"#000\"))\r\n        .style(\"font-weight\", i => (set.has(i) ? \"bold\" : null));\r\n    }\r\n    if (rowHi) {\r\n      const set = new Set(rowHi);\r\n      y_axis.selectAll(\"text\")\r\n        .style(\"fill\", i => (set.has(i) ? HIGHLIGHT : \"#000\"))\r\n        .style(\"font-weight\", i => (set.has(i) ? \"bold\" : null));\r\n    }\r\n  }\r\n\r\n\r\n     // Color legend on the right side (START)\r\n    const legendWidth = 30;\r\n    const legendHeight = Math.max(innerHeight / 2, 60); // Half the heatmap height, minimum 60px\r\n    const legendX = innerWidth + margin.right/2 + legendOffsetX; // Position after right axis labels\r\n    // console.log(\"margin.right:\", margin.right)\r\n    // Move legend one fourth of the heatmap (inner) height down\r\n    const legendY = innerHeight / 3;//0\r\n\r\n    // Create 5 discrete color boxes\r\n    const minVal = derivedScale[0];\r\n    const maxVal = derivedScale[1];\r\n    const range = maxVal - minVal;\r\n\r\n    // Create gradient definition\r\n    const gradientId = \"legend-gradient-\" + Math.random().toString(36).substr(2, 9);\r\n    const defs = svg.append(\"defs\");\r\n    const gradient = defs.append(\"linearGradient\")\r\n        .attr(\"id\", gradientId)\r\n        .attr(\"x1\", \"0%\")\r\n        .attr(\"y1\", \"100%\") // bottom (low values)\r\n        .attr(\"x2\", \"0%\")\r\n        .attr(\"y2\", \"0%\"); // top (high values)\r\n\r\n    // Derive legend colors from colorScale if provided, otherwise use color array\r\n const numStops = 20;\r\nfor (let i = 0; i <= numStops; i++) {\r\n  const t = i / numStops;\r\n  const value = derivedScale[0] + t * (derivedScale[1] - derivedScale[0]);\r\n\r\n  gradient.append(\"stop\")\r\n    .attr(\"offset\", `${t * 100}%`)\r\n    .attr(\"stop-color\", color_scale(value));\r\n}\r\n\r\n    // Draw gradient rectangle\r\n    g.append(\"rect\")\r\n        .attr(\"x\", legendX)\r\n        .attr(\"y\", legendY)\r\n        .attr(\"width\", legendWidth)\r\n        .attr(\"height\", legendHeight)\r\n        .style(\"fill\", `url(#${gradientId})`)\r\n        .style(\"stroke\", \"#000\")\r\n        .style(\"stroke-width\", \"1px\");\r\n\r\n    // Legend axis (scale for the values)\r\n    const legendScale = d3.scaleLinear()\r\n        .domain(derivedScale)\r\n        .range([legendHeight, 0]);\r\n\r\n    // Create 5 tick values for the legend\r\n    const numBoxes = 5;\r\n    const legendTickValues = [];\r\n    for (let i = 0; i < numBoxes; i++) {\r\n        legendTickValues.push(minVal + (i / (numBoxes - 1)) * range);\r\n    }\r\n\r\n    const legendAxis = d3.axisRight(legendScale)\r\n        .tickValues(legendTickValues)\r\n        .tickFormat(d3.format(\".2f\"));\r\n\r\n    const legendAxisG = g.append(\"g\")\r\n        .attr(\"transform\", `translate(${legendX + legendWidth}, ${legendY})`)\r\n        .call(legendAxis)\r\n        .style(\"font-size\", \"14px\");\r\n\r\n    // Ensure tick text is visible with black fill\r\n    legendAxisG.selectAll(\"text\")\r\n        .style(\"fill\", \"#000\");\r\n\r\n    legendAxisG.selectAll(\"line\")\r\n        .style(\"stroke\", \"#000\");\r\n\r\n    legendAxisG.selectAll(\"path\")\r\n        .style(\"stroke\", \"#000\");\r\n\r\n\r\n// small black box labeled “Missing”:\r\ng.append(\"rect\")\r\n  .attr(\"x\", legendX)\r\n  .attr(\"y\", legendY + legendHeight + 20)\r\n  .attr(\"width\", 15)\r\n  .attr(\"height\", 15)\r\n  .attr(\"fill\", missingColor);// missing cell color\r\n\r\ng.append(\"text\")\r\n  .attr(\"x\", legendX + 20)\r\n  .attr(\"y\", legendY + legendHeight + 32)\r\n  .text(Number.isFinite(missingValue) ? `Missing (${missingValue})` : \"Missing\")\r\n  .style(\"font-size\", \"12px\")\r\n  .style(\"fill\", \"#000\");\r\n\r\n    // Color legend on the right side (END)\r\n// END HEATMAP #########################################\r\n\r\n\r\n  // Here we add the svg to the plot div\r\n  // Check if the div was provided in the function call\r\n  const svgNode = svg.node();\r\n\r\n  // Tear down DOM side effects of this instance: the d3-tip node lives on document.body\r\n  // and would otherwise leak on every re-render. Safe to call multiple times.\r\n  svgNode.heatmap = {\r\n    destroy: () => {\r\n      try { tooltip.destroy(); } catch (err) { /* already removed */ }\r\n    }\r\n  };\r\n\r\n  if (mountToDOM) {\r\n    let div = document.getElementById(targetDivId);\r\n    if (div) {\r\n      if (debug) console.log(`plot div provided in function parameters.divId:`, targetDivId);\r\n    } else {\r\n      div = document.createElement(\"div\");\r\n      if (targetDivId) div.id = targetDivId;\r\n      const plotsPanel = document.getElementById(\"plotsPanel\");\r\n      (plotsPanel || document.body).appendChild(div);\r\n    }\r\n    // Destroy any previous heatmap mounted in this div so its body-level tooltip\r\n    // node doesn't accumulate across re-renders.\r\n    div.querySelectorAll(\"svg\").forEach(node => {\r\n      if (node.heatmap && typeof node.heatmap.destroy === \"function\") node.heatmap.destroy();\r\n    });\r\n    div.innerHTML = \"\";\r\n    div.appendChild(svgNode);\r\n  }\r\n\r\n\r\n  return svgNode\r\n}\r\n","// import {  d3 } from './imports.js'\r\n\r\n\r\n\r\nconst csvToJson =  async function (csv) {\r\n// console.log(\"function info:\", csv)\r\n  const lines = csv.split(/\\r?\\n/);\r\n  // //console.log(\"lines\", lines)\r\n  const headers = lines[0].split(',');\r\n  // //console.log(\"headers\", headers)\r\n  const result = [];\r\n  result.headers = headers;\r\n\r\n  for (let i = 1; i < lines.length - 1; i++) {\r\n    const obj = {};\r\n    const currentLine = lines[i].split(',');\r\n\r\n    for (let j = 0; j < headers.length; j++) {\r\n      obj[headers[j]] = convertStrToNumber(currentLine[j])\r\n    }\r\n    result.push(obj);\r\n  }\r\n  // //console.log(\"result\", result)\r\n  return result;\r\n}\r\n\r\nconst convertStrToNumber = function (str) {\r\n  // Check if the string is empty or null\r\n  if (isNaN(str)) {\r\n    return str; // It's a letter or other non-numeric character, return the original string\r\n  } else {\r\n    return Number(str); // It's a number (or can be converted to one), so convert it\r\n  }\r\n}\r\n\r\nconst removeNonNumbers = function (arr) {\r\n  return arr.filter(element => typeof element === 'number');\r\n}\r\n\r\nconst removeNumbers = function (arr) {\r\n  return arr.filter(element => typeof element !== 'number');\r\n}\r\n\r\nconst removeNonNumberValues = function (ob) {\r\n  return ob.map(obj => {\r\n    const newObj = {};\r\n    for (const key in obj) {\r\n      if (typeof obj[key] === 'number') {\r\n        newObj[key] = obj[key];\r\n      }\r\n    }\r\n    return newObj;\r\n  });\r\n}\r\n\r\nconst removeNumberValues = function (ob) {\r\n  return ob.map(obj => {\r\n    const newObj = {};\r\n    for (const key in obj) {\r\n      if (typeof obj[key] !== 'number') {\r\n        newObj[key] = obj[key];\r\n      }\r\n    }\r\n    return newObj;\r\n  });\r\n}\r\n\r\nconst asDataFrame = function (value) {\r\n  //  //console.log(\"value\",value)\r\n  // check if value is array of objects (aoo)\r\n  if (value === undefined || value === null)\r\n    throw new Error(\"No data passed to function.\");\r\n  if (\r\n    !Array.isArray(value) ||\r\n    typeof value[0] !== \"object\" ||\r\n    value[0] === null\r\n  ) {\r\n    throw new Error(\"First argument must be an array of objects\");\r\n  }\r\n\r\n  const aoo = value;\r\n  // columns: if parsed using d3, the aoo will already have a columns prop\r\n  // -> create it otherwise\r\n  if (!value.columns) {\r\n    const set = new Set();\r\n    for (const row of aoo) {\r\n      for (const key of Object.keys(row)) set.add(key);\r\n    }\r\n    aoo.columns = [...set];\r\n  }\r\n  // create getters and setters for columns\r\n  aoo.columns.forEach((column) => {\r\n    if (!Object.getOwnPropertyDescriptor(aoo, column)) {\r\n      Object.defineProperty(aoo, column, {\r\n        get: function () {\r\n          return this.map((row) => row[column]);\r\n        },\r\n        set: function (array) {\r\n          if (!array) {\r\n            throw new Error(`No data passed to set ${column} column.`);\r\n          }\r\n          if (array.length !== this.length) {\r\n            throw new Error(\r\n              `Data length (${array.length}) different from column ${column} length (${this.length}).`\r\n            );\r\n          }\r\n          this.forEach((row, index) => (row[column] = array[index]));\r\n        }\r\n      });\r\n    }\r\n  });\r\n  return aoo;\r\n}\r\n\r\nconst scale = async function (Objects) {\r\n  //console.log(\"function info:\",pca.scale.toString())\r\n  //Standardization (Z-score transformation)\r\n  //Subtract the mean (μ) from each data point (x)\r\n  //divide each result by the standard deviation (σ)\r\n\r\n  const d3 = await import(\"d3\");\r\n\r\n  const clone = JSON.parse(JSON.stringify(Objects));\r\n  const df = asDataFrame(clone);\r\n  df.columns.forEach((column) => {\r\n    const values = df[column];\r\n    const mean = d3.mean(values);\r\n    const sd = d3.deviation(values);\r\n    df[column] = values.map((v) => {\r\n      if (v !== null && v !== undefined) {\r\n        return (v - mean) / sd;\r\n      }\r\n      return v;\r\n    });\r\n  });\r\n  return df;\r\n}\r\n\r\nconst createTableFromCSV = async function (csvData, tableId) {\r\n  // console.log(\"csvData:\", csvData);\r\n  const table = document.getElementById(tableId);\r\n  table.innerHTML = \"\"; // Clear existing table content\r\n  const rows = csvData.split(\"\\n\");\r\n// console.log(\"rows\", rows)\r\n  for (const row of rows) {\r\n    const cells = row.split(\",\");\r\n    const tr = document.createElement(\"tr\");\r\n\r\n    for (const cell of cells) {\r\n      const td = document.createElement(\"td\");\r\n      td.textContent = cell;\r\n      tr.appendChild(td);\r\n    }\r\n    table.appendChild(tr);\r\n  }\r\n}\r\n\r\nconst textBox = async function ( options = {}) {\r\n\r\n  const {\r\n    text: text = \"No text provided\",\r\n    divId: divId = \"\",\r\n    width: width = 460, //\"auto\",\r\n    height: height = 150, //\"auto\",\r\n    border: border = \"2px solid\",\r\n    color: color = \"red\", //\"auto\",\r\n  } = options;\r\n  const targetDivId = divId;\r\n\r\n// console.log(\"textBox options\", options)\r\n  // check if textbox div was provided in the function call\r\n  if (document.getElementById(targetDivId)) {\r\n    console.log(`textbox div provided in function parameters.`);\r\n    const div = document.getElementById(targetDivId)\r\n    div.id = targetDivId\r\n    div.style.display = \"block\"\r\n    div.style.overflow = \"auto\"\r\n    div.style.width = width + 'px'\r\n    div.style.height = height + 'px'\r\n    div.style.border = border + \" \" + color//\"2px solid blue\"\r\n    div.style.resize = \"both\"\r\n    div.style.boxSizing = \"border-box\"\r\n    div.style.margin = \"8px 0\"\r\n\r\n    //  console.log(\"div\",div);\r\n\r\n    createTableFromCSV(text, targetDivId)\r\n\r\n    // update textbox content\r\n  } else if (document.getElementById(\"textboxDiv\")) {\r\n    console.log(`textbox div exists. updating contents...`);\r\n    createTableFromCSV(text, \"textboxDiv\")\r\n\r\n  } else {\r\n    // Create a new table element (use provided id if given, else fallback)\r\n    const targetId = targetDivId || \"textboxDiv\";\r\n    console.log(`textbox div NOT provided or not found. creating element with id: ${targetId}`);\r\n    const tbl = document.createElement(\"table\")\r\n    tbl.id = targetId\r\n    document.body.appendChild(tbl);\r\n\r\n    createTableFromCSV(text, targetId)\r\n    tbl.style.display = \"block\"\r\n    tbl.style.overflow = \"auto\"\r\n    tbl.style.width = width + 'px'\r\n    tbl.style.height = height + 'px'\r\n    tbl.style.border = border + \" \" + color\r\n    tbl.style.resize = \"both\"\r\n    tbl.style.boxSizing = \"border-box\"\r\n    tbl.style.margin = \"8px 0\"\r\n\r\n  }\r\n\r\n  return document.getElementById(targetDivId || \"textboxDiv\")\r\n}\r\n\r\n\r\n// let irisJSON \r\n// // retreive built-in iris dataset\r\n//  await fetch('./sampleData/iris.csv')\r\n//     .then(response => response.text())\r\n//     .then(async response =>  {irisJSON =  await csvToJson(response)\r\n//         // console.log(\"response\", response)\r\n//     })\r\n\r\n// let irisCSV\r\n// // retreive built-in iris dataset\r\n//  await fetch('./sampleData/iris.csv')\r\n//     .then(response => response.text())\r\n//     .then(async response =>  {irisCSV =  response\r\n//         // console.log(\"response\", response)\r\n//     })\r\n\r\nexport {\r\n  // irisJSON,\r\n  // irisCSV,\r\n  csvToJson,\r\n  convertStrToNumber,\r\n  removeNonNumbers,\r\n  removeNumbers,\r\n  removeNonNumberValues,\r\n  removeNumberValues,\r\n  asDataFrame,\r\n  scale,\r\n  createTableFromCSV,\r\n  textBox\r\n}","import * as d3 from \"d3\";\r\nimport d3tip from \"d3-tip\";\r\nimport * as hclust from \"ml-hclust\";\r\nimport irisData from \"./data/irisData.js\";\r\nimport {\r\n    heatmap_plot\r\n} from \"./heatmap.mjs\";\r\nimport {\r\n    csvToJson\r\n} from \"./otherFunctions.js\";\r\nimport { addPlotTitle } from \"./plotTitle.mjs\";\r\nimport { attachPlotZoom } from \"./plotZoom.mjs\";\r\n// TODO: save scores not data in loacal sstorage\r\n// TODO: fix padding for left and right dendograms\r\n// TODO: reset/clear plots when variables are selected or deselected\r\n// TODO: call heat_map from heatmap.mjs\r\n// TODO: make pairs plot for scatter, bc only two first features are used\r\n// TODO: add t-SNE and 3D UMAP plot\r\n// TODO: adjust top dendogram to text label width\r\n// TODO: scatter plot add row number to hover label e species setosa_12\r\n// fix dendo for spiral, decrease spiral data\r\nexport const hclustDt = {\r\n    data: {\r\n        divNum: 1,\r\n        iris: {\r\n            json: irisData,\r\n            csv: null // Will be generated on demand\r\n        },\r\n        file: {\r\n            json: null,\r\n            csv: null\r\n        }\r\n    }\r\n}\r\n\r\n\r\n// heatmap auxiliary functions, convert a matrix to a data array\r\n// const buildData = async function (matrix) {\r\n//     let array = []\r\n//     d3.range(matrix.length).map((d) => {\r\n//         const o = d3.range(matrix[0].length).map((t) => ({\r\n//             t: t,\r\n//             n: d,\r\n//             value: matrix[d][t]\r\n//         }))\r\n//         array = [...array, ...o]\r\n//     })\r\n//     return array\r\n// }\r\n\r\nconst transpose = m => m[0].map((x, i) => m.map(x => x[i])) // for dendograms\r\n\r\n// Exported for unit testing (pure function, no DOM).\r\nexport const toFiniteNumber = value => {\r\n    if (typeof value === \"number\") {\r\n        return Number.isFinite(value) ? value : null;\r\n    }\r\n\r\n    if (typeof value === \"string\" && value.trim() !== \"\") {\r\n        const parsedValue = Number(value);\r\n        return Number.isFinite(parsedValue) ? parsedValue : null;\r\n    }\r\n\r\n    return null;\r\n}\r\n\r\n// Exported for unit testing (pure function, no DOM).\r\nexport const extractHclustInput = ({\r\n    data,\r\n    rowNames,\r\n    colNames\r\n}) => {\r\n    if (!Array.isArray(data) || data.length === 0) {\r\n        throw new Error(\"hclust_plot() requires a non-empty data array.\");\r\n    }\r\n\r\n    if (Array.isArray(data[0])) {\r\n        return {\r\n            data: data.map(row => row.map(value => toFiniteNumber(value))),\r\n            rowNames,\r\n            colNames\r\n        };\r\n    }\r\n\r\n    if (typeof data[0] !== \"object\" || data[0] === null) {\r\n        throw new Error(\"hclust_plot() data must be an array of arrays or an array of objects.\");\r\n    }\r\n\r\n    const keys = Object.keys(data[0]);\r\n    const numericColumnNames = keys.filter(key => data.some(row => toFiniteNumber(row[key]) !== null));\r\n\r\n    if (numericColumnNames.length === 0) {\r\n        throw new Error(\"hclust_plot() could not find any numeric columns in the provided data.\");\r\n    }\r\n\r\n    const textColumnNames = keys.filter(key => data.some(row => typeof row[key] === \"string\" && row[key].trim() !== \"\"));\r\n    const textColumnName = textColumnNames.length === 1 ? textColumnNames[0] : null;\r\n\r\n    return {\r\n        data: data.map(row => numericColumnNames.map(key => {\r\n            return toFiniteNumber(row[key]);\r\n        })),\r\n        rowNames: rowNames ?? (textColumnName ? data.map((row, idx) => `${row[textColumnName]}${idx}`) : rowNames),\r\n        colNames: colNames ?? numericColumnNames\r\n    };\r\n}\r\n\r\n// Exported for unit testing (pure function, no DOM).\r\nexport const resolveMissingFilterIndices = (matrix, removeMissingBy = \"none\") => {\r\n    const rowIndices = d3.range(matrix.length);\r\n    const colIndices = d3.range(matrix[0]?.length ?? 0);\r\n\r\n    if (removeMissingBy === \"row\") {\r\n        return {\r\n            keptRowIndices: rowIndices.filter(rowIndex => matrix[rowIndex].every(value => value !== null)),\r\n            keptColIndices: colIndices\r\n        };\r\n    }\r\n\r\n    if (removeMissingBy === \"col\") {\r\n        return {\r\n            keptRowIndices: rowIndices,\r\n            keptColIndices: colIndices.filter(colIndex => matrix.every(row => row[colIndex] !== null))\r\n        };\r\n    }\r\n\r\n    return {\r\n        keptRowIndices: rowIndices,\r\n        keptColIndices: colIndices\r\n    };\r\n}\r\n\r\nconst materializeHclustInput = ({\r\n    normalized,\r\n    keptRowIndices,\r\n    keptColIndices,\r\n    missingFill = null\r\n}) => ({\r\n    data: keptRowIndices.map(rowIndex => keptColIndices.map(colIndex => {\r\n        const value = normalized.data[rowIndex][colIndex];\r\n        return (value === null || !Number.isFinite(value)) ? missingFill : value;\r\n    })),\r\n    rowNames: Array.isArray(normalized.rowNames)\r\n        ? keptRowIndices.map(rowIndex => normalized.rowNames[rowIndex])\r\n        : normalized.rowNames,\r\n    colNames: Array.isArray(normalized.colNames)\r\n        ? keptColIndices.map(colIndex => normalized.colNames[colIndex])\r\n        : normalized.colNames\r\n})\r\n\r\n// Stage 1 (R's scale()): standardize each column using its OBSERVED values only.\r\n// The mean and the sample standard deviation (n - 1 denominator, via d3.deviation) are\r\n// computed from finite entries; missing entries stay null so an NA never becomes a number.\r\n// Exported for unit testing (pure function, no DOM).\r\nexport const scaleMatrixColumns = matrix => {\r\n    const rowCount = matrix.length;\r\n    const colCount = matrix[0]?.length ?? 0;\r\n\r\n    const columnStats = d3.range(colCount).map(colIndex => {\r\n        const observed = [];\r\n        for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\r\n            const value = matrix[rowIndex][colIndex];\r\n            if (value !== null && Number.isFinite(value)) observed.push(value);\r\n        }\r\n        return {\r\n            mean: observed.length > 0 ? d3.mean(observed) : 0,\r\n            sd: observed.length > 1 ? d3.deviation(observed) : 0\r\n        };\r\n    });\r\n\r\n    return matrix.map(row => row.map((value, colIndex) => {\r\n        if (value === null || !Number.isFinite(value)) return null;\r\n        const { mean, sd } = columnStats[colIndex];\r\n        // R-like: a zero/undefined SD (constant column) cannot produce a valid z-score, so the\r\n        // value becomes missing (null) and is excluded from every pairwise distance.\r\n        return sd > 0 ? (value - mean) / sd : null;\r\n    }));\r\n};\r\n\r\n// Distance metrics supported by the missing-aware pairwise calculation. Anything else is\r\n// rejected rather than silently treated as Euclidean (which would give wrong results for\r\n// e.g. \"maximum\" or \"canberra\").\r\nexport const SUPPORTED_DISTANCE_METRICS = new Set([\"euclidean\", \"manhattan\", \"cityblock\"]);\r\n\r\n// Agglomeration methods accepted by ml-hclust's agnes(). Validated up front so a typo fails\r\n// with a clear hclust_plot() error instead of a RangeError from deep inside the library.\r\nexport const SUPPORTED_CLUSTERING_METHODS = new Set([\r\n    \"single\", \"complete\", \"average\", \"upgma\", \"wpgma\",\r\n    \"centroid\", \"upgmc\", \"median\", \"wpgmc\", \"ward\", \"ward2\"\r\n]);\r\n\r\nconst assertClusteringMethod = (method, optionName) => {\r\n    // ml-hclust also accepts a custom update function; pass those through untouched.\r\n    if (typeof method === \"function\") return;\r\n    if (typeof method !== \"string\" || !SUPPORTED_CLUSTERING_METHODS.has(method.toLowerCase())) {\r\n        throw new Error(`hclust_plot(): unsupported ${optionName} \"${method}\". Supported methods: ${[...SUPPORTED_CLUSTERING_METHODS].join(\", \")}.`);\r\n    }\r\n};\r\n\r\n// Stage 2: build a full symmetric distance matrix using R's missing-value convention.\r\n// Only dimensions observed in BOTH rows contribute; the accumulated difference is rescaled\r\n// by P / q (total dimensions / jointly-observed dimensions) to compensate for the missing\r\n// comparisons: d_ij = sqrt( (P / q_ij) * sum_{k in O_ij} (z_ik - z_jk)^2 ) for euclidean.\r\n// Like R's dist(), a pair with no (or insufficient) jointly-observed dimensions yields NA;\r\n// rather than invent a distance we stop with an error before clustering.\r\n// Exported for unit testing (pure function, no DOM).\r\nexport const pairwiseDistanceMatrix = (matrix, metric = \"euclidean\", minOverlapRatio = 0) => {\r\n    if (!SUPPORTED_DISTANCE_METRICS.has(metric)) {\r\n        throw new Error(`hclust_plot(): unsupported distance metric \"${metric}\". Supported metrics: ${[...SUPPORTED_DISTANCE_METRICS].join(\", \")}.`);\r\n    }\r\n\r\n    const rowCount = matrix.length;\r\n    const totalDims = matrix[0]?.length ?? 0; // P\r\n    const isManhattan = metric === \"manhattan\" || metric === \"cityblock\";\r\n\r\n    // Pre-extract each row into a Float64Array with NaN marking missing values: the O(n²·p)\r\n    // hot loop then needs a single self-equality check (NaN !== NaN) per value instead of\r\n    // null + isFinite tests on polymorphic array entries.\r\n    const rows = matrix.map(row => Float64Array.from(row, value =>\r\n        (value === null || !Number.isFinite(value)) ? NaN : value));\r\n\r\n    const distances = Array.from({ length: rowCount }, () => new Array(rowCount).fill(0));\r\n    let unavailablePairCount = 0;\r\n\r\n    for (let i = 0; i < rowCount; i++) {\r\n        const rowI = rows[i];\r\n        for (let j = i + 1; j < rowCount; j++) {\r\n            const rowJ = rows[j];\r\n            let accumulated = 0;\r\n            let shared = 0; // q_ij: dimensions observed in both rows\r\n\r\n            for (let k = 0; k < totalDims; k++) {\r\n                const a = rowI[k];\r\n                const b = rowJ[k];\r\n                // A dimension participates only when BOTH rows observed it (NaN fails a === a).\r\n                if (a !== a || b !== b) continue;\r\n                const diff = a - b;\r\n                accumulated += isManhattan ? Math.abs(diff) : diff * diff;\r\n                shared++;\r\n            }\r\n\r\n            const overlapRatio = totalDims > 0 ? shared / totalDims : 0;\r\n            // shared === 0 is exact R behavior (dist() returns NA). The min overlap ratio is a\r\n            // stricter, opt-in extension; either way the pair is unavailable, not a real distance.\r\n            if (shared === 0 || overlapRatio < minOverlapRatio) {\r\n                unavailablePairCount++;\r\n                distances[i][j] = NaN;\r\n                distances[j][i] = NaN;\r\n                continue;\r\n            }\r\n\r\n            const correction = totalDims / shared; // P / q\r\n            const value = isManhattan\r\n                ? correction * accumulated\r\n                : Math.sqrt(correction * accumulated);\r\n            distances[i][j] = value;\r\n            distances[j][i] = value;\r\n        }\r\n    }\r\n\r\n    // Matching R's dist(), refuse to cluster on invented distances: if any pair has no (or\r\n    // insufficient) jointly-observed dimensions, stop rather than fabricate a value.\r\n    if (unavailablePairCount > 0) {\r\n        throw new Error(`hclust_plot(): ${unavailablePairCount} pair(s) have no sufficient jointly-observed values; cannot compute a valid distance matrix.`);\r\n    }\r\n\r\n    return distances;\r\n};\r\n\r\n\r\n\r\nexport async function hclust_plot(options = {}) {\r\n    // console.log(\"RUNNING hclust_plot()-------------------------------\")\r\n\r\n    const {\r\n        divId: divId = \"\",\r\n        data: rawData = irisData,\r\n        displayData: rawDisplayData = null,\r\n        rowNames: inputRowNames,\r\n        colNames: inputColNames,\r\n        width: inputWidth,\r\n        height: inputHeight,\r\n        // dendograms\r\n        clusterCols: clusterCols = true,\r\n        clusterRows: clusterRows = true,\r\n        clusteringDistanceRows: clusteringDistanceRows = \"euclidean\",\r\n        clusteringDistanceCols: clusteringDistanceCols = \"euclidean\",\r\n        clusteringMethodCols: clusteringMethodCols = \"complete\",\r\n        clusteringMethodRows: clusteringMethodRows = \"complete\",\r\n        title: title = \"Hierarchical Clustering\", // string, or null/\"\" to hide\r\n        marginTop: marginTopInput = clusterCols ? 100 : 53, // top margin (100) increased to accomodate top dendogram\r\n        marginRight: marginRight = 0,\r\n        marginBottom: marginBottom = 0,\r\n        marginLeft: marginLeft = clusterRows ? 200 : 80, // left margin (200) increased to accomodate left dendogram\r\n        colPadding: colPadding = clusterCols ? 60 : 0,\r\n        rowPadding: rowPadding = clusterRows ? 15 : 0,\r\n        dendogram_font: dendogram_font = \"14px\",\r\n        // topdendogram color\r\n        colDendoColor: colDendoColor = \"black\",\r\n        // bottomdendogram color\r\n        rowDendoColor: rowDendoColor = \"black\",\r\n        // heatmap color (array of 3 colors: low, middle, high)\r\n        heatmapColor: heatmapColor = ['#4575b4', '#ffffbf', '#d73027'],\r\n        heatmapColorScale: heatmapColorScale = null,\r\n        // sentinel marking missing measurements (normalized to null internally). NOTE: this\r\n        // intentionally differs from heatmap_plot(), whose standalone default is -1.\r\n        missingValue: missingValue = null,\r\n        // fill color for missing heatmap cells (and the \"Missing\" legend swatch)\r\n        missingColor: missingColor = \"#bdbdbd\",\r\n        removeMissingBy: removeMissingBy = \"none\",\r\n        // minimum jointly-observed overlap (q / P) required before a pairwise distance is\r\n        // trusted; pairs below this ratio are treated as unavailable. 0 = no minimum (R behavior).\r\n        minOverlapRatio: minOverlapRatio = 0,\r\n        // when true (default) columns are standardized before clustering, matching R's\r\n        // x_scaled <- scale(x); set false to cluster raw values like base hclust(dist(x)).\r\n        scaleData: scaleData = true,\r\n        // angle (degrees) for bottom column labels; -45 = vertical, -45 = diagonal, 0 = horizontal\r\n        bottomLabelAngle: bottomLabelAngle = -45,\r\n        // maximum characters shown for row/column tick labels before truncation with an ellipsis\r\n        maxLabelLength: maxLabelLength = 20,\r\n        // horizontal pixel offset applied to the color legend (positive moves it right)\r\n        legendOffsetX: legendOffsetX = 10,//25,\r\n        // hover tooltip\r\n        tooltip_decimal: tooltip_decimal = 2,\r\n        tooltip_fontFamily: tooltip_fontFamily = 'monospace',\r\n        tooltip_fontSize: tooltip_fontSize = '14px',\r\n        // interactivity\r\n        interactive: interactive = true,\r\n        zoomable: zoomable = true,\r\n        showResetButton: showResetButton = true,\r\n        hoverHighlight: hoverHighlight = true,\r\n        clickSelect: clickSelect = true,\r\n        // called with the current selection whenever a dendrogram branch is (de)selected:\r\n        // { rowIndices, colIndices, rowNames, colNames }\r\n        onSelectionChange: onSelectionChange = null,\r\n        // called with the current selection when \"Plot selection\" drills down to the subset\r\n        onPlotSelection: onPlotSelection = null,\r\n        // called with the new plot's SVG node whenever the plot re-renders itself\r\n        // (\"Plot selection\" drill-down or \"Show all\"), so callers can re-apply hooks\r\n        onRerender: onRerender = null,\r\n        // when true, prints layout/diagnostic console.log messages\r\n        debug: debug = false,\r\n    } = options;\r\n    const targetDivId = divId;\r\n\r\n    assertClusteringMethod(clusteringMethodRows, \"clusteringMethodRows\");\r\n    assertClusteringMethod(clusteringMethodCols, \"clusteringMethodCols\");\r\n\r\n    // Reserve room above the top dendrogram for the title\r\n    const marginTop = title ? marginTopInput + 28 : marginTopInput;\r\n\r\n\r\n    //Normalize both matrices to ensure they are in the correct format and dimensions match. 'data' is used for clustering and 'displayData' is used for the heatmap (can be the same as 'data' if 'displayData' is not provided).\r\n    const {\r\n        data: rawMatrix,\r\n        rowNames: rawRowNames,\r\n        colNames: rawColNames\r\n    } = extractHclustInput({\r\n        data: rawData,\r\n        rowNames: inputRowNames,\r\n        colNames: inputColNames\r\n    });\r\n\r\n    // Stage 0: normalize the missing-value sentinel (e.g. -1) to null so a missing\r\n    // measurement is never treated as a real number anywhere in the clustering pipeline.\r\n    const nullifySentinel = matrix => (Number.isFinite(missingValue)\r\n        ? matrix.map(row => row.map(value => (value === missingValue ? null : value)))\r\n        : matrix);\r\n\r\n    const nullifiedMatrix = nullifySentinel(rawMatrix);\r\n\r\n    // Stage 1 (optional): scale each column from observed values only (R's scale()); NA stays\r\n    // NA. When scaleData is false we cluster the raw values, like base hclust(dist(x)).\r\n    const preparedMatrix = scaleData ? scaleMatrixColumns(nullifiedMatrix) : nullifiedMatrix;\r\n\r\n    // When no explicit display matrix is supplied we show the prepared (scaled) values, like\r\n    // R's pheatmap(x_scaled); otherwise we display precisely what the caller provided.\r\n    const hasExplicitDisplayData = rawDisplayData !== null && rawDisplayData !== undefined;\r\n    let displaySource;\r\n    if (hasExplicitDisplayData) {\r\n        const {\r\n            data: rawDisplayMatrix,\r\n            rowNames: rawDisplayRowNames,\r\n            colNames: rawDisplayColNames\r\n        } = extractHclustInput({\r\n            data: rawDisplayData,\r\n            rowNames: inputRowNames,\r\n            colNames: inputColNames\r\n        });\r\n\r\n        //Validate dimensions match\r\n        if (\r\n            rawDisplayMatrix.length !== rawMatrix.length ||\r\n            rawDisplayMatrix[0]?.length !== rawMatrix[0]?.length\r\n        ) {\r\n            throw new Error(\"displayData must have the same dimensions as data\");\r\n        }\r\n\r\n        displaySource = {\r\n            data: nullifySentinel(rawDisplayMatrix),\r\n            rowNames: rawDisplayRowNames,\r\n            colNames: rawDisplayColNames\r\n        };\r\n    } else {\r\n        displaySource = {\r\n            data: preparedMatrix,\r\n            rowNames: rawRowNames,\r\n            colNames: rawColNames\r\n        };\r\n    }\r\n\r\n    const {\r\n        keptRowIndices,\r\n        keptColIndices\r\n    } = resolveMissingFilterIndices(nullifiedMatrix, removeMissingBy);\r\n\r\n    if (keptRowIndices.length === 0) {\r\n        throw new Error(`hclust_plot() removeMissingBy=\"${removeMissingBy}\" removed all rows.`);\r\n    }\r\n\r\n    if (keptColIndices.length === 0) {\r\n        throw new Error(`hclust_plot() removeMissingBy=\"${removeMissingBy}\" removed all columns.`);\r\n    }\r\n\r\n    // Clustering matrix keeps missing values as null so Stage 2 can skip them per pair.\r\n    const {\r\n        data,\r\n        rowNames,\r\n        colNames\r\n    } = materializeHclustInput({\r\n        normalized: {\r\n            data: preparedMatrix,\r\n            rowNames: rawRowNames,\r\n            colNames: rawColNames\r\n        },\r\n        keptRowIndices,\r\n        keptColIndices,\r\n        missingFill: null\r\n    });\r\n\r\n    // Heatmap matrix keeps missing values as NaN so those cells render as \"missing\".\r\n    const {\r\n        data: displayData\r\n    } = materializeHclustInput({\r\n        normalized: displaySource,\r\n        keptRowIndices,\r\n        keptColIndices,\r\n        missingFill: Number.NaN\r\n    });\r\n\r\n    const maxAutoSize = 500; // maximum size for auto-scaling to prevent excessively large plots\r\n    const colCount = data[0]?.length ?? 0;\r\n    const rowCount = data.length;\r\n    const autoWidth = Math.min(maxAutoSize, Math.max(400, colCount * 18 + 260));\r\n    const autoHeight = Math.min(maxAutoSize, Math.max(400, rowCount * 16 + 180));\r\n\r\n    const targetDiv = targetDivId ? document.getElementById(targetDivId) : null;\r\n    const clientWidth = targetDiv && Number.isFinite(targetDiv.clientWidth) && targetDiv.clientWidth > 0\r\n        ? targetDiv.clientWidth\r\n        : null;\r\n    const cssWidth = targetDiv\r\n        ? parseFloat(window.getComputedStyle(targetDiv).width)\r\n        : NaN;\r\n    const detectedContainerWidth = clientWidth ?? (Number.isFinite(cssWidth) && cssWidth > 0 ? cssWidth : null);\r\n\r\n    const width = Number.isFinite(inputWidth) && inputWidth > 0\r\n        ? inputWidth\r\n        : (detectedContainerWidth\r\n            ? Math.min(maxAutoSize, Math.max(320, detectedContainerWidth - 24))\r\n            : autoWidth);\r\n    const height = Number.isFinite(inputHeight) && inputHeight > 0 ? inputHeight : autoHeight;\r\n\r\n    if (debug) console.log(\"hclust_plot dimensions:\", { width, height });\r\n\r\n    // 'data' is now the main matrix input\r\n    // console.log(\"hclust_plot() data:\", data)\r\n    // Stage 2: pairwise distance matrices with R-style missing handling (only jointly\r\n    // observed dimensions contribute, rescaled by P / q). Stage 3: agnes/hclust consumes them.\r\n    const colDistanceMatrix = pairwiseDistanceMatrix(transpose(data), clusteringDistanceCols, minOverlapRatio);\r\n    const rowDistanceMatrix = pairwiseDistanceMatrix(data, clusteringDistanceRows, minOverlapRatio);\r\n\r\n    // dendograms--------------------\r\n    const colHclustTree = new hclust.agnes(colDistanceMatrix, {\r\n        method: clusteringMethodCols,\r\n        isDistanceMatrix: true\r\n    })\r\n    const root = d3.hierarchy(colHclustTree)\r\n    const clusterLayout = d3.cluster()\r\n    clusterLayout(root)\r\n    // console.log(\"colHclustTree\", colHclustTree)\r\n\r\n\r\n    const rowHclustTree2 = new hclust.agnes(rowDistanceMatrix, {\r\n        method: clusteringMethodRows,\r\n        isDistanceMatrix: true\r\n    })\r\n    const root2 = d3.hierarchy(rowHclustTree2)\r\n\r\n\r\n    const clusterLayout2 = d3.cluster()\r\n    clusterLayout2(root2)\r\n\r\n    let colIdx = clusterCols ? root.leaves().map(x => x.data.index) : d3.range(data[0].length) //col clust\r\n    // console.log(\"*****************************\")\r\n    // console.log(\"colIdx\", colIdx)\r\n    let rowIdx = clusterRows ? root2.leaves().map(x => x.data.index) : d3.range(data.length) //row clust\r\n    // console.log(\"rowIdx\", rowIdx)\r\n\r\n\r\n    // Reorder rows/columns into dendrogram leaf order for display.\r\n    const displayMatrix = rowIdx.map(r => colIdx.map(c => displayData[r][c]));\r\n\r\n    const validColNames = Array.isArray(colNames) && colNames.length === data[0].length\r\n        ? colNames\r\n        : Array.from(new Array(data[0].length), (x, i) => i + 1)\r\n    const validRowNames = Array.isArray(rowNames) && rowNames.length === data.length\r\n        ? rowNames\r\n        : Array.from(new Array(data.length), (x, i) => i + 1)\r\n\r\n    // reorder col/row Names according to clustering order\r\n    let colNamesClust = colIdx.map(i => validColNames[i])\r\n    let rowNamesClust = rowIdx.map(i => validRowNames[i])\r\n    // console.log(\"colNamesClust\", colNamesClust)\r\n    // console.log(\"rowNamesClust\", rowNamesClust)\r\n\r\n\r\n\r\n\r\n\r\n    // start of heatmap-------------------------\r\n    // bottom labels: Calculate font size as half the heatmap cell width\r\n    const cellWidth = (width - marginLeft - marginRight) / data[0].length;\r\n    const labelFontSizeBottom = Math.min(Math.max(cellWidth / 6, 8), 20); // clamp between 8px and 20px\r\n\r\n    // Calculate bottom margin based on longest column label, font size, and label angle\r\n    const maxColLabelLength = Math.min(d3.max(colNamesClust.map(c => String(c).length)), maxLabelLength);\r\n    const bottomAngleRad = (Math.abs(bottomLabelAngle) * Math.PI) / 180;\r\n    const bottomLabelTextWidth = labelFontSizeBottom * maxColLabelLength * 0.5;\r\n    const dynamicBottomMargin = Math.max(\r\n        marginBottom,\r\n        Math.abs(Math.sin(bottomAngleRad)) * bottomLabelTextWidth + labelFontSizeBottom + 5\r\n    );\r\n    // right labels: Calculate font size as half the heatmap cell height\r\n    const cellHeight = (height - marginTop - dynamicBottomMargin) / data.length;\r\n\r\n    const labelFontSizeRight = Math.min(Math.max(cellHeight / 3, 7), 20); // clamp between 7px and 20px\r\n    // Calculate right margin based on longest row label and font size\r\n    const maxRowLabelLength = Math.min(d3.max(rowNamesClust.map(r => String(r).length)), maxLabelLength);\r\n    const dynamicRightMargin = Math.max(200, labelFontSizeRight * maxRowLabelLength * 0.6 + 100); // 170 extra for legend\r\n\r\n    const margin = ({\r\n        top: marginTop,\r\n        bottom: dynamicBottomMargin,\r\n        left: marginLeft,\r\n        right: dynamicRightMargin\r\n    })\r\n\r\n    // Call heatmap_plot with clustered matrix and labels\r\n    const heatmapInnerHeight = height - margin.top - margin.bottom; // used for positioning dendograms next/above heatmap\r\n    const heatmapInnerWidth = width - margin.left - margin.right; // only used in heatmap_plot\r\n\r\n\r\n    // console.log(\"1: margin\", margin)\r\n    // console.log(\"HCLUST: ###########################################\")\r\n    // console.log(\"height:\", height);\r\n    // console.log(\"width:\", width);\r\n    // console.log(\"marginTop:\", marginTop);\r\n    // console.log(\"marginBottom:\", marginBottom);\r\n    // console.log(\"marginLeft:\", marginLeft);\r\n    // console.log(\"marginRight:\", marginRight);\r\n    // console.log(\"heatmapColorScale:\", heatmapColorScale);\r\n    // console.log(\"cellWidth-------:\", cellWidth);\r\n    // console.log(\"cellHeight:\", cellHeight);\r\n    // console.log(\"labelFontSizeBottom:\", labelFontSizeBottom);\r\n    // console.log(\"maxColLabelLength:\", maxColLabelLength);\r\n    // console.log(\"dynamicBottomMargin:\", dynamicBottomMargin);\r\n    // console.log(\"labelFontSizeRight:\", labelFontSizeRight);\r\n    // console.log(\"maxRowLabelLength:\", maxRowLabelLength);\r\n    // console.log(\"dynamicRightMargin:\", dynamicRightMargin);\r\n    // console.log(\"1: labelFontSizeBottom * maxColLabelLength * 0.5 + 5:\", labelFontSizeBottom * maxColLabelLength * 0.5 + 5)\r\n    // console.log(\"margin:\", margin);\r\n    // console.log(\"heatmapInnerHeight:\", heatmapInnerHeight);\r\n    // console.log(\"heatmapInnerWidth:\", heatmapInnerWidth);\r\n    // console.log(\"colNames\", colNames) //['sepal_length', 'sepal_width', 'petal_length', 'petal_width']\r\n\r\n    const svg = d3.create(\"svg\")\r\n\r\n    // Set SVG size \r\n    svg\r\n        .attr('width', width)\r\n        .attr('height', height);\r\n\r\n    // Solid white background to ensure white behind dendrograms/heatmap\r\n    svg.append('rect')\r\n        .attr('x', 0)\r\n        .attr('y', 0)\r\n        .attr('width', width)\r\n        .attr('height', height)\r\n        .attr('fill', '#ffffff');\r\n\r\n    // Zoom wrapper layer — everything inside (including the title) zooms/pans together\r\n    const zoomLayer = svg.append(\"g\");\r\n\r\n    // Title, centered over the heatmap area (shared style; inside the zoom layer so\r\n    // it moves with the plot)\r\n    addPlotTitle(zoomLayer, title, margin.left + heatmapInnerWidth / 2, 20);\r\n\r\n    // Create the main group before appending myNewPlot\r\n    const g = zoomLayer\r\n        .append('g')\r\n        // move the entire graph down and right to accomodate labels\r\n        .attr('transform', `translate(${margin.left}, ${margin.top})`);\r\n\r\n    // Zoom behavior (shared helper, see plotZoom.mjs)\r\n    const resetZoom = attachPlotZoom(svg, zoomLayer, { enabled: interactive && zoomable });\r\n\r\n\r\n    // Heatmap #2: we create a new heatmap with the clustered data and append it to the main 'g' group\r\n let myNewPlot = await heatmap_plot({\r\n    data: displayMatrix,\r\n    rowNames: rowNamesClust,\r\n    colNames: colNamesClust,\r\n    width: heatmapInnerWidth + margin.right,\r\n    height: heatmapInnerHeight + margin.bottom,\r\n    marginTop: 0,\r\n    marginLeft: 0,\r\n    marginRight: margin.right,\r\n    marginBottom: margin.bottom,\r\n    title: null, // hclust draws its own title\r\n    legendOffsetX,\r\n    color: heatmapColor,\r\n    colorScale: heatmapColorScale,\r\n    missingValue: Number.NaN,\r\n    missingColor,\r\n    bottomLabelAngle,\r\n    maxLabelLength,\r\n    debug,\r\n    mountToDOM: false,\r\n});\r\n\r\n    // Extract the inner <g> and <defs> from the heatmap SVG to avoid double-translation\r\n    if (myNewPlot) {\r\n        // Move defs (gradient) into hclust SVG so url(#id) references still resolve\r\n        d3.select(myNewPlot).selectAll(\"defs\").each(function() {\r\n            svg.node().insertBefore(this, svg.node().firstChild);\r\n        });\r\n        const heatmapG = d3.select(myNewPlot).select(\"g\").node();\r\n        if (heatmapG) {\r\n            g.node().appendChild(heatmapG);\r\n        }\r\n    }\r\n\r\n    // ---- Branch selection: click a dendrogram branch to select its rows/cols ----\r\n    const selectedCols = new Set();\r\n    const selectedRows = new Set();\r\n    let selectedColNode = null;\r\n    let selectedRowNode = null;\r\n\r\n    function collectLeafOrders(node) {\r\n        const s = new Set();\r\n        node.leaves().forEach(l => { if (l.order != null) s.add(l.order); });\r\n        return s;\r\n    }\r\n\r\n    function nodeAndDescendants(node) {\r\n        const s = new Set();\r\n        if (node) node.descendants().forEach(n => s.add(n));\r\n        return s;\r\n    }\r\n\r\n    function applyBranchHighlight() {\r\n        const HIGHLIGHT = \"#7c3aed\"; // vivid violet so selected branches stand out from black\r\n        const hasCol = selectedCols.size > 0;\r\n        const hasRow = selectedRows.size > 0;\r\n        const cells = svg.selectAll(\".gPoints rect\");\r\n        if (!hasCol && !hasRow) {\r\n            cells.style(\"opacity\", 1);\r\n        } else {\r\n            cells.style(\"opacity\", d => {\r\n                const colOk = !hasCol || selectedCols.has(d.t);\r\n                const rowOk = !hasRow || selectedRows.has(d.n);\r\n                return (colOk && rowOk) ? 1 : 0.15;\r\n            });\r\n        }\r\n\r\n        // Draw a clear outline band around the selected rows / columns\r\n        const gPointsNode = svg.select(\".gPoints\").node();\r\n        if (gPointsNode) {\r\n            const heatG = d3.select(gPointsNode.parentNode);\r\n            heatG.select(\".selection-bands\").remove();\r\n            if (hasCol || hasRow) {\r\n                const bands = heatG.append(\"g\").attr(\"class\", \"selection-bands\");\r\n                let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity;\r\n                cells.each(function () {\r\n                    const x = +this.getAttribute(\"x\");\r\n                    const y = +this.getAttribute(\"y\");\r\n                    const w = +this.getAttribute(\"width\");\r\n                    const h = +this.getAttribute(\"height\");\r\n                    if (x < minX) minX = x;\r\n                    if (x + w > maxX) maxX = x + w;\r\n                    if (y < minY) minY = y;\r\n                    if (y + h > maxY) maxY = y + h;\r\n                });\r\n                if (hasRow) {\r\n                    let y0 = Infinity, y1 = -Infinity;\r\n                    cells.filter(d => selectedRows.has(d.n)).each(function () {\r\n                        const y = +this.getAttribute(\"y\");\r\n                        const h = +this.getAttribute(\"height\");\r\n                        if (y < y0) y0 = y;\r\n                        if (y + h > y1) y1 = y + h;\r\n                    });\r\n                    if (y0 < y1) {\r\n                        bands.append(\"rect\")\r\n                            .attr(\"x\", minX).attr(\"y\", y0)\r\n                            .attr(\"width\", maxX - minX).attr(\"height\", y1 - y0)\r\n                            .attr(\"fill\", \"none\").attr(\"stroke\", HIGHLIGHT).attr(\"stroke-width\", 3);\r\n                    }\r\n                }\r\n                if (hasCol) {\r\n                    let x0 = Infinity, x1 = -Infinity;\r\n                    cells.filter(d => selectedCols.has(d.t)).each(function () {\r\n                        const x = +this.getAttribute(\"x\");\r\n                        const w = +this.getAttribute(\"width\");\r\n                        if (x < x0) x0 = x;\r\n                        if (x + w > x1) x1 = x + w;\r\n                    });\r\n                    if (x0 < x1) {\r\n                        bands.append(\"rect\")\r\n                            .attr(\"x\", x0).attr(\"y\", minY)\r\n                            .attr(\"width\", x1 - x0).attr(\"height\", maxY - minY)\r\n                            .attr(\"fill\", \"none\").attr(\"stroke\", HIGHLIGHT).attr(\"stroke-width\", 3);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        const colSel = nodeAndDescendants(selectedColNode);\r\n        svg.selectAll(\"path.col-link\").each(function (d) {\r\n            const on = selectedColNode && colSel.has(d.target);\r\n            const sel = d3.select(this)\r\n                .attr(\"stroke-width\", on ? \"7px\" : \"4px\")\r\n                .attr(\"stroke\", on ? HIGHLIGHT : (d.source.color || `${colDendoColor}`));\r\n            if (on) sel.raise();\r\n        });\r\n\r\n        const rowSel = nodeAndDescendants(selectedRowNode);\r\n        svg.selectAll(\"path.row-link\").each(function (d) {\r\n            const on = selectedRowNode && rowSel.has(d.target);\r\n            const sel = d3.select(this)\r\n                .attr(\"stroke-width\", on ? \"7px\" : \"4px\")\r\n                .attr(\"stroke\", on ? HIGHLIGHT : (d.source.color || `${rowDendoColor}`));\r\n            if (on) sel.raise();\r\n        });\r\n    }\r\n\r\n    function clearBranchSelection() {\r\n        selectedCols.clear();\r\n        selectedRows.clear();\r\n        selectedColNode = null;\r\n        selectedRowNode = null;\r\n        applyBranchHighlight();\r\n        notifySelection();\r\n    }\r\n\r\n    // Current selection mapped back to the caller's data: original row/col indices and names\r\n    function getSelection() {\r\n        const rowOrders = [...selectedRows].sort((a, b) => a - b);\r\n        const colOrders = [...selectedCols].sort((a, b) => a - b);\r\n        const rowIndices = rowOrders.map(o => rowIdx[o]);\r\n        const colIndices = colOrders.map(o => colIdx[o]);\r\n        return {\r\n            rowIndices,\r\n            colIndices,\r\n            rowNames: rowIndices.map(i => rowNames[i]),\r\n            colNames: colIndices.map(i => colNames[i])\r\n        };\r\n    }\r\n\r\n    function notifySelection() {\r\n        if (typeof onSelectionChange === \"function\") {\r\n            try { onSelectionChange(getSelection()); } catch (err) { console.error(\"onSelectionChange failed:\", err); }\r\n        }\r\n    }\r\n\r\n    // Re-render the plot using only the branch-selected rows/columns (drill-down)\r\n    async function plotSelection() {\r\n        if (selectedRows.size === 0 && selectedCols.size === 0) {\r\n            console.warn(\"hclust_plot(): click a dendrogram branch first to select rows/columns.\");\r\n            return null;\r\n        }\r\n        const subRowIdx = selectedRows.size > 0\r\n            ? [...selectedRows].sort((a, b) => a - b).map(o => rowIdx[o])\r\n            : d3.range(data.length);\r\n        const subColIdx = selectedCols.size > 0\r\n            ? [...selectedCols].sort((a, b) => a - b).map(o => colIdx[o])\r\n            : d3.range(data[0].length);\r\n        if (subRowIdx.length < 2 && subColIdx.length < 2) {\r\n            console.warn(\"hclust_plot(): selection too small to cluster.\");\r\n            return null;\r\n        }\r\n        const subData = subRowIdx.map(r => subColIdx.map(c => data[r][c]));\r\n        // Preserve the caller's display values in the drill-down instead of silently\r\n        // switching the subset plot to scaled values.\r\n        const subDisplayData = hasExplicitDisplayData\r\n            ? subRowIdx.map(r => subColIdx.map(c => displayData[r][c]))\r\n            : null;\r\n        if (typeof onPlotSelection === \"function\") {\r\n            try { onPlotSelection(getSelection()); } catch (err) { console.error(\"onPlotSelection failed:\", err); }\r\n        }\r\n        const newNode = await hclust_plot({\r\n            ...options,\r\n            data: subData,\r\n            displayData: subDisplayData,\r\n            rowNames: subRowIdx.map(r => rowNames[r]),\r\n            colNames: subColIdx.map(c => colNames[c]),\r\n            // subset was already scaled/filtered above; don't re-apply\r\n            scaleData: false,\r\n            missingValue: null,\r\n            removeMissingBy: \"none\",\r\n            clusterRows: clusterRows && subRowIdx.length > 1,\r\n            clusterCols: clusterCols && subColIdx.length > 1,\r\n            _fullOptions: options._fullOptions ?? options\r\n        });\r\n        if (typeof onRerender === \"function\") {\r\n            try { onRerender(newNode); } catch (err) { console.error(\"onRerender failed:\", err); }\r\n        }\r\n        return newNode;\r\n    }\r\n\r\n    //################################################################\r\n    // Top dendogram---------------------------------\r\n\r\n    const dendoTooltip = d3tip()\r\n        .style('border', 'solid 3px black')\r\n        .style('background-color', 'white')\r\n        .style('border-radius', '10px')\r\n        .style('float', 'left')\r\n        .style('color', '#000')\r\n        .style('font-family', tooltip_fontFamily)\r\n        .style('font-size', tooltip_fontSize)\r\n        .html((event, d) => `\r\n<div style='float: right; color: #000;'>\r\n   Height:${d.source.data.height.toFixed(3)} <br/>\r\n</div>`)\r\n\r\n\r\n\r\n    if (clusterCols == true) {\r\n\r\n        function transformY(data) {\r\n            // console.log(\"height\",height,colPadding)\r\n            const ht = colPadding //height-500//-heatmapInnerHeight;\r\n            // Flip vertically only: leaves (height 0) sit at the bottom, root at the top.\r\n            // Do NOT use rotate(180) here, it would also mirror x and reverse the leaf order.\r\n            return ht - (data.data.height / colMaxHeight) * ht;\r\n        }\r\n\r\n        function colElbow(d) { // H = width, V = height\r\n            const path = (\r\n                \"M\" +\r\n                d.source.x +\r\n                \",\" +\r\n                //(height - (d.source.data.height / colMaxHeight) * height) +\r\n                transformY(d.source) +\r\n                \"H\" +\r\n                d.target.x +\r\n                \"V\" +\r\n                // (height - (d.target.data.height / colMaxHeight) * height)\r\n                transformY(d.target)\r\n            )\r\n            //// console.log(\"path\", path)\r\n            return path\r\n        }\r\n\r\n\r\n        //// console.log(root.links()) \r\n\r\n        // Ensure colMaxHeight is always positive to prevent flipping for small datasets\r\n        const colMaxHeight = Math.max(root.data.height, 1);\r\n\r\n        const allNodes = root.descendants().reverse()\r\n        const leafs = allNodes.filter(d => !d.children)\r\n        leafs.sort((a, b) => a.x - b.x)\r\n        //const leafHeight = (width-margin.left)/ leafs.length// spacing between leaves\r\n        const leafHeight = heatmapInnerWidth / leafs.length // spacing between leaves (matches x_scale range)\r\n\r\n        leafs.forEach((d, i) => { d.x = i * leafHeight + leafHeight / 2; d.order = i; })\r\n\r\n        allNodes.forEach(node => {\r\n            if (node.children) {\r\n                node.x = d3.mean(node.children, d => d.x)\r\n            }\r\n        })\r\n\r\n\r\n        // Apply tooltip to our SVG\r\n        svg.call(dendoTooltip)\r\n        // dendo columns\r\n        // Position dendrogram so leaves are near heatmap top edge (vertical flip handled in transformY)\r\n        // Add small gap (5px) between dendrogram leaves and heatmap\r\n        const colDendroGap = 5;\r\n        const colDendroY = margin.top - colPadding - colDendroGap;\r\n        const colLinks = root.links();\r\n        // One group carries the shared transform; visible paths first, then transparent\r\n        // wide hit paths on top as generous click/hover targets.\r\n        const colLinkG = zoomLayer.append(\"g\")\r\n            .attr(\"class\", \"col-links\")\r\n            .attr(\"transform\", `translate(${margin.left}, ${colDendroY})`);\r\n        colLinkG.selectAll(\"path.col-link\")\r\n            .data(colLinks)\r\n            .join(\"path\")\r\n            .attr(\"class\", \"link col-link\")\r\n            .attr(\"stroke\", d => d.source.color || `${colDendoColor}`)\r\n            .attr(\"stroke-width\", \"4px\")\r\n            .attr(\"fill\", \"none\")\r\n            .style(\"pointer-events\", \"none\") // interaction handled by the wide hit path below\r\n            .attr(\"d\", colElbow);\r\n        colLinkG.selectAll(\"path.col-link-hit\")\r\n            .data(colLinks)\r\n            .join(\"path\")\r\n            .attr(\"class\", \"link-hit col-link-hit\")\r\n            .attr(\"stroke\", \"transparent\")\r\n            .attr(\"stroke-width\", \"14px\")\r\n            .attr(\"fill\", \"none\")\r\n            .style(\"cursor\", (interactive && clickSelect) ? \"pointer\" : \"default\")\r\n            .attr(\"d\", colElbow)\r\n            .on('mouseover', dendoTooltip.show)\r\n            // Hide the tooltip when \"mouseout\"\r\n            .on('mouseout', dendoTooltip.hide)\r\n            .on('click', (event, d) => {\r\n                if (!(interactive && clickSelect)) return;\r\n                event.stopPropagation();\r\n                const node = d.target;\r\n                selectedCols.clear();\r\n                if (selectedColNode === node) {\r\n                    selectedColNode = null;\r\n                } else {\r\n                    selectedColNode = node;\r\n                    collectLeafOrders(node).forEach(o => selectedCols.add(o));\r\n                }\r\n                applyBranchHighlight();\r\n                notifySelection();\r\n            })\r\n    }\r\n\r\n\r\n    // bottom/row dendogram----------------------\r\n\r\n    if (clusterRows == true) {\r\n\r\n        function rowElbow(d) { // H = width, V = height\r\n            const path = (\r\n                \"M\" +\r\n                transformX(d.source) +\r\n                \",\" +\r\n                d.source.x +\r\n                \"V\" +\r\n                d.target.x +\r\n                \"H\" +\r\n                transformX(d.target)\r\n            )\r\n            //  // console.log(\"path\",path)\r\n            return path\r\n        }\r\n\r\n        function transformX(data) { // row dendogram height\r\n            const height2 = margin.left - rowPadding; //padding = 60  \r\n            // const height2 = margin.left - rowPadding;//padding = 60  \r\n\r\n            // const height2 = margin.left - (rowLen+10);\r\n            return height2 - (data.data.height / rowMaxHeight) * height2\r\n        }\r\n\r\n        // Ensure rowMaxHeight is always positive to prevent flipping for small/flat trees\r\n        // (same guard as the column dendrogram).\r\n        const rowMaxHeight = Math.max(root2.data.height, 1);\r\n        const clusterLayout2 = d3.cluster()\r\n        clusterLayout2(root2)\r\n\r\n        const allNodes2 = root2.descendants().reverse()\r\n        const leafs2 = allNodes2.filter(d => !d.children)\r\n        leafs2.sort((a, b) => a.x - b.x)\r\n        const leafHeight2 = heatmapInnerHeight / leafs2.length\r\n        leafs2.forEach((d, i) => { d.x = i * leafHeight2 + leafHeight2 / 2; d.order = i; })\r\n\r\n        allNodes2.forEach(node => {\r\n            if (node.children) {\r\n                node.x = d3.mean(node.children, d => d.x)\r\n            }\r\n        })\r\n\r\n        // Apply tooltip to our SVG\r\n        svg.call(dendoTooltip)\r\n\r\n\r\n        // row (left) dendrogram\r\n        const rowLinks = root2.links();\r\n        // One group carries the shared transform (left edge of heatmap, below top dendrogram\r\n        // if present); visible paths first, then transparent wide hit paths on top.\r\n        const rowLinkG = zoomLayer.append(\"g\")\r\n            .attr(\"class\", \"row-links\")\r\n            .attr(\"transform\", `translate(0,${margin.top})`);\r\n        rowLinkG.selectAll(\"path.row-link\")\r\n            .data(rowLinks)\r\n            .join(\"path\")\r\n            .attr(\"class\", \"link row-link\")\r\n            .attr(\"stroke\", d => d.source.color || `${rowDendoColor}`)\r\n            .attr(\"stroke-width\", \"4px\")\r\n            .attr(\"fill\", \"none\")\r\n            .style(\"pointer-events\", \"none\") // interaction handled by the wide hit path below\r\n            .attr(\"d\", rowElbow);\r\n        rowLinkG.selectAll(\"path.row-link-hit\")\r\n            .data(rowLinks)\r\n            .join(\"path\")\r\n            .attr(\"class\", \"link-hit row-link-hit\")\r\n            .attr(\"stroke\", \"transparent\")\r\n            .attr(\"stroke-width\", \"14px\")\r\n            .attr(\"fill\", \"none\")\r\n            .style(\"cursor\", (interactive && clickSelect) ? \"pointer\" : \"default\")\r\n            .attr(\"d\", rowElbow)\r\n            .on('mouseover', dendoTooltip.show)\r\n            // Hide the tooltip when \"mouseout\"\r\n            .on('mouseout', dendoTooltip.hide)\r\n            .on('click', (event, d) => {\r\n                if (!(interactive && clickSelect)) return;\r\n                event.stopPropagation();\r\n                const node = d.target;\r\n                selectedRows.clear();\r\n                if (selectedRowNode === node) {\r\n                    selectedRowNode = null;\r\n                } else {\r\n                    selectedRowNode = node;\r\n                    collectLeafOrders(node).forEach(o => selectedRows.add(o));\r\n                }\r\n                applyBranchHighlight();\r\n                notifySelection();\r\n            })\r\n    }\r\n\r\n\r\n\r\n    // Here we add the svg to the plot div\r\n    // Check if the div was provided in the function call\r\n\r\n    // Tear down DOM side effects of this instance: d3-tip nodes live on document.body and\r\n    // would otherwise leak on every re-render. Safe to call multiple times.\r\n    const destroy = () => {\r\n        try { dendoTooltip.destroy(); } catch (err) { /* already removed */ }\r\n        if (myNewPlot && myNewPlot.heatmap && typeof myNewPlot.heatmap.destroy === \"function\") {\r\n            try { myNewPlot.heatmap.destroy(); } catch (err) { /* already removed */ }\r\n        }\r\n        svg.on(\".zoom\", null);\r\n    };\r\n\r\n    const _mountPlot = (div) => {\r\n        // Destroy any previous plot instance mounted in this div so its body-level\r\n        // tooltip nodes don't accumulate across re-renders.\r\n        div.querySelectorAll(\"svg\").forEach(node => {\r\n            if (node.hclust && typeof node.hclust.destroy === \"function\") node.hclust.destroy();\r\n            if (node.heatmap && typeof node.heatmap.destroy === \"function\") node.heatmap.destroy();\r\n        });\r\n        div.innerHTML = \"\";\r\n\r\n        // Button bar\r\n        const buttonBar = document.createElement(\"div\");\r\n        buttonBar.style.cssText = \"display:flex;gap:6px;margin-bottom:4px;\";\r\n\r\n        if (interactive && zoomable && showResetButton) {\r\n            const resetButton = document.createElement(\"button\");\r\n            resetButton.textContent = \"Reset zoom\";\r\n            resetButton.style.cssText = \"padding:3px 10px;cursor:pointer;\";\r\n            resetButton.onclick = () => resetZoom();\r\n            buttonBar.appendChild(resetButton);\r\n        }\r\n\r\n        if (interactive && clickSelect) {\r\n            const clearButton = document.createElement(\"button\");\r\n            clearButton.textContent = \"Clear selection\";\r\n            clearButton.style.cssText = \"padding:3px 10px;cursor:pointer;\";\r\n            clearButton.onclick = () => clearBranchSelection();\r\n            buttonBar.appendChild(clearButton);\r\n\r\n            // Re-render the plot using only the branch-selected rows/columns\r\n            const plotSelButton = document.createElement(\"button\");\r\n            plotSelButton.textContent = \"Plot selection\";\r\n            plotSelButton.style.cssText = \"padding:3px 10px;cursor:pointer;\";\r\n            plotSelButton.onclick = () => plotSelection();\r\n            buttonBar.appendChild(plotSelButton);\r\n        }\r\n\r\n        // When showing a drilled-down subset, offer a way back to the full plot\r\n        if (options._fullOptions) {\r\n            const showAllButton = document.createElement(\"button\");\r\n            showAllButton.textContent = \"Show all\";\r\n            showAllButton.style.cssText = \"padding:3px 10px;cursor:pointer;\";\r\n            showAllButton.onclick = async () => {\r\n                const newNode = await hclust_plot(options._fullOptions);\r\n                if (typeof onRerender === \"function\") {\r\n                    try { onRerender(newNode); } catch (err) { console.error(\"onRerender failed:\", err); }\r\n                }\r\n            };\r\n            buttonBar.appendChild(showAllButton);\r\n        }\r\n\r\n        if (buttonBar.children.length > 0) div.appendChild(buttonBar);\r\n        div.appendChild(svg.node());\r\n    };\r\n\r\n    let mountDiv = document.getElementById(targetDivId);\r\n    if (!mountDiv) {\r\n        const currentDivNum = hclustDt.data.divNum;\r\n        mountDiv = document.createElement(\"div\");\r\n        mountDiv.id = targetDivId || 'hclust_plot' + currentDivNum;\r\n        if (debug) console.log(\"div NOT provided in function options or doesn't exist... created a new div with id: \", mountDiv.id, \"and appended to document body!\");\r\n\r\n        const plotsPanel = document.getElementById(\"plotsPanel\");\r\n        (plotsPanel || document.body).appendChild(mountDiv);\r\n        hclustDt.data.divNum = currentDivNum + 1;\r\n    }\r\n    _mountPlot(mountDiv);\r\n\r\n    // Selection API: part of the exported hclust_plot contract.\r\n    // const node = await hclust_plot({...}); node.hclust.getSelection() / .clearSelection()\r\n    // / .plotSelection() / .resetZoom() / .destroy()\r\n    const svgNode = svg.node();\r\n    svgNode.hclust = {\r\n        getSelection,\r\n        clearSelection: clearBranchSelection,\r\n        plotSelection,\r\n        resetZoom,\r\n        destroy\r\n    };\r\n    return svgNode\r\n}\r\n\r\n\r\n","import { Matrix, MatrixTransposeView, EVD, SVD, NIPALS, } from 'ml-matrix';\r\n/**\r\n * Creates new PCA (Principal Component Analysis) from the dataset\r\n * @param {MaybeMatrix} dataset - dataset or covariance matrix.\r\n * @param {PCAOptions} [options]\r\n * @param {boolean} [options.isCovarianceMatrix=false] - true if the dataset is a covariance matrix.\r\n * @param {string} [options.method='SVD'] - select which method to use: SVD (default), covarianceMatrirx or NIPALS.\r\n * @param {number} [options.nCompNIPALS=2] - number of components to be computed with NIPALS.\r\n * @param {boolean} [options.center=true] - should the data be centered (subtract the mean).\r\n * @param {boolean} [options.scale=false] - should the data be scaled (divide by the standard deviation).\r\n * @param {boolean} [options.ignoreZeroVariance=false] - ignore columns with zero variance if `scale` is `true`.\r\n * */\r\nexport class PCA {\r\n    constructor(dataset, options = {}, model) {\r\n        /* eslint-disable @typescript-eslint/naming-convention */\r\n        this.U = null;\r\n        this.S = null;\r\n        if (model) {\r\n            this.center = model.center;\r\n            this.scale = model.scale;\r\n            this.means = model.means;\r\n            this.stdevs = model.stdevs;\r\n            this.U = Matrix.checkMatrix(model.U);\r\n            this.S = model.S;\r\n            this.R = model.R;\r\n            this.excludedFeatures = model.excludedFeatures || [];\r\n            return;\r\n        }\r\n        let datasetMatrix;\r\n        if (Array.isArray(dataset)) {\r\n            datasetMatrix = new Matrix(dataset);\r\n        }\r\n        else {\r\n            datasetMatrix = new Matrix(dataset);\r\n        }\r\n        const { isCovarianceMatrix = false, method = 'SVD', nCompNIPALS = 2, center = true, scale = false, ignoreZeroVariance = false, } = options;\r\n        this.center = center;\r\n        this.scale = scale;\r\n        this.means = null;\r\n        this.stdevs = null;\r\n        this.excludedFeatures = [];\r\n        if (isCovarianceMatrix) {\r\n            // User provided a covariance matrix instead of dataset.\r\n            this._computeFromCovarianceMatrix(datasetMatrix);\r\n            return;\r\n        }\r\n        this._adjust(datasetMatrix, ignoreZeroVariance);\r\n        switch (method) {\r\n            case 'covarianceMatrix': {\r\n                // User provided a dataset but wants us to compute and use the covariance matrix.\r\n                const covarianceMatrix = new MatrixTransposeView(datasetMatrix)\r\n                    .mmul(datasetMatrix)\r\n                    .div(datasetMatrix.rows - 1);\r\n                this._computeFromCovarianceMatrix(covarianceMatrix);\r\n                break;\r\n            }\r\n            case 'NIPALS': {\r\n                this._computeWithNIPALS(datasetMatrix, nCompNIPALS);\r\n                break;\r\n            }\r\n            case 'SVD': {\r\n                const svd = new SVD(datasetMatrix, {\r\n                    computeLeftSingularVectors: false,\r\n                    computeRightSingularVectors: true,\r\n                    autoTranspose: true,\r\n                });\r\n                this.U = svd.rightSingularVectors;\r\n                const singularValues = svd.diagonal;\r\n                const eigenvalues = [];\r\n                for (const singularValue of singularValues) {\r\n                    eigenvalues.push((singularValue * singularValue) / (datasetMatrix.rows - 1));\r\n                }\r\n                this.S = eigenvalues;\r\n                break;\r\n            }\r\n            default: {\r\n                throw new Error(`unknown method: ${method}`);\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * Load a PCA model from JSON\r\n     * @param {PCAModel} model\r\n     * @return {PCA}\r\n     */\r\n    static load(model) {\r\n        if (typeof model.name !== 'string') {\r\n            throw new TypeError('model must have a name property');\r\n        }\r\n        if (model.name !== 'PCA') {\r\n            throw new RangeError(`invalid model: ${model.name}`);\r\n        }\r\n        return new PCA(undefined, undefined, model);\r\n    }\r\n    /**\r\n     * Project the dataset into the PCA space\r\n     * @param {MaybeMatrix} dataset\r\n     * @param {PredictOptions} options\r\n     * @return {Matrix} dataset projected in the PCA space\r\n     */\r\n    predict(dataset, options = {}) {\r\n        const { nComponents = this.U.columns } = options;\r\n        let datasetmatrix;\r\n        if (Array.isArray(dataset)) {\r\n            datasetmatrix = new Matrix(dataset);\r\n        }\r\n        else {\r\n            datasetmatrix = new Matrix(dataset);\r\n        }\r\n        if (this.center) {\r\n            datasetmatrix.subRowVector(this.means);\r\n            if (this.scale) {\r\n                for (let i of this.excludedFeatures) {\r\n                    datasetmatrix.removeColumn(i);\r\n                }\r\n                datasetmatrix.divRowVector(this.stdevs);\r\n            }\r\n        }\r\n        let predictions = datasetmatrix.mmul(this.U);\r\n        return predictions.subMatrix(0, predictions.rows - 1, 0, nComponents - 1);\r\n    }\r\n    /**\r\n     * Calculates the inverse PCA transform\r\n     * @param {Matrix} dataset\r\n     * @return {Matrix} dataset projected in the PCA space\r\n     */\r\n    invert(dataset) {\r\n        dataset = Matrix.checkMatrix(dataset);\r\n        let inverse = dataset.mmul(this.U.transpose());\r\n        if (this.center) {\r\n            if (this.scale) {\r\n                inverse.mulRowVector(this.stdevs);\r\n            }\r\n            inverse.addRowVector(this.means);\r\n        }\r\n        return inverse;\r\n    }\r\n    /**\r\n     * Returns the proportion of variance for each component\r\n     * @return {[number]}\r\n     */\r\n    getExplainedVariance() {\r\n        let sum = 0;\r\n        if (this.S) {\r\n            for (const s of this.S) {\r\n                sum += s;\r\n            }\r\n        }\r\n        if (this.S) {\r\n            return this.S.map((value) => value / sum);\r\n        }\r\n        return [];\r\n    }\r\n    /**\r\n     * Returns the cumulative proportion of variance\r\n     * @return {[number]}\r\n     */\r\n    getCumulativeVariance() {\r\n        let explained = this.getExplainedVariance();\r\n        for (let i = 1; i < explained.length; i++) {\r\n            explained[i] += explained[i - 1];\r\n        }\r\n        return explained;\r\n    }\r\n    /**\r\n     * Returns the Eigenvectors of the covariance matrix\r\n     * @returns {Matrix}\r\n     */\r\n    getEigenvectors() {\r\n        return this.U;\r\n    }\r\n    /**\r\n     * Returns the Eigenvalues (on the diagonal)\r\n     * @returns {[number]}\r\n     */\r\n    getEigenvalues() {\r\n        return this.S;\r\n    }\r\n    /**\r\n     * Returns the standard deviations of the principal components\r\n     * @returns {[number]}\r\n     */\r\n    getStandardDeviations() {\r\n        return this.S.map((x) => Math.sqrt(x));\r\n    }\r\n    /**\r\n     * Returns the loadings matrix\r\n     * @return {Matrix}\r\n     */\r\n    getLoadings() {\r\n        return this.U.transpose();\r\n    }\r\n    /**\r\n     * Export the current model to a JSON object\r\n     * @return {Object} model\r\n     */\r\n    toJSON() {\r\n        return {\r\n            name: 'PCA',\r\n            center: this.center,\r\n            scale: this.scale,\r\n            means: this.means,\r\n            stdevs: this.stdevs,\r\n            U: this.U,\r\n            S: this.S,\r\n            excludedFeatures: this.excludedFeatures,\r\n        };\r\n    }\r\n    _adjust(dataset, ignoreZeroVariance) {\r\n        if (this.center) {\r\n            const mean = dataset.mean('column');\r\n            const stdevs = this.scale\r\n                ? dataset.standardDeviation('column', { mean })\r\n                : null;\r\n            this.means = mean;\r\n            dataset.subRowVector(mean);\r\n            if (this.scale) {\r\n                for (let i = 0; i < stdevs.length; i++) {\r\n                    if (stdevs[i] === 0) {\r\n                        if (ignoreZeroVariance) {\r\n                            dataset.removeColumn(i);\r\n                            stdevs.splice(i, 1);\r\n                            this.excludedFeatures.push(i);\r\n                            i--;\r\n                        }\r\n                        else {\r\n                            throw new RangeError(`Cannot scale the dataset (standard deviation is zero at index ${i}`);\r\n                        }\r\n                    }\r\n                }\r\n                this.stdevs = stdevs;\r\n                dataset.divRowVector(stdevs);\r\n            }\r\n        }\r\n    }\r\n    _computeFromCovarianceMatrix(dataset) {\r\n        const evd = new EVD(dataset, { assumeSymmetric: true });\r\n        this.U = evd.eigenvectorMatrix;\r\n        this.U.flipRows();\r\n        this.S = evd.realEigenvalues;\r\n        this.S.reverse();\r\n    }\r\n    _computeWithNIPALS(dataset, nCompNIPALS) {\r\n        this.U = new Matrix(nCompNIPALS, dataset.columns);\r\n        this.S = [];\r\n        let x = dataset;\r\n        for (let i = 0; i < nCompNIPALS; i++) {\r\n            let dc = new NIPALS(x);\r\n            this.U.setRow(i, dc.w.transpose());\r\n            this.S.push(Math.pow(dc.s.get(0, 0), 2));\r\n            x = dc.xResidual;\r\n        }\r\n        this.U = this.U.transpose(); // to be compatible with API\r\n    }\r\n}\r\n//# sourceMappingURL=pca.js.map","// console.log(\"pca.mjs loaded\")\r\n\r\n// TODO: limit textbox rows to 500\r\n// TODO: automate UI to apply to dendo and heatmap\r\nimport {\r\n  removeNonNumberValues,\r\n  scale,\r\n  csvToJson,\r\n  textBox\r\n} from './otherFunctions.js'\r\n\r\nimport * as d3 from \"d3\";\r\nimport d3tip from \"d3-tip\";\r\nimport {\r\n  PCA\r\n} from \"ml-pca\"; // this is the ml-pca default export\r\nimport irisData from \"./data/irisData.js\";\r\nimport { addPlotTitle } from \"./plotTitle.mjs\";\r\nimport { attachPlotZoom } from \"./plotZoom.mjs\";\r\n\r\n// import localforage from \"localforage\";  // only if you truly need it in SDK\r\n\r\nexport const pcaDt = {\r\n  data: {\r\n    divNum: 1,\r\n    iris: {\r\n      json: irisData,\r\n      csv: null  // Will be generated on demand\r\n    },\r\n    file: {\r\n      json: null,\r\n      csv: null\r\n    }\r\n  }\r\n}\r\n\r\n// Generate CSV from iris JSON data\r\n// const irisHeaders = Object.keys(irisData[0]);\r\n// pcaDt.data.iris.csv = irisHeaders.join(',') + '\\n' + \r\n//   irisData.map(row => irisHeaders.map(h => row[h]).join(',')).join('\\n');\r\n\r\n\r\nconst pcaScores = async function (data) {\r\n  // console.log(\"RUNNING pcaScores()-------------------------------\")\r\n\r\n  const numbersOnlyObjs = removeNonNumberValues(data)\r\n  let scaledObjs = (await scale(numbersOnlyObjs))\r\n  let scaledArr = scaledObjs.map(Object.values)\r\n\r\n  const pca = new PCA(scaledArr, {\r\n    center: true,\r\n    scale: true\r\n  })\r\n\r\n  // Detect categorical column (first non-numeric column)\r\n  const sample = data[0] || {};\r\n  const categoryKey = Object.keys(sample).find(k => typeof sample[k] !== \"number\");\r\n\r\n  // Efficiently extract only the first two principal components (PC1, PC2)\r\n  const scoresArray = pca.predict(scaledArr).toJSON();\r\n  const scores = scoresArray.map((row, rowIndex) => ({\r\n    group: categoryKey ? data[rowIndex]?.[categoryKey] : \"row_\" + rowIndex,\r\n    name: \"id_\" + rowIndex,\r\n    PC1: row[0],\r\n    PC2: row[1]\r\n  }));\r\n  return scores\r\n}\r\n\r\nfunction selectGroup(ctx, group, maxOpacity) {\r\n  const groupElements = d3.selectAll(\".points\")\r\n    .filter(d => d.group !== group);\r\n\r\n  const activeGroup = d3.selectAll(\".keyRects\")\r\n    .filter(d => d === group);\r\n\r\n  const otherElements = d3.selectAll(\".points\")\r\n    .filter(d => d.group === group);\r\n\r\n  const otherGroups = d3.selectAll(\".keyRects\")\r\n    .filter(d => d !== group);\r\n\r\n  groupElements.transition().attr(\"opacity\", 0.1);\r\n  otherGroups.transition().attr(\"opacity\", 0.1);\r\n\r\n  otherElements.transition().attr(\"opacity\", maxOpacity);\r\n  activeGroup.transition().attr(\"opacity\", maxOpacity);\r\n}\r\n\r\nexport async function pca_plot(options = {}) {\r\n  console.log(\"RUNNING: pca_plot() function----------\")\r\n\r\n  const {\r\n    divId: divId = \"\",\r\n    data: data = irisData, \r\n    width: width = 600, // standardized default across all clustjs plots\r\n    height: height = 460,\r\n    colors: colors = [\"red\", \"blue\", \"orange\", \"green\", \"purple\", \"pink\", \"yellow\"],\r\n    margin: userMargin = {}, // e.g. { top: 25, right: 170, bottom: 45, left: 45 } — override any side\r\n    title: title = \"PCA Plot\", // string, or null/\"\" to hide\r\n    zoomable: zoomable = true, // wheel to zoom, drag to pan\r\n  } = options;\r\n  const targetDivId = divId;\r\n\r\n\r\n  // Resolve target container and avoid redundant lookups\r\n  let div = targetDivId ? document.getElementById(targetDivId) : null;\r\n  if (div) {\r\n    console.log(\"div provided in function parameters:\", targetDivId);\r\n    div.innerHTML = \"\";\r\n  } else {\r\n    const currentDivNum = pcaDt.data.divNum;\r\n    div = document.createElement(\"div\");\r\n    div.id = targetDivId || 'pca_plot' + currentDivNum;\r\n    console.log(\"div NOT provided within function options or doesn't exist... created a new div with id: \", div.id, \"and appended to document body!\");\r\n    const plotsPanel = document.getElementById(\"plotsPanel\");\r\n    (plotsPanel || document.body).appendChild(div);\r\n    pcaDt.data.divNum = currentDivNum + 1;\r\n  }\r\n\r\n  const scores = await pcaScores(data)\r\n  // console.log(\"Data for PCA plot:\", data)\r\n  // console.log(\"PCA scores:\", scores)\r\n  const groups = [...new Set(scores.map(d => d.group))]\r\n  const color = d3.scaleOrdinal(colors).domain(groups)\r\n\r\n\r\n  const fontFamily = 'monospace'\r\n  const maxOpacity = 0.7\r\n  const margin = {\r\n    top: 42, // headroom so the title clears the plot area\r\n    right: 170,\r\n    bottom: 45,\r\n    left: 45,\r\n    ...userMargin\r\n  }\r\n  // Compute padded domain once using the range for better performance and clarity\r\n  const minPC1 = d3.min(scores, d => d.PC1);\r\n  const maxPC1 = d3.max(scores, d => d.PC1);\r\n  const rangePC1 = maxPC1 - minPC1;\r\n  const paddedMin = minPC1 - rangePC1 * 0.10;\r\n  const paddedMax = maxPC1 + rangePC1 * 0.10;\r\n  const x = d3.scaleLinear()\r\n    .domain([paddedMin, paddedMax])\r\n    .range([margin.left, width - margin.right])\r\n\r\nconst xAxis = g => g\r\n  .attr(\"transform\", `translate(0,${height - margin.bottom + 5})`)\r\n  .call(d3.axisBottom(x).ticks(6).tickSizeOuter(0))\r\n  .call(g => g.select(\".domain\")\r\n    .attr(\"stroke\", \"#000\")\r\n    .attr(\"stroke-width\", 1))\r\n  .call(g => g.selectAll(\".tick line\")\r\n    .attr(\"stroke\", \"#000\")\r\n    .attr(\"stroke-width\", 1))\r\n  .call(g => g.selectAll(\".tick text\")\r\n    .attr(\"fill\", \"#000\")\r\n    .style(\"font-size\", \"12px\"))\r\n  .call(g => g.append(\"text\")\r\n    .attr(\"x\", width - margin.right)\r\n    .attr(\"y\", 35)\r\n    .attr(\"fill\", \"#000\")\r\n    .attr(\"font-weight\", \"bold\")\r\n    .attr(\"text-anchor\", \"end\")\r\n    .text(\"PC1\"));\r\n\r\nconst y = d3.scaleLinear()\r\n  .domain(d3.extent(scores, d => d.PC2))\r\n  .range([height - margin.bottom, margin.top])\r\n\r\nconst yAxis = g => g\r\n  .attr(\"transform\", `translate(${margin.left - 5},0)`)\r\n  .call(d3.axisLeft(y).ticks(6).tickSizeOuter(0))\r\n  .call(g => g.select(\".domain\")\r\n    .attr(\"stroke\", \"#000\")\r\n    .attr(\"stroke-width\", 1))\r\n  .call(g => g.selectAll(\".tick line\")\r\n    .attr(\"stroke\", \"#000\")\r\n    .attr(\"stroke-width\", 1))\r\n  .call(g => g.selectAll(\".tick text\")\r\n    .attr(\"fill\", \"#000\")\r\n    .style(\"font-size\", \"12px\"))\r\n  .call(g => g.append(\"text\")\r\n    .attr(\"x\", -margin.top)\r\n    .attr(\"y\", margin.top - 5)\r\n    .attr(\"fill\", \"#000\")\r\n    .attr(\"font-weight\", \"bold\")\r\n    .attr(\"text-anchor\", \"start\")\r\n    .text(\"PC2\"));\r\n\r\n\r\n  const svg = d3.create(\"svg\")\r\n    .style(\"background\", \"white\")\r\n    .style(\"overflow\", \"visible\");\r\n\r\nsvg.attr(\"id\", \"svgid\");\r\n\r\n  // svg.id = \"svgid\"\r\n  // const g = d3.select(DOM.svg(width, height));\r\n\r\n  const g = svg\r\n    .attr('width', width)\r\n    .attr('height', height)\r\n    .append('g')\r\n  // .attr('transform', `translate(${margin.left+margin.right}, ${margin.top+margin.bottom})`)\r\n\r\n  // Zoom/pan (shared helper, see plotZoom.mjs)\r\n  attachPlotZoom(svg, g, { enabled: zoomable });\r\n\r\n  // Title (shared style, centered over the plot area; inside the zoom layer so it\r\n  // moves with the plot)\r\n  addPlotTitle(g, title, margin.left + (width - margin.left - margin.right) / 2, Math.max(16, margin.top / 2));\r\n\r\n  g.append(\"g\")\r\n    .call(xAxis);\r\n\r\n  g.append(\"g\")\r\n    .call(yAxis);\r\n\r\n  g.append(\"rect\")\r\n    .attr(\"id\", \"background\")\r\n    .attr(\"x\", margin.left)\r\n    .attr(\"y\", margin.top)\r\n    .attr(\"width\", width - margin.left - margin.right)\r\n    .attr(\"height\", height - margin.top - margin.bottom)\r\n    .attr(\"fill\", \"white\")\r\n    .on(\"click\", (event, d) => selectGroup(null, d, maxOpacity));\r\n\r\n  const gPoints = g.append(\"g\").attr(\"class\", \"gPoints\").style(\"isolation\", \"isolate\");\r\n\r\n  const tooltip = d3tip()\r\n    .style('border', 'solid 2px navy')\r\n    .style('background-color', 'white')\r\n    .style(\"color\", \"#000\")\r\n    .style('border-radius', '7px')\r\n    .style('padding', '8px 12px')\r\n    .style('font-family', fontFamily)\r\n    .style('font-size', '12px')\r\n    .style('max-width', '250px')\r\n    .style('width', 'auto')\r\n    .html((event, d) => `\r\n          <div style='line-height: 1.5;'>\r\n            <div><strong>Name:</strong> ${d.name}</div>\r\n            <div><strong>PC1:</strong> ${d.PC1.toFixed(2)}</div>\r\n            <div><strong>PC2:</strong> ${d.PC2.toFixed(2)}</div>\r\n          </div>`)\r\n\r\n  // Apply tooltip to our SVG\r\n  svg.call(tooltip)\r\n  gPoints\r\n    .selectAll(\"circle\")\r\n    .data(scores)\r\n    .enter()\r\n    .append(\"circle\")\r\n    .attr(\"class\", \"points\")\r\n    .attr(\"cx\", d => x(d.PC1))\r\n    .attr(\"cy\", d => y(d.PC2))\r\n    .attr(\"fill\", d => color(d.group))\r\n    // .style(\"mix-blend-mode\", blendingMode)\r\n    .attr(\"opacity\", 0.7)\r\n    .attr(\"r\", 4)\r\n    .on('mouseover', tooltip.show)\r\n    .on('mouseout', tooltip.hide)\r\n\r\n  const key = g.append(\"g\")\r\n    .selectAll(\"rect\")\r\n    .data(groups)\r\n  //  //console.log(\"key\",key)\r\n  key.enter().append(\"rect\")\r\n    .attr(\"class\", \"keyRects\")\r\n    .attr(\"x\", width - margin.left - 50)\r\n    .attr(\"y\", (d, i) => i * 20)\r\n    .attr(\"width\", 12)\r\n    .attr(\"height\", 12)\r\n    .attr(\"fill\", d => color(d))\r\n    .on(\"click\", (event, d) => selectGroup(null, d, maxOpacity))\r\n\r\n  key.enter().append(\"text\")\r\n    .attr(\"x\", d => width - margin.left - 30)\r\n    .attr(\"y\", (d, i) => i * 20)\r\n    .attr(\"dy\", \"0.7em\")\r\n    .text(d => `${d}`)\r\n    .style(\"font-size\", \"14px\")\r\n    .on(\"click\", (event, d) => selectGroup(null, d, maxOpacity))\r\n\r\n  div.appendChild(svg.node());// todo remove\r\n  return svg.node();\r\n}\r\n\r\n// load file and plot PCA\r\nexport async function pca_UI(options = {}) {\r\n    console.log(\"RUNNING pca_UI()-------------------------------\");\r\n\r\n  const {\r\n    divId: divId = \"\",\r\n    data: data = irisData, \r\n    width: width = 600,\r\n    height: height = 460,\r\n    colors: colors = [\"red\", \"blue\", \"orange\", \"green\", \"purple\", \"pink\", \"yellow\"],\r\n    loadIrisOnStart: loadIrisOnStart = false,\r\n  } = options;\r\n  const targetDivId = divId;\r\n\r\n\r\n  // use the div provided in the function call or create a new one\r\n  // Resolve target container and avoid redundant lookups\r\n  const currentDivNum = pcaDt.data.divNum;\r\n  let div = targetDivId ? document.getElementById(targetDivId) : null;\r\n  if (div) {\r\n    console.log(\"plot div provided in function parameters. divId:\", targetDivId);\r\n    div.innerHTML = \"\";\r\n  } else {\r\n      div = document.createElement(\"div\");\r\n      div.id = targetDivId || 'pca_UI' + currentDivNum;\r\n      console.log(\"div NOT provided within function options or doesn't exist... created a new div with id: \", div.id, \"and appended to document body!\");\r\n      const plotsPanel = document.getElementById(\"plotsPanel\");\r\n      (plotsPanel || document.body).appendChild(div);\r\n      //pcaDt.data.divNum = currentDivNum + 1;\r\n    }\r\n\r\n  // Create loading message div\r\n  const loadingDiv = document.createElement('div');\r\n  loadingDiv.id = 'loadingMessage_' + currentDivNum;\r\n  loadingDiv.style.display = 'none';\r\n  loadingDiv.style.padding = '10px';\r\n  loadingDiv.style.margin = '10px 0';\r\n  loadingDiv.style.backgroundColor = '#e3f2fd';\r\n  loadingDiv.style.border = '1px solid #2196F3';\r\n  loadingDiv.style.borderRadius = '4px';\r\n  loadingDiv.textContent = 'Processing data...';\r\n\r\n  // Create error message div\r\n  const errorDiv = document.createElement('div');\r\n  errorDiv.id = 'errorMessage_' + currentDivNum;\r\n  errorDiv.style.display = 'none';\r\n  errorDiv.style.padding = '10px';\r\n  errorDiv.style.margin = '10px 0';\r\n  errorDiv.style.backgroundColor = '#ffebee';\r\n  errorDiv.style.border = '1px solid #f44336';\r\n  errorDiv.style.borderRadius = '4px';\r\n  errorDiv.style.color = '#c62828';\r\n\r\n  // Iris data button\r\n  const irisDataButton = document.createElement('button');\r\n  irisDataButton.id = 'irisDataButton_' + currentDivNum;\r\n  irisDataButton.textContent = 'Load Iris Data';\r\n  irisDataButton.setAttribute('aria-label', 'Load built-in iris dataset');\r\n  irisDataButton.style.marginRight = '10px';\r\n  irisDataButton.style.padding = '5px 10px';\r\n  \r\n  // File input button\r\n  const fileInput = document.createElement('input');\r\n  fileInput.id = 'fileInput_' + currentDivNum;\r\n  fileInput.setAttribute('type', 'file');\r\n  fileInput.setAttribute('accept', '.csv');\r\n  fileInput.setAttribute('aria-label', 'Upload CSV file for PCA analysis');\r\n  \r\n  // File input label for accessibility\r\n  const fileLabel = document.createElement('label');\r\n  fileLabel.setAttribute('for', fileInput.id);\r\n  fileLabel.textContent = 'Or upload CSV file: ';\r\n  fileLabel.style.marginLeft = '10px';\r\n  \r\n  div.appendChild(irisDataButton);\r\n  div.appendChild(fileLabel);\r\n  div.appendChild(fileInput);\r\n  div.appendChild(document.createElement('br'));\r\n  div.appendChild(loadingDiv);\r\n  div.appendChild(errorDiv);\r\n  div.appendChild(document.createElement('br'));\r\n\r\n  // Create plot div\r\n  const plotDiv = document.createElement(\"div\");\r\n  plotDiv.id = 'pcaplotDiv_' + currentDivNum;\r\n  div.appendChild(plotDiv);\r\n\r\n  // Create textbox div\r\n  const textBoxDiv = document.createElement(\"div\");\r\n  textBoxDiv.id = 'textBoxDiv_' + currentDivNum;\r\n  textBoxDiv.style.alignContent = \"center\";\r\n  div.appendChild(textBoxDiv);\r\n\r\n  // Helper function to show loading state\r\n  const showLoading = () => {\r\n    loadingDiv.style.display = 'block';\r\n    errorDiv.style.display = 'none';\r\n  };\r\n\r\n  // Helper function to hide loading state\r\n  const hideLoading = () => {\r\n    loadingDiv.style.display = 'none';\r\n  };\r\n\r\n  // Helper function to show error\r\n  const showError = (message) => {\r\n    errorDiv.textContent = message;\r\n    errorDiv.style.display = 'block';\r\n    loadingDiv.style.display = 'none';\r\n  };\r\n\r\n  // Helper function to validate and render data\r\n  const renderData = async (json, csv) => {\r\n    try {\r\n      showLoading();\r\n      \r\n      // Validate that data has numeric columns\r\n      const numericData = removeNonNumberValues(json);\r\n      if (numericData.length === 0 || Object.keys(numericData[0]).length === 0) {\r\n        throw new Error('No numeric columns found in data. PCA requires numeric data.');\r\n      }\r\n\r\n      // Clear previous content\r\n      plotDiv.innerHTML = '';\r\n      textBoxDiv.innerHTML = '';\r\n\r\n      // PCA plot and text box with options\r\n      await pca_plot({\r\n        data: json, \r\n        divId: plotDiv.id,\r\n        width: width,\r\n        height: height,\r\n        colors: colors\r\n      });\r\n      \r\n      await textBox({text: csv, divId: textBoxDiv.id});\r\n      \r\n      hideLoading();\r\n    } catch (error) {\r\n      console.error('Error rendering data:', error);\r\n      showError(`Error: ${error.message}`);\r\n    }\r\n  };\r\n\r\n  // Event listener for file input (remove old listener if exists)\r\n  const handleFileChange = async (event) => {\r\n    const file = event.target.files[0];\r\n    if (!file) return;\r\n\r\n    console.log(currentDivNum, \"fileInput button clicked!\");\r\n\r\n    // Validate file type\r\n    if (!file.name.endsWith('.csv')) {\r\n      showError('Please upload a CSV file.');\r\n      return;\r\n    }\r\n\r\n    const reader = new FileReader();\r\n    \r\n    reader.onload = async function (e) {\r\n      try {\r\n        const csv = e.target.result;\r\n        \r\n        // Validate CSV is not empty\r\n        if (!csv || csv.trim().length === 0) {\r\n          throw new Error('File is empty.');\r\n        }\r\n        \r\n        const json = await csvToJson(csv);\r\n        \r\n        // Validate JSON data\r\n        if (!json || json.length === 0) {\r\n          throw new Error('No valid data found in CSV file.');\r\n        }\r\n\r\n        // Store data\r\n        pcaDt.data.file.json = json;\r\n        pcaDt.data.file.csv = csv;\r\n\r\n        await renderData(json, csv);\r\n      } catch (error) {\r\n        console.error('Error processing file:', error);\r\n        showError(`Error processing file: ${error.message}`);\r\n      }\r\n    };\r\n    \r\n    reader.onerror = function () {\r\n      showError('Error reading the file. Please try again.');\r\n    };\r\n    \r\n    reader.readAsText(file);\r\n  };\r\n\r\n  // Remove old event listener if it exists and add new one\r\n  fileInput.removeEventListener('change', handleFileChange);\r\n  fileInput.addEventListener('change', handleFileChange);\r\n\r\n  // Event listener for iris data button\r\n  const handleIrisClick = async function () {\r\n    console.log(currentDivNum, \"load iris data button clicked!\");\r\n    await renderData(pcaDt.data.iris.json, pcaDt.data.iris.csv);\r\n  };\r\n\r\n  irisDataButton.removeEventListener('click', handleIrisClick);\r\n  irisDataButton.addEventListener('click', handleIrisClick);\r\n\r\n  // Load iris data on initialization if requested\r\n  if (loadIrisOnStart) {\r\n    await renderData(pcaDt.data.iris.json, pcaDt.data.iris.csv);\r\n  }\r\n\r\n  pcaDt.data.divNum += 1;\r\n\r\n  return div;\r\n}\r\n\r\n\r\n\r\n\r\nasync function pcaPlotly2DPlot(data, labels) {\r\n  var eigenvectors = imports.npm_pcajs.getEigenVectors(data);\r\n  // var first = imports.npm_pcajs.computePercentageExplained(vectors,vectors[0])\r\n  var topTwo = imports.npm_pcajs.computePercentageExplained(eigenvectors, eigenvectors[0], eigenvectors[1])\r\n  // // const explainedVariance = imports.npm_pcajs.getExplainedVariance();\r\n\r\n  // //console.log(\"vectors\",vectors)\r\n  // //console.log(\"first\",first)\r\n  //console.log(\"topTwo\", topTwo)\r\n  //console.log(\"eigenvectors\", eigenvectors)\r\n  //console.log(\"eigenvectors.map(row => row[0])\", eigenvectors[0].vector)\r\n  //console.log(\"eigenvectors.map(row => row[1])\", eigenvectors[1].vector)\r\n\r\n  const numComponents = 2\r\n  const pcScores = data.map(row => {\r\n    const transformedRow = [];\r\n    for (let i = 0; i < numComponents; i++) {\r\n      transformedRow.push(row.reduce((sum, val, idx) => sum + val * eigenvectors[idx][i], 0));\r\n    }\r\n    return transformedRow;\r\n  });\r\n  //console.log(\"pcScores\", pcScores)\r\n  const pc1 = eigenvectors[0].vector //eigenvectors.map(row => row[0]);\r\n  const pc2 = eigenvectors[1].vector //eigenvectors.map(row => row[1]);\r\n  // For 3D plot\r\n  // const pc3 = eigenvectors[2].vector//pcScores.map(row => row[2]);\r\n\r\n  const trace3d = {\r\n    x: pc1,\r\n    y: pc2,\r\n    // z: pc3,\r\n    mode: 'markers',\r\n    type: 'scatter',\r\n    marker: {\r\n      size: 4,\r\n      opacity: 0.8\r\n    }\r\n  };\r\n\r\n  const layout2d = {\r\n    // margin: {\r\n    //   l: 150,\r\n    //   r: 70,\r\n    //   b: 150,\r\n    //   t: 50\r\n    // },\r\n    title: {\r\n      text: '3D PCA Plot',\r\n      x: 0.5,\r\n      xanchor: 'center'\r\n    },\r\n    scene: {\r\n      xaxis: {\r\n        title: 'PC1',\r\n        titlefont: {\r\n          color: 'red',\r\n          family: 'Arial, Open Sans',\r\n          size: 12\r\n        }\r\n      },\r\n      yaxis: {\r\n        title: 'PC2'\r\n      },\r\n      // zaxis: { title: 'Principal Component 3' }\r\n    }\r\n  };\r\n  // Create the plot div\r\n  const pca_plot3 = document.createElement(\"div\")\r\n  pca_plot3.id = 'pca_plot3'\r\n  // pca_plot3.style.width = 400//\"auto\";\r\n  // pca_plot3.style.height = 400//\"auto\";\r\n\r\n  const plotsPanel = document.getElementById(\"plotsPanel\");\r\n  (plotsPanel || document.body).appendChild(pca_plot3);\r\n  // pca_plot2.append(document.createElement('br'));\r\n  await imports.Plotly.newPlot('pca_plot3', [trace3d], layout2d);\r\n}\r\n// pcaPlotlyPlot4(data)\r\n// await pcaPlotly3DPlot(pcaData.irisData.irisNumbersOnly, irisLabels);\r\n// await pcaPlotly2DPlot(pcaData.irisData.irisNumbersOnly, irisLabels);\r\n// await pcaPlotly2DPlot(data, labels);","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.TSNE = void 0;\r\nvar tsne_1 = require(\"./tsne\");\r\nObject.defineProperty(exports, \"TSNE\", { enumerable: true, get: function () { return tsne_1.TSNE; } });\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.TSNE = void 0;\r\nclass TSNE {\r\n    constructor(opt) {\r\n        // return 0 mean unit standard deviation random number\r\n        this.returnV = false;\r\n        this.vValue = 0.0;\r\n        this.iter = 0;\r\n        opt = opt || {};\r\n        this.perplexity = this.getopt(opt, 'perplexity', 30); // effective number of nearest neighbors\r\n        this.dim = this.getopt(opt, 'dim', 2); // by default 2-D tSNE\r\n        this.epsilon = this.getopt(opt, 'epsilon', 10); // learning rate\r\n    }\r\n    assert(condition, message) {\r\n        if (!condition) {\r\n            throw message || 'Assertion failed';\r\n        }\r\n    }\r\n    // syntax sugar\r\n    getopt(opt, field, defaultval) {\r\n        if (opt.hasOwnProperty(field)) {\r\n            return opt[field];\r\n        }\r\n        else {\r\n            return defaultval;\r\n        }\r\n    }\r\n    gaussRandom() {\r\n        if (this.returnV) {\r\n            this.returnV = false;\r\n            return this.vValue;\r\n        }\r\n        const u = 2 * Math.random() - 1;\r\n        const v = 2 * Math.random() - 1;\r\n        const r = u * u + v * v;\r\n        if (r === 0 || r > 1) {\r\n            return this.gaussRandom();\r\n        }\r\n        const c = Math.sqrt(-2 * Math.log(r) / r);\r\n        this.vValue = v * c; // cache this for next function call for efficiency\r\n        this.returnV = true;\r\n        return u * c;\r\n    }\r\n    // return random normal number\r\n    randn(mu, std) { return mu + this.gaussRandom() * std; }\r\n    // utilitity that creates contiguous vector of zeros of size n\r\n    zeros(n) {\r\n        if (typeof (n) === 'undefined' || isNaN(n)) {\r\n            return [];\r\n        }\r\n        if (typeof ArrayBuffer === 'undefined') {\r\n            // lacking browser support\r\n            const arr = new Array(n);\r\n            for (let i = 0; i < n; i++) {\r\n                arr[i] = 0;\r\n            }\r\n            return arr;\r\n        }\r\n        else {\r\n            return new Float64Array(n); // typed arrays are faster\r\n        }\r\n    }\r\n    // utility that returns 2d array filled with random numbers\r\n    // or with value s, if provided\r\n    randn2d(n, d, s) {\r\n        const uses = typeof s !== 'undefined';\r\n        const x = [];\r\n        for (let i = 0; i < n; i++) {\r\n            const xhere = [];\r\n            for (let j = 0; j < d; j++) {\r\n                if (uses) {\r\n                    xhere.push(s);\r\n                }\r\n                else {\r\n                    xhere.push(this.randn(0.0, 1e-4));\r\n                }\r\n            }\r\n            x.push(xhere);\r\n        }\r\n        return x;\r\n    }\r\n    // compute L2 distance between two vectors\r\n    L2(x1, x2) {\r\n        const D = x1.length;\r\n        let d = 0;\r\n        for (let i = 0; i < D; i++) {\r\n            const x1i = x1[i];\r\n            const x2i = x2[i];\r\n            d += (x1i - x2i) * (x1i - x2i);\r\n        }\r\n        return d;\r\n    }\r\n    // compute pairwise distance in all vectors in X\r\n    xtod(X) {\r\n        const N = X.length;\r\n        const dist = this.zeros(N * N); // allocate contiguous array\r\n        for (let i = 0; i < N; i++) {\r\n            for (let j = i + 1; j < N; j++) {\r\n                const d = this.L2(X[i], X[j]);\r\n                dist[i * N + j] = d;\r\n                dist[j * N + i] = d;\r\n            }\r\n        }\r\n        return dist;\r\n    }\r\n    // compute (p_{i|j} + p_{j|i})/(2n)\r\n    d2p(D, perplexity, tol) {\r\n        const nf = Math.sqrt(D.length); // this better be an integer\r\n        const n = Math.floor(nf);\r\n        this.assert(n === nf, 'D should have square number of elements.');\r\n        const hTarget = Math.log(perplexity); // target entropy of distribution\r\n        const P = this.zeros(n * n); // temporary probability matrix\r\n        const prow = this.zeros(n); // a temporary storage compartment\r\n        for (let i = 0; i < n; i++) {\r\n            let betamin = -Infinity;\r\n            let betamax = Infinity;\r\n            let beta = 1; // initial value of precision\r\n            let done = false;\r\n            const maxtries = 50;\r\n            // perform binary search to find a suitable precision beta\r\n            // so that the entropy of the distribution is appropriate\r\n            let num = 0;\r\n            while (!done) {\r\n                //debugger;\r\n                // compute entropy and kernel row with beta precision\r\n                let psum = 0.0;\r\n                for (let j = 0; j < n; j++) {\r\n                    let pj = Math.exp(-D[i * n + j] * beta);\r\n                    if (i === j) {\r\n                        pj = 0;\r\n                    } // we dont care about diagonals\r\n                    prow[j] = pj;\r\n                    psum += pj;\r\n                }\r\n                // normalize p and compute entropy\r\n                let nHere = 0.0;\r\n                for (let j = 0; j < n; j++) {\r\n                    let pj;\r\n                    if (psum === 0) {\r\n                        pj = 0;\r\n                    }\r\n                    else {\r\n                        pj = prow[j] / psum;\r\n                    }\r\n                    prow[j] = pj;\r\n                    if (pj > 1e-7) {\r\n                        nHere -= pj * Math.log(pj);\r\n                    }\r\n                }\r\n                // adjust beta based on result\r\n                if (nHere > hTarget) {\r\n                    // entropy was too high (distribution too diffuse)\r\n                    // so we need to increase the precision for more peaky distribution\r\n                    betamin = beta; // move up the bounds\r\n                    if (betamax === Infinity) {\r\n                        beta = beta * 2;\r\n                    }\r\n                    else {\r\n                        beta = (beta + betamax) / 2;\r\n                    }\r\n                }\r\n                else {\r\n                    // converse case. make distrubtion less peaky\r\n                    betamax = beta;\r\n                    if (betamin === -Infinity) {\r\n                        beta = beta / 2;\r\n                    }\r\n                    else {\r\n                        beta = (beta + betamin) / 2;\r\n                    }\r\n                }\r\n                // stopping conditions: too many tries or got a good precision\r\n                num++;\r\n                if (Math.abs(nHere - hTarget) < tol) {\r\n                    done = true;\r\n                }\r\n                if (num >= maxtries) {\r\n                    done = true;\r\n                }\r\n            }\r\n            // console.log('data point ' + i + ' gets precision ' + beta + ' after ' + num + ' binary search steps.');\r\n            // copy over the final prow to P at row i\r\n            for (let j = 0; j < n; j++) {\r\n                P[i * n + j] = prow[j];\r\n            }\r\n        } // end loop over examples i\r\n        // symmetrize P and normalize it to sum to 1 over all ij\r\n        const pOut = this.zeros(n * n);\r\n        const N2 = n * 2;\r\n        for (let i = 0; i < n; i++) {\r\n            for (let j = 0; j < n; j++) {\r\n                pOut[i * n + j] = Math.max((P[i * n + j] + P[j * n + i]) / N2, 1e-100);\r\n            }\r\n        }\r\n        return pOut;\r\n    }\r\n    // helper function\r\n    sign(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }\r\n    // this function takes a set of high-dimensional points\r\n    // and creates matrix P from them using gaussian kernel\r\n    initDataRaw(X) {\r\n        const N = X.length;\r\n        const D = X[0].length;\r\n        this.assert(N > 0, ' X is empty? You must have some data!');\r\n        this.assert(D > 0, ' X[0] is empty? Where is the data?');\r\n        const dists = this.xtod(X); // convert X to distances using gaussian kernel\r\n        this.P = this.d2p(dists, this.perplexity, 1e-4); // attach to object\r\n        this.N = N; // back up the size of the dataset\r\n        this.initSolution(); // refresh this\r\n    }\r\n    // this function takes a given distance matrix and creates\r\n    // matrix P from them.\r\n    // D is assumed to be provided as a list of lists, and should be symmetric\r\n    initDataDist(D) {\r\n        const N = D.length;\r\n        this.assert(N > 0, ' X is empty? You must have some data!');\r\n        // convert D to a (fast) typed array version\r\n        const dists = this.zeros(N * N); // allocate contiguous array\r\n        for (let i = 0; i < N; i++) {\r\n            for (let j = i + 1; j < N; j++) {\r\n                const d = D[i][j];\r\n                dists[i * N + j] = d;\r\n                dists[j * N + i] = d;\r\n            }\r\n        }\r\n        this.P = this.d2p(dists, this.perplexity, 1e-4);\r\n        this.N = N;\r\n        this.initSolution(); // refresh this\r\n    }\r\n    // (re)initializes the solution to random\r\n    initSolution() {\r\n        // generate random solution to t-SNE\r\n        this.Y = this.randn2d(this.N, this.dim); // the solution\r\n        this.gains = this.randn2d(this.N, this.dim, 1.0); // step gains to accelerate progress in unchanging directions\r\n        this.ystep = this.randn2d(this.N, this.dim, 0.0); // momentum accumulator\r\n        this.iter = 0;\r\n    }\r\n    // return pointer to current solution\r\n    getSolution() {\r\n        return this.Y;\r\n    }\r\n    // perform a single step of optimization to improve the embedding\r\n    step() {\r\n        this.iter += 1;\r\n        const N = this.N;\r\n        const cg = this.costGrad(this.Y); // evaluate gradient\r\n        const cost = cg.cost;\r\n        const grad = cg.grad;\r\n        // perform gradient step\r\n        const ymean = this.zeros(this.dim);\r\n        for (let i = 0; i < N; i++) {\r\n            for (let d = 0; d < this.dim; d++) {\r\n                const gid = grad[i][d];\r\n                const sid = this.ystep[i][d];\r\n                const gainid = this.gains[i][d];\r\n                // compute gain update\r\n                let newgain = this.sign(gid) === this.sign(sid) ? gainid * 0.8 : gainid + 0.2;\r\n                if (newgain < 0.01) {\r\n                    newgain = 0.01;\r\n                } // clamp\r\n                this.gains[i][d] = newgain; // store for next turn\r\n                // compute momentum step direction\r\n                const momval = this.iter < 250 ? 0.5 : 0.8;\r\n                const newsid = momval * sid - this.epsilon * newgain * grad[i][d];\r\n                this.ystep[i][d] = newsid; // remember the step we took\r\n                // step!\r\n                this.Y[i][d] += newsid;\r\n                ymean[d] += this.Y[i][d]; // accumulate mean so that we can center later\r\n            }\r\n        }\r\n        // reproject Y to be zero mean\r\n        for (let i = 0; i < N; i++) {\r\n            for (let d = 0; d < this.dim; d++) {\r\n                this.Y[i][d] -= ymean[d] / N;\r\n            }\r\n        }\r\n        //if(this.iter%100===0) console.log('iter ' + this.iter + ', cost: ' + cost);\r\n        return cost; // return current cost\r\n    }\r\n    // for debugging: gradient check\r\n    debugGrad() {\r\n        const N = this.N;\r\n        const cg = this.costGrad(this.Y); // evaluate gradient\r\n        const cost = cg.cost;\r\n        const grad = cg.grad;\r\n        const e = 1e-5;\r\n        for (let i = 0; i < N; i++) {\r\n            for (let d = 0; d < this.dim; d++) {\r\n                const yold = this.Y[i][d];\r\n                this.Y[i][d] = yold + e;\r\n                const cg0 = this.costGrad(this.Y);\r\n                this.Y[i][d] = yold - e;\r\n                const cg1 = this.costGrad(this.Y);\r\n                const analytic = grad[i][d];\r\n                const numerical = (cg0.cost - cg1.cost) / (2 * e);\r\n                console.log(i + ',' + d + ': gradcheck analytic: ' + analytic + ' vs. numerical: ' + numerical);\r\n                this.Y[i][d] = yold;\r\n            }\r\n        }\r\n    }\r\n    // return cost and gradient, given an arrangement\r\n    costGrad(Y) {\r\n        const N = this.N;\r\n        const dim = this.dim; // dim of output space\r\n        const P = this.P;\r\n        const pmul = this.iter < 100 ? 4 : 1; // trick that helps with local optima\r\n        // compute current Q distribution, unnormalized first\r\n        const quArr = this.zeros(N * N);\r\n        let qsum = 0.0;\r\n        for (let i = 0; i < N; i++) {\r\n            for (let j = i + 1; j < N; j++) {\r\n                let dsum = 0.0;\r\n                for (let d = 0; d < dim; d++) {\r\n                    const dhere = Y[i][d] - Y[j][d];\r\n                    dsum += dhere * dhere;\r\n                }\r\n                const qu = 1.0 / (1.0 + dsum); // Student t-distribution\r\n                quArr[i * N + j] = qu;\r\n                quArr[j * N + i] = qu;\r\n                qsum += 2 * qu;\r\n            }\r\n        }\r\n        // normalize Q distribution to sum to 1\r\n        const NN = N * N;\r\n        const Q = this.zeros(NN);\r\n        for (let q = 0; q < NN; q++) {\r\n            Q[q] = Math.max(quArr[q] / qsum, 1e-100);\r\n        }\r\n        let cost = 0.0;\r\n        const grad = [];\r\n        for (let i = 0; i < N; i++) {\r\n            const gsum = new Array(dim); // init grad for point i\r\n            for (let d = 0; d < dim; d++) {\r\n                gsum[d] = 0.0;\r\n            }\r\n            for (let j = 0; j < N; j++) {\r\n                cost += -P[i * N + j] * Math.log(Q[i * N + j]); // accumulate cost (the non-constant portion at least...)\r\n                const premult = 4 * (pmul * P[i * N + j] - Q[i * N + j]) * quArr[i * N + j];\r\n                for (let d = 0; d < dim; d++) {\r\n                    gsum[d] += premult * (Y[i][d] - Y[j][d]);\r\n                }\r\n            }\r\n            grad.push(gsum);\r\n        }\r\n        return { cost, grad };\r\n    }\r\n}\r\nexports.TSNE = TSNE;\r\n","import * as d3 from \"d3\";\r\nimport d3tip from \"d3-tip\";\r\nimport { TSNE } from '@keckelt/tsne';\r\nimport irisData from \"./data/irisData.js\";\r\nimport spiralData from \"./data/spiralData.js\";\r\nimport { addPlotTitle } from \"./plotTitle.mjs\";\r\nimport { attachPlotZoom } from \"./plotZoom.mjs\";\r\n\r\n\r\nexport const tsneDt = {\r\n  data: {\r\n    divNum: 1,\r\n    iris: {\r\n      json: irisData,\r\n      csv: null\r\n    },\r\n    spiral: {\r\n      json: spiralData,\r\n      csv: null\r\n    },\r\n    file: {\r\n      json: null,\r\n      csv: null\r\n    }\r\n  }\r\n}\r\n\r\nexport async function tsne_plot(options = {}) {\r\n  console.log(\"RUNNING: tsne_plot() function----------\");\r\n\r\n  const {\r\n    divId: divId = \"\",\r\n    data: data = irisData,\r\n    width: width = 600, // standardized default across all clustjs plots\r\n    height: height = 460,\r\n    colors: colors = [\"red\", \"blue\", \"orange\", \"green\", \"purple\", \"pink\", \"yellow\"],\r\n    margin: userMargin = {}, // e.g. { top: 25, right: 170, bottom: 45, left: 45 } — override any side\r\n    title: title = \"t-SNE Plot\", // string, or null/\"\" to hide\r\n    zoomable: zoomable = true, // wheel to zoom, drag to pan\r\n    perplexity: perplexity = 30,\r\n    epsilon: epsilon = 10,\r\n    iterations: iterations = 1000\r\n  } = options;\r\n  const targetDivId = divId;\r\n\r\n  // Resolve target container\r\n  let div = targetDivId ? document.getElementById(targetDivId) : null;\r\n  if (div) {\r\n    console.log(\"plot div provided in function parameters. divId:\", targetDivId);\r\n    div.innerHTML = \"\";\r\n  } else {\r\n    const currentDivNum = tsneDt.data.divNum;\r\n    div = document.createElement(\"div\");\r\n    div.id = targetDivId || 'tsne_plot' + currentDivNum;\r\n    console.log(\"div NOT provided within function options or doesn't exist... created a new div with id: \", div.id);\r\n    const plotsPanel = document.getElementById(\"plotsPanel\");\r\n    (plotsPanel || document.body).appendChild(div);\r\n    tsneDt.data.divNum = currentDivNum + 1;\r\n  }\r\n\r\n  // Extract numeric and categorical columns\r\n  const sample = data[0] || {};\r\n  const keys = Object.keys(sample);\r\n  const numericKeys = keys.filter(k => typeof sample[k] === \"number\");\r\n  const categoryKey = keys.find(k => typeof sample[k] !== \"number\");\r\n\r\n  // Extract feature matrix X and labels\r\n  const X = data.map(row => numericKeys.map(k => row[k]));\r\n  const labels = categoryKey ? data.map(row => row[categoryKey]) : data.map((_, i) => `row${i}`);\r\n\r\n  // Standardize features\r\n  const Xs = standardize(X);\r\n\r\n  // Run t-SNE using @keckelt/tsne API -------------------------------------------\r\n  // This library requires separate initialization steps\r\n\r\n// 1.  Create the TSNE model with just options (no data)\r\n// 2.  Call model.initDataRaw(Xs) to initialize with the data\r\n// 3.  Call model.initSolution() to set up the initial random solution\r\n// 4.  Then run the iterations with model.step()\r\n// 5.  Finally get the result with model.getSolution()\r\n\r\n  const model = new TSNE({\r\n    dim: 2,\r\n    perplexity: perplexity,\r\n    earlyExaggeration: 4.0,\r\n    learningRate: epsilon,\r\n    nIter: iterations,\r\n    metric: 'euclidean'\r\n  });\r\n\r\n  // Initialize with raw data\r\n  model.initDataRaw(Xs);\r\n  \r\n  // Initialize the solution (random initial positions)\r\n  model.initSolution();\r\n\r\n  // Run all iterations\r\n  for (let i = 0; i < iterations; i++) {\r\n    model.step();\r\n  }\r\n\r\n  // Get output coordinates\r\n  const embedding = model.getSolution();\r\n\r\n  // Create scores array similar to PCA/UMAP\r\n  const scores = embedding.map((xy, i) => ({\r\n    group: labels[i],\r\n    name: categoryKey ? String(labels[i]) + \"_\" + i : \"id_\" + i,\r\n    tSNE1: xy[0],\r\n    tSNE2: xy[1]\r\n  }));\r\n\r\n  const groups = [...new Set(scores.map(d => d.group))];\r\n  const color = d3.scaleOrdinal(colors).domain(groups);\r\n\r\n  const fontFamily = 'monospace';\r\n  const maxOpacity = 0.7;\r\n  const margin = {\r\n    top: 42, // headroom so the title clears the plot area\r\n    right: 170,\r\n    bottom: 45,\r\n    left: 45,\r\n    ...userMargin\r\n  };\r\n\r\n  // Compute padded domain for tSNE1\r\n  const minTSNE1 = d3.min(scores, d => d.tSNE1);\r\n  const maxTSNE1 = d3.max(scores, d => d.tSNE1);\r\n  const rangeTSNE1 = maxTSNE1 - minTSNE1;\r\n  const paddedMin = minTSNE1 - rangeTSNE1 * 0.10;\r\n  const paddedMax = maxTSNE1 + rangeTSNE1 * 0.10;\r\n\r\n  const x = d3.scaleLinear()\r\n    .domain([paddedMin, paddedMax])\r\n    .range([margin.left, width - margin.right]);\r\n\r\n  const xAxis = g => g\r\n    .attr(\"transform\", `translate(0,${height - margin.bottom + 5})`)\r\n    .call(d3.axisBottom(x).ticks(6).tickSizeOuter(0))\r\n    .call(g => g.select(\".domain\")\r\n      .attr(\"stroke\", \"#000\")\r\n      .attr(\"stroke-width\", 1))\r\n    .call(g => g.selectAll(\".tick line\")\r\n      .attr(\"stroke\", \"#000\")\r\n      .attr(\"stroke-width\", 1))\r\n    .call(g => g.selectAll(\".tick text\")\r\n      .attr(\"fill\", \"#000\")\r\n      .style(\"font-size\", \"12px\"))\r\n    .call(g => g.append(\"text\")\r\n      .attr(\"x\", width - margin.right)\r\n      .attr(\"y\", 35)\r\n      .attr(\"fill\", \"#000\")\r\n      .attr(\"font-weight\", \"bold\")\r\n      .attr(\"text-anchor\", \"end\")\r\n      .text(\"t-SNE 1\"));\r\n\r\n  const y = d3.scaleLinear()\r\n    .domain(d3.extent(scores, d => d.tSNE2))\r\n    .range([height - margin.bottom, margin.top]);\r\n\r\n  const yAxis = g => g\r\n    .attr(\"transform\", `translate(${margin.left - 5},0)`)\r\n    .call(d3.axisLeft(y).ticks(6).tickSizeOuter(0))\r\n    .call(g => g.select(\".domain\")\r\n      .attr(\"stroke\", \"#000\")\r\n      .attr(\"stroke-width\", 1))\r\n    .call(g => g.selectAll(\".tick line\")\r\n      .attr(\"stroke\", \"#000\")\r\n      .attr(\"stroke-width\", 1))\r\n    .call(g => g.selectAll(\".tick text\")\r\n      .attr(\"fill\", \"#000\")\r\n      .style(\"font-size\", \"12px\"))\r\n    .call(g => g.append(\"text\")\r\n      .attr(\"x\", -margin.top)\r\n      .attr(\"y\", margin.top - 5)\r\n      .attr(\"fill\", \"#000\")\r\n      .attr(\"font-weight\", \"bold\")\r\n      .attr(\"text-anchor\", \"start\")\r\n      .text(\"t-SNE 2\"));\r\n\r\n  const svg = d3.create(\"svg\")\r\n    .style(\"background\", \"white\")\r\n    .style(\"overflow\", \"visible\");\r\n\r\n  svg.attr(\"id\", \"svgid_tsne\");\r\n\r\n  const g = svg\r\n    .attr('width', width)\r\n    .attr('height', height)\r\n    .append('g');\r\n\r\n  // Zoom/pan (shared helper, see plotZoom.mjs)\r\n  attachPlotZoom(svg, g, { enabled: zoomable });\r\n\r\n  // Title (shared style, centered over the plot area; inside the zoom layer so it\r\n  // moves with the plot)\r\n  addPlotTitle(g, title, margin.left + (width - margin.left - margin.right) / 2, Math.max(16, margin.top / 2));\r\n\r\n  g.append(\"g\").call(xAxis);\r\n  g.append(\"g\").call(yAxis);\r\n\r\n  g.append(\"rect\")\r\n    .attr(\"id\", \"background\")\r\n    .attr(\"x\", margin.left)\r\n    .attr(\"y\", margin.top)\r\n    .attr(\"width\", width - margin.left - margin.right)\r\n    .attr(\"height\", height - margin.top - margin.bottom)\r\n    .attr(\"fill\", \"white\")\r\n    .on(\"click\", (event, d) => selectGroup(null, d, maxOpacity));\r\n\r\n  const gPoints = g.append(\"g\").attr(\"class\", \"gPoints\").style(\"isolation\", \"isolate\");\r\n\r\n  const tooltip = d3tip()\r\n    .style('border', 'solid 2px navy')\r\n    .style('background-color', 'white')\r\n    .style(\"color\", \"#000\")\r\n    .style('border-radius', '7px')\r\n    .style('padding', '8px 12px')\r\n    .style('font-family', fontFamily)\r\n    .style('font-size', '12px')\r\n    .style('max-width', '250px')\r\n    .style('width', 'auto')\r\n    .html((event, d) => `\r\n      <div style='line-height: 1.5;'>\r\n        <div><strong>Name:</strong> ${d.name}</div>\r\n        <div><strong>t-SNE 1:</strong> ${d.tSNE1.toFixed(2)}</div>\r\n        <div><strong>t-SNE 2:</strong> ${d.tSNE2.toFixed(2)}</div>\r\n      </div>`);\r\n\r\n  svg.call(tooltip);\r\n\r\n  gPoints\r\n    .selectAll(\"circle\")\r\n    .data(scores)\r\n    .enter()\r\n    .append(\"circle\")\r\n    .attr(\"class\", \"points\")\r\n    .attr(\"cx\", d => x(d.tSNE1))\r\n    .attr(\"cy\", d => y(d.tSNE2))\r\n    .attr(\"fill\", d => color(d.group))\r\n    .attr(\"opacity\", 0.7)\r\n    .attr(\"r\", 4)\r\n    .on('mouseover', tooltip.show)\r\n    .on('mouseout', tooltip.hide);\r\n\r\n  const key = g.append(\"g\")\r\n    .selectAll(\"rect\")\r\n    .data(groups);\r\n\r\n  key.enter().append(\"rect\")\r\n    .attr(\"class\", \"keyRects\")\r\n    .attr(\"x\", width - margin.left - 50)\r\n    .attr(\"y\", (d, i) => i * 20)\r\n    .attr(\"width\", 12)\r\n    .attr(\"height\", 12)\r\n    .attr(\"fill\", d => color(d))\r\n    .on(\"click\", (event, d) => selectGroup(null, d, maxOpacity));\r\n\r\n  key.enter().append(\"text\")\r\n    .attr(\"x\", d => width - margin.left - 30)\r\n    .attr(\"y\", (d, i) => i * 20)\r\n    .attr(\"dy\", \"0.7em\")\r\n    .text(d => `${d}`)\r\n    .style(\"font-size\", \"14px\")\r\n    .on(\"click\", (event, d) => selectGroup(null, d, maxOpacity));\r\n\r\n  div.appendChild(svg.node());\r\n  return svg.node();\r\n\r\n  function selectGroup(ctx, group, maxOpacity) {\r\n    const groupElements = d3.selectAll(\".points\")\r\n      .filter(d => d.group !== group);\r\n    const activeGroup = d3.selectAll(\".keyRects\")\r\n      .filter(d => d === group);\r\n    const otherElements = d3.selectAll(\".points\")\r\n      .filter(d => d.group === group);\r\n    const otherGroups = d3.selectAll(\".keyRects\")\r\n      .filter(d => d !== group);\r\n\r\n    groupElements.transition().attr(\"opacity\", 0.1);\r\n    otherGroups.transition().attr(\"opacity\", 0.1);\r\n    otherElements.transition().attr(\"opacity\", maxOpacity);\r\n    activeGroup.transition().attr(\"opacity\", maxOpacity);\r\n  }\r\n}\r\n\r\nexport const tsne_UI = async (options = {}) => {\r\n  console.log(\"t-SNE UI - not yet implemented\");\r\n  console.log(\"Options:\", options);\r\n  \r\n  // TODO: Implement UI similar to pca_UI with file upload and plot rendering\r\n}\r\n\r\n// Standardize features (recommended for t-SNE)\r\nfunction standardize(X) {\r\n  const n = X.length;\r\n  const d = X[0].length;\r\n\r\n  const mean = Array(d).fill(0);\r\n  const std = Array(d).fill(0);\r\n\r\n  for (const row of X) for (let j = 0; j < d; j++) mean[j] += row[j];\r\n  for (let j = 0; j < d; j++) mean[j] /= n;\r\n\r\n  for (const row of X) for (let j = 0; j < d; j++) std[j] += (row[j] - mean[j]) ** 2;\r\n  for (let j = 0; j < d; j++) std[j] = Math.sqrt(std[j] / (n - 1)) || 1;\r\n\r\n  return X.map(row => row.map((v, j) => (v - mean[j]) / std[j]));\r\n}\r\n","\"use strict\";\r\nvar __values = (this && this.__values) || function(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.reshape2d = exports.rejectionSample = exports.max2d = exports.max = exports.mean = exports.sum = exports.linear = exports.ones = exports.zeros = exports.filled = exports.range = exports.empty = exports.norm = exports.tauRand = exports.tauRandInt = void 0;\r\nfunction tauRandInt(n, random) {\r\n    return Math.floor(random() * n);\r\n}\r\nexports.tauRandInt = tauRandInt;\r\nfunction tauRand(random) {\r\n    return random();\r\n}\r\nexports.tauRand = tauRand;\r\nfunction norm(vec) {\r\n    var e_1, _a;\r\n    var result = 0;\r\n    try {\r\n        for (var vec_1 = __values(vec), vec_1_1 = vec_1.next(); !vec_1_1.done; vec_1_1 = vec_1.next()) {\r\n            var item = vec_1_1.value;\r\n            result += Math.pow(item, 2);\r\n        }\r\n    }\r\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n    finally {\r\n        try {\r\n            if (vec_1_1 && !vec_1_1.done && (_a = vec_1.return)) _a.call(vec_1);\r\n        }\r\n        finally { if (e_1) throw e_1.error; }\r\n    }\r\n    return Math.sqrt(result);\r\n}\r\nexports.norm = norm;\r\nfunction empty(n) {\r\n    var output = [];\r\n    for (var i = 0; i < n; i++) {\r\n        output.push(undefined);\r\n    }\r\n    return output;\r\n}\r\nexports.empty = empty;\r\nfunction range(n) {\r\n    return empty(n).map(function (_, i) { return i; });\r\n}\r\nexports.range = range;\r\nfunction filled(n, v) {\r\n    return empty(n).map(function () { return v; });\r\n}\r\nexports.filled = filled;\r\nfunction zeros(n) {\r\n    return filled(n, 0);\r\n}\r\nexports.zeros = zeros;\r\nfunction ones(n) {\r\n    return filled(n, 1);\r\n}\r\nexports.ones = ones;\r\nfunction linear(a, b, len) {\r\n    return empty(len).map(function (_, i) {\r\n        return a + i * ((b - a) / (len - 1));\r\n    });\r\n}\r\nexports.linear = linear;\r\nfunction sum(input) {\r\n    return input.reduce(function (sum, val) { return sum + val; });\r\n}\r\nexports.sum = sum;\r\nfunction mean(input) {\r\n    return sum(input) / input.length;\r\n}\r\nexports.mean = mean;\r\nfunction max(input) {\r\n    var max = 0;\r\n    for (var i = 0; i < input.length; i++) {\r\n        max = input[i] > max ? input[i] : max;\r\n    }\r\n    return max;\r\n}\r\nexports.max = max;\r\nfunction max2d(input) {\r\n    var max = 0;\r\n    for (var i = 0; i < input.length; i++) {\r\n        for (var j = 0; j < input[i].length; j++) {\r\n            max = input[i][j] > max ? input[i][j] : max;\r\n        }\r\n    }\r\n    return max;\r\n}\r\nexports.max2d = max2d;\r\nfunction rejectionSample(nSamples, poolSize, random) {\r\n    var result = zeros(nSamples);\r\n    for (var i = 0; i < nSamples; i++) {\r\n        var rejectSample = true;\r\n        while (rejectSample) {\r\n            var j = tauRandInt(poolSize, random);\r\n            var broken = false;\r\n            for (var k = 0; k < i; k++) {\r\n                if (j === result[k]) {\r\n                    broken = true;\r\n                    break;\r\n                }\r\n            }\r\n            if (!broken) {\r\n                rejectSample = false;\r\n            }\r\n            result[i] = j;\r\n        }\r\n    }\r\n    return result;\r\n}\r\nexports.rejectionSample = rejectionSample;\r\nfunction reshape2d(x, a, b) {\r\n    var rows = [];\r\n    var count = 0;\r\n    var index = 0;\r\n    if (x.length !== a * b) {\r\n        throw new Error('Array dimensions must match input length.');\r\n    }\r\n    for (var i = 0; i < a; i++) {\r\n        var col = [];\r\n        for (var j = 0; j < b; j++) {\r\n            col.push(x[index]);\r\n            index += 1;\r\n        }\r\n        rows.push(col);\r\n        count += 1;\r\n    }\r\n    return rows;\r\n}\r\nexports.reshape2d = reshape2d;\r\n","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.smallestFlagged = exports.deheapSort = exports.buildCandidates = exports.uncheckedHeapPush = exports.heapPush = exports.rejectionSample = exports.makeHeap = void 0;\r\nvar utils = __importStar(require(\"./utils\"));\r\nfunction makeHeap(nPoints, size) {\r\n    var makeArrays = function (fillValue) {\r\n        return utils.empty(nPoints).map(function () {\r\n            return utils.filled(size, fillValue);\r\n        });\r\n    };\r\n    var heap = [];\r\n    heap.push(makeArrays(-1));\r\n    heap.push(makeArrays(Infinity));\r\n    heap.push(makeArrays(0));\r\n    return heap;\r\n}\r\nexports.makeHeap = makeHeap;\r\nfunction rejectionSample(nSamples, poolSize, random) {\r\n    var result = utils.zeros(nSamples);\r\n    for (var i = 0; i < nSamples; i++) {\r\n        var rejectSample = true;\r\n        var j = 0;\r\n        while (rejectSample) {\r\n            j = utils.tauRandInt(poolSize, random);\r\n            var broken = false;\r\n            for (var k = 0; k < i; k++) {\r\n                if (j === result[k]) {\r\n                    broken = true;\r\n                    break;\r\n                }\r\n            }\r\n            if (!broken)\r\n                rejectSample = false;\r\n        }\r\n        result[i] = j;\r\n    }\r\n    return result;\r\n}\r\nexports.rejectionSample = rejectionSample;\r\nfunction heapPush(heap, row, weight, index, flag) {\r\n    row = Math.floor(row);\r\n    var indices = heap[0][row];\r\n    var weights = heap[1][row];\r\n    var isNew = heap[2][row];\r\n    if (weight >= weights[0]) {\r\n        return 0;\r\n    }\r\n    for (var i = 0; i < indices.length; i++) {\r\n        if (index === indices[i]) {\r\n            return 0;\r\n        }\r\n    }\r\n    return uncheckedHeapPush(heap, row, weight, index, flag);\r\n}\r\nexports.heapPush = heapPush;\r\nfunction uncheckedHeapPush(heap, row, weight, index, flag) {\r\n    var indices = heap[0][row];\r\n    var weights = heap[1][row];\r\n    var isNew = heap[2][row];\r\n    if (weight >= weights[0]) {\r\n        return 0;\r\n    }\r\n    weights[0] = weight;\r\n    indices[0] = index;\r\n    isNew[0] = flag;\r\n    var i = 0;\r\n    var iSwap = 0;\r\n    while (true) {\r\n        var ic1 = 2 * i + 1;\r\n        var ic2 = ic1 + 1;\r\n        var heapShape2 = heap[0][0].length;\r\n        if (ic1 >= heapShape2) {\r\n            break;\r\n        }\r\n        else if (ic2 >= heapShape2) {\r\n            if (weights[ic1] > weight) {\r\n                iSwap = ic1;\r\n            }\r\n            else {\r\n                break;\r\n            }\r\n        }\r\n        else if (weights[ic1] >= weights[ic2]) {\r\n            if (weight < weights[ic1]) {\r\n                iSwap = ic1;\r\n            }\r\n            else {\r\n                break;\r\n            }\r\n        }\r\n        else {\r\n            if (weight < weights[ic2]) {\r\n                iSwap = ic2;\r\n            }\r\n            else {\r\n                break;\r\n            }\r\n        }\r\n        weights[i] = weights[iSwap];\r\n        indices[i] = indices[iSwap];\r\n        isNew[i] = isNew[iSwap];\r\n        i = iSwap;\r\n    }\r\n    weights[i] = weight;\r\n    indices[i] = index;\r\n    isNew[i] = flag;\r\n    return 1;\r\n}\r\nexports.uncheckedHeapPush = uncheckedHeapPush;\r\nfunction buildCandidates(currentGraph, nVertices, nNeighbors, maxCandidates, random) {\r\n    var candidateNeighbors = makeHeap(nVertices, maxCandidates);\r\n    for (var i = 0; i < nVertices; i++) {\r\n        for (var j = 0; j < nNeighbors; j++) {\r\n            if (currentGraph[0][i][j] < 0) {\r\n                continue;\r\n            }\r\n            var idx = currentGraph[0][i][j];\r\n            var isn = currentGraph[2][i][j];\r\n            var d = utils.tauRand(random);\r\n            heapPush(candidateNeighbors, i, d, idx, isn);\r\n            heapPush(candidateNeighbors, idx, d, i, isn);\r\n            currentGraph[2][i][j] = 0;\r\n        }\r\n    }\r\n    return candidateNeighbors;\r\n}\r\nexports.buildCandidates = buildCandidates;\r\nfunction deheapSort(heap) {\r\n    var indices = heap[0];\r\n    var weights = heap[1];\r\n    for (var i = 0; i < indices.length; i++) {\r\n        var indHeap = indices[i];\r\n        var distHeap = weights[i];\r\n        for (var j = 0; j < indHeap.length - 1; j++) {\r\n            var indHeapIndex = indHeap.length - j - 1;\r\n            var distHeapIndex = distHeap.length - j - 1;\r\n            var temp1 = indHeap[0];\r\n            indHeap[0] = indHeap[indHeapIndex];\r\n            indHeap[indHeapIndex] = temp1;\r\n            var temp2 = distHeap[0];\r\n            distHeap[0] = distHeap[distHeapIndex];\r\n            distHeap[distHeapIndex] = temp2;\r\n            siftDown(distHeap, indHeap, distHeapIndex, 0);\r\n        }\r\n    }\r\n    return { indices: indices, weights: weights };\r\n}\r\nexports.deheapSort = deheapSort;\r\nfunction siftDown(heap1, heap2, ceiling, elt) {\r\n    while (elt * 2 + 1 < ceiling) {\r\n        var leftChild = elt * 2 + 1;\r\n        var rightChild = leftChild + 1;\r\n        var swap = elt;\r\n        if (heap1[swap] < heap1[leftChild]) {\r\n            swap = leftChild;\r\n        }\r\n        if (rightChild < ceiling && heap1[swap] < heap1[rightChild]) {\r\n            swap = rightChild;\r\n        }\r\n        if (swap === elt) {\r\n            break;\r\n        }\r\n        else {\r\n            var temp1 = heap1[elt];\r\n            heap1[elt] = heap1[swap];\r\n            heap1[swap] = temp1;\r\n            var temp2 = heap2[elt];\r\n            heap2[elt] = heap2[swap];\r\n            heap2[swap] = temp2;\r\n            elt = swap;\r\n        }\r\n    }\r\n}\r\nfunction smallestFlagged(heap, row) {\r\n    var ind = heap[0][row];\r\n    var dist = heap[1][row];\r\n    var flag = heap[2][row];\r\n    var minDist = Infinity;\r\n    var resultIndex = -1;\r\n    for (var i = 0; i > ind.length; i++) {\r\n        if (flag[i] === 1 && dist[i] < minDist) {\r\n            minDist = dist[i];\r\n            resultIndex = i;\r\n        }\r\n    }\r\n    if (resultIndex >= 0) {\r\n        flag[resultIndex] = 0;\r\n        return Math.floor(ind[resultIndex]);\r\n    }\r\n    else {\r\n        return -1;\r\n    }\r\n}\r\nexports.smallestFlagged = smallestFlagged;\r\n","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n};\r\nvar __read = (this && this.__read) || function (o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n};\r\nvar __values = (this && this.__values) || function(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n};\r\nvar _a;\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.getCSR = exports.normalize = exports.eliminateZeros = exports.multiplyScalar = exports.maximum = exports.subtract = exports.add = exports.pairwiseMultiply = exports.identity = exports.transpose = exports.SparseMatrix = void 0;\r\nvar utils = __importStar(require(\"./utils\"));\r\nvar SparseMatrix = (function () {\r\n    function SparseMatrix(rows, cols, values, dims) {\r\n        this.entries = new Map();\r\n        this.nRows = 0;\r\n        this.nCols = 0;\r\n        if (rows.length !== cols.length || rows.length !== values.length) {\r\n            throw new Error('rows, cols and values arrays must all have the same length');\r\n        }\r\n        this.nRows = dims[0];\r\n        this.nCols = dims[1];\r\n        for (var i = 0; i < values.length; i++) {\r\n            var row = rows[i];\r\n            var col = cols[i];\r\n            this.checkDims(row, col);\r\n            var key = this.makeKey(row, col);\r\n            this.entries.set(key, { value: values[i], row: row, col: col });\r\n        }\r\n    }\r\n    SparseMatrix.prototype.makeKey = function (row, col) {\r\n        return row + \":\" + col;\r\n    };\r\n    SparseMatrix.prototype.checkDims = function (row, col) {\r\n        var withinBounds = row < this.nRows && col < this.nCols;\r\n        if (!withinBounds) {\r\n            throw new Error('row and/or col specified outside of matrix dimensions');\r\n        }\r\n    };\r\n    SparseMatrix.prototype.set = function (row, col, value) {\r\n        this.checkDims(row, col);\r\n        var key = this.makeKey(row, col);\r\n        if (!this.entries.has(key)) {\r\n            this.entries.set(key, { value: value, row: row, col: col });\r\n        }\r\n        else {\r\n            this.entries.get(key).value = value;\r\n        }\r\n    };\r\n    SparseMatrix.prototype.get = function (row, col, defaultValue) {\r\n        if (defaultValue === void 0) { defaultValue = 0; }\r\n        this.checkDims(row, col);\r\n        var key = this.makeKey(row, col);\r\n        if (this.entries.has(key)) {\r\n            return this.entries.get(key).value;\r\n        }\r\n        else {\r\n            return defaultValue;\r\n        }\r\n    };\r\n    SparseMatrix.prototype.getAll = function (ordered) {\r\n        if (ordered === void 0) { ordered = true; }\r\n        var rowColValues = [];\r\n        this.entries.forEach(function (value) {\r\n            rowColValues.push(value);\r\n        });\r\n        if (ordered) {\r\n            rowColValues.sort(function (a, b) {\r\n                if (a.row === b.row) {\r\n                    return a.col - b.col;\r\n                }\r\n                else {\r\n                    return a.row - b.row;\r\n                }\r\n            });\r\n        }\r\n        return rowColValues;\r\n    };\r\n    SparseMatrix.prototype.getDims = function () {\r\n        return [this.nRows, this.nCols];\r\n    };\r\n    SparseMatrix.prototype.getRows = function () {\r\n        return Array.from(this.entries, function (_a) {\r\n            var _b = __read(_a, 2), key = _b[0], value = _b[1];\r\n            return value.row;\r\n        });\r\n    };\r\n    SparseMatrix.prototype.getCols = function () {\r\n        return Array.from(this.entries, function (_a) {\r\n            var _b = __read(_a, 2), key = _b[0], value = _b[1];\r\n            return value.col;\r\n        });\r\n    };\r\n    SparseMatrix.prototype.getValues = function () {\r\n        return Array.from(this.entries, function (_a) {\r\n            var _b = __read(_a, 2), key = _b[0], value = _b[1];\r\n            return value.value;\r\n        });\r\n    };\r\n    SparseMatrix.prototype.forEach = function (fn) {\r\n        this.entries.forEach(function (value) { return fn(value.value, value.row, value.col); });\r\n    };\r\n    SparseMatrix.prototype.map = function (fn) {\r\n        var vals = [];\r\n        this.entries.forEach(function (value) {\r\n            vals.push(fn(value.value, value.row, value.col));\r\n        });\r\n        var dims = [this.nRows, this.nCols];\r\n        return new SparseMatrix(this.getRows(), this.getCols(), vals, dims);\r\n    };\r\n    SparseMatrix.prototype.toArray = function () {\r\n        var _this = this;\r\n        var rows = utils.empty(this.nRows);\r\n        var output = rows.map(function () {\r\n            return utils.zeros(_this.nCols);\r\n        });\r\n        this.entries.forEach(function (value) {\r\n            output[value.row][value.col] = value.value;\r\n        });\r\n        return output;\r\n    };\r\n    return SparseMatrix;\r\n}());\r\nexports.SparseMatrix = SparseMatrix;\r\nfunction transpose(matrix) {\r\n    var cols = [];\r\n    var rows = [];\r\n    var vals = [];\r\n    matrix.forEach(function (value, row, col) {\r\n        cols.push(row);\r\n        rows.push(col);\r\n        vals.push(value);\r\n    });\r\n    var dims = [matrix.nCols, matrix.nRows];\r\n    return new SparseMatrix(rows, cols, vals, dims);\r\n}\r\nexports.transpose = transpose;\r\nfunction identity(size) {\r\n    var _a = __read(size, 1), rows = _a[0];\r\n    var matrix = new SparseMatrix([], [], [], size);\r\n    for (var i = 0; i < rows; i++) {\r\n        matrix.set(i, i, 1);\r\n    }\r\n    return matrix;\r\n}\r\nexports.identity = identity;\r\nfunction pairwiseMultiply(a, b) {\r\n    return elementWise(a, b, function (x, y) { return x * y; });\r\n}\r\nexports.pairwiseMultiply = pairwiseMultiply;\r\nfunction add(a, b) {\r\n    return elementWise(a, b, function (x, y) { return x + y; });\r\n}\r\nexports.add = add;\r\nfunction subtract(a, b) {\r\n    return elementWise(a, b, function (x, y) { return x - y; });\r\n}\r\nexports.subtract = subtract;\r\nfunction maximum(a, b) {\r\n    return elementWise(a, b, function (x, y) { return (x > y ? x : y); });\r\n}\r\nexports.maximum = maximum;\r\nfunction multiplyScalar(a, scalar) {\r\n    return a.map(function (value) {\r\n        return value * scalar;\r\n    });\r\n}\r\nexports.multiplyScalar = multiplyScalar;\r\nfunction eliminateZeros(m) {\r\n    var zeroIndices = new Set();\r\n    var values = m.getValues();\r\n    var rows = m.getRows();\r\n    var cols = m.getCols();\r\n    for (var i = 0; i < values.length; i++) {\r\n        if (values[i] === 0) {\r\n            zeroIndices.add(i);\r\n        }\r\n    }\r\n    var removeByZeroIndex = function (_, index) { return !zeroIndices.has(index); };\r\n    var nextValues = values.filter(removeByZeroIndex);\r\n    var nextRows = rows.filter(removeByZeroIndex);\r\n    var nextCols = cols.filter(removeByZeroIndex);\r\n    return new SparseMatrix(nextRows, nextCols, nextValues, m.getDims());\r\n}\r\nexports.eliminateZeros = eliminateZeros;\r\nfunction normalize(m, normType) {\r\n    var e_1, _a;\r\n    if (normType === void 0) { normType = \"l2\"; }\r\n    var normFn = normFns[normType];\r\n    var colsByRow = new Map();\r\n    m.forEach(function (_, row, col) {\r\n        var cols = colsByRow.get(row) || [];\r\n        cols.push(col);\r\n        colsByRow.set(row, cols);\r\n    });\r\n    var nextMatrix = new SparseMatrix([], [], [], m.getDims());\r\n    var _loop_1 = function (row) {\r\n        var cols = colsByRow.get(row).sort();\r\n        var vals = cols.map(function (col) { return m.get(row, col); });\r\n        var norm = normFn(vals);\r\n        for (var i = 0; i < norm.length; i++) {\r\n            nextMatrix.set(row, cols[i], norm[i]);\r\n        }\r\n    };\r\n    try {\r\n        for (var _b = __values(colsByRow.keys()), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n            var row = _c.value;\r\n            _loop_1(row);\r\n        }\r\n    }\r\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n    finally {\r\n        try {\r\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n        }\r\n        finally { if (e_1) throw e_1.error; }\r\n    }\r\n    return nextMatrix;\r\n}\r\nexports.normalize = normalize;\r\nvar normFns = (_a = {},\r\n    _a[\"max\"] = function (xs) {\r\n        var max = -Infinity;\r\n        for (var i = 0; i < xs.length; i++) {\r\n            max = xs[i] > max ? xs[i] : max;\r\n        }\r\n        return xs.map(function (x) { return x / max; });\r\n    },\r\n    _a[\"l1\"] = function (xs) {\r\n        var sum = 0;\r\n        for (var i = 0; i < xs.length; i++) {\r\n            sum += xs[i];\r\n        }\r\n        return xs.map(function (x) { return x / sum; });\r\n    },\r\n    _a[\"l2\"] = function (xs) {\r\n        var sum = 0;\r\n        for (var i = 0; i < xs.length; i++) {\r\n            sum += Math.pow(xs[i], 2);\r\n        }\r\n        return xs.map(function (x) { return Math.sqrt(Math.pow(x, 2) / sum); });\r\n    },\r\n    _a);\r\nfunction elementWise(a, b, op) {\r\n    var visited = new Set();\r\n    var rows = [];\r\n    var cols = [];\r\n    var vals = [];\r\n    var operate = function (row, col) {\r\n        rows.push(row);\r\n        cols.push(col);\r\n        var nextValue = op(a.get(row, col), b.get(row, col));\r\n        vals.push(nextValue);\r\n    };\r\n    var valuesA = a.getValues();\r\n    var rowsA = a.getRows();\r\n    var colsA = a.getCols();\r\n    for (var i = 0; i < valuesA.length; i++) {\r\n        var row = rowsA[i];\r\n        var col = colsA[i];\r\n        var key = row + \":\" + col;\r\n        visited.add(key);\r\n        operate(row, col);\r\n    }\r\n    var valuesB = b.getValues();\r\n    var rowsB = b.getRows();\r\n    var colsB = b.getCols();\r\n    for (var i = 0; i < valuesB.length; i++) {\r\n        var row = rowsB[i];\r\n        var col = colsB[i];\r\n        var key = row + \":\" + col;\r\n        if (visited.has(key))\r\n            continue;\r\n        operate(row, col);\r\n    }\r\n    var dims = [a.nRows, a.nCols];\r\n    return new SparseMatrix(rows, cols, vals, dims);\r\n}\r\nfunction getCSR(x) {\r\n    var entries = [];\r\n    x.forEach(function (value, row, col) {\r\n        entries.push({ value: value, row: row, col: col });\r\n    });\r\n    entries.sort(function (a, b) {\r\n        if (a.row === b.row) {\r\n            return a.col - b.col;\r\n        }\r\n        else {\r\n            return a.row - b.row;\r\n        }\r\n    });\r\n    var indices = [];\r\n    var values = [];\r\n    var indptr = [];\r\n    var currentRow = -1;\r\n    for (var i = 0; i < entries.length; i++) {\r\n        var _a = entries[i], row = _a.row, col = _a.col, value = _a.value;\r\n        if (row !== currentRow) {\r\n            currentRow = row;\r\n            indptr.push(i);\r\n        }\r\n        indices.push(col);\r\n        values.push(value);\r\n    }\r\n    return { indices: indices, values: values, indptr: indptr };\r\n}\r\nexports.getCSR = getCSR;\r\n","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n};\r\nvar __read = (this && this.__read) || function (o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n};\r\nvar __spread = (this && this.__spread) || function () {\r\n    for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n};\r\nvar __values = (this && this.__values) || function(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.searchFlatTree = exports.makeLeafArray = exports.makeForest = exports.FlatTree = void 0;\r\nvar utils = __importStar(require(\"./utils\"));\r\nvar FlatTree = (function () {\r\n    function FlatTree(hyperplanes, offsets, children, indices) {\r\n        this.hyperplanes = hyperplanes;\r\n        this.offsets = offsets;\r\n        this.children = children;\r\n        this.indices = indices;\r\n    }\r\n    return FlatTree;\r\n}());\r\nexports.FlatTree = FlatTree;\r\nfunction makeForest(data, nNeighbors, nTrees, random) {\r\n    var leafSize = Math.max(10, nNeighbors);\r\n    var trees = utils\r\n        .range(nTrees)\r\n        .map(function (_, i) { return makeTree(data, leafSize, i, random); });\r\n    var forest = trees.map(function (tree) { return flattenTree(tree, leafSize); });\r\n    return forest;\r\n}\r\nexports.makeForest = makeForest;\r\nfunction makeTree(data, leafSize, n, random) {\r\n    if (leafSize === void 0) { leafSize = 30; }\r\n    var indices = utils.range(data.length);\r\n    var tree = makeEuclideanTree(data, indices, leafSize, n, random);\r\n    return tree;\r\n}\r\nfunction makeEuclideanTree(data, indices, leafSize, q, random) {\r\n    if (leafSize === void 0) { leafSize = 30; }\r\n    if (indices.length > leafSize) {\r\n        var splitResults = euclideanRandomProjectionSplit(data, indices, random);\r\n        var indicesLeft = splitResults.indicesLeft, indicesRight = splitResults.indicesRight, hyperplane = splitResults.hyperplane, offset = splitResults.offset;\r\n        var leftChild = makeEuclideanTree(data, indicesLeft, leafSize, q + 1, random);\r\n        var rightChild = makeEuclideanTree(data, indicesRight, leafSize, q + 1, random);\r\n        var node = { leftChild: leftChild, rightChild: rightChild, isLeaf: false, hyperplane: hyperplane, offset: offset };\r\n        return node;\r\n    }\r\n    else {\r\n        var node = { indices: indices, isLeaf: true };\r\n        return node;\r\n    }\r\n}\r\nfunction euclideanRandomProjectionSplit(data, indices, random) {\r\n    var dim = data[0].length;\r\n    var leftIndex = utils.tauRandInt(indices.length, random);\r\n    var rightIndex = utils.tauRandInt(indices.length, random);\r\n    rightIndex += leftIndex === rightIndex ? 1 : 0;\r\n    rightIndex = rightIndex % indices.length;\r\n    var left = indices[leftIndex];\r\n    var right = indices[rightIndex];\r\n    var hyperplaneOffset = 0;\r\n    var hyperplaneVector = utils.zeros(dim);\r\n    for (var i = 0; i < hyperplaneVector.length; i++) {\r\n        hyperplaneVector[i] = data[left][i] - data[right][i];\r\n        hyperplaneOffset -=\r\n            (hyperplaneVector[i] * (data[left][i] + data[right][i])) / 2.0;\r\n    }\r\n    var nLeft = 0;\r\n    var nRight = 0;\r\n    var side = utils.zeros(indices.length);\r\n    for (var i = 0; i < indices.length; i++) {\r\n        var margin = hyperplaneOffset;\r\n        for (var d = 0; d < dim; d++) {\r\n            margin += hyperplaneVector[d] * data[indices[i]][d];\r\n        }\r\n        if (margin === 0) {\r\n            side[i] = utils.tauRandInt(2, random);\r\n            if (side[i] === 0) {\r\n                nLeft += 1;\r\n            }\r\n            else {\r\n                nRight += 1;\r\n            }\r\n        }\r\n        else if (margin > 0) {\r\n            side[i] = 0;\r\n            nLeft += 1;\r\n        }\r\n        else {\r\n            side[i] = 1;\r\n            nRight += 1;\r\n        }\r\n    }\r\n    var indicesLeft = utils.zeros(nLeft);\r\n    var indicesRight = utils.zeros(nRight);\r\n    nLeft = 0;\r\n    nRight = 0;\r\n    for (var i = 0; i < side.length; i++) {\r\n        if (side[i] === 0) {\r\n            indicesLeft[nLeft] = indices[i];\r\n            nLeft += 1;\r\n        }\r\n        else {\r\n            indicesRight[nRight] = indices[i];\r\n            nRight += 1;\r\n        }\r\n    }\r\n    return {\r\n        indicesLeft: indicesLeft,\r\n        indicesRight: indicesRight,\r\n        hyperplane: hyperplaneVector,\r\n        offset: hyperplaneOffset,\r\n    };\r\n}\r\nfunction flattenTree(tree, leafSize) {\r\n    var nNodes = numNodes(tree);\r\n    var nLeaves = numLeaves(tree);\r\n    var hyperplanes = utils\r\n        .range(nNodes)\r\n        .map(function () { return utils.zeros(tree.hyperplane ? tree.hyperplane.length : 0); });\r\n    var offsets = utils.zeros(nNodes);\r\n    var children = utils.range(nNodes).map(function () { return [-1, -1]; });\r\n    var indices = utils\r\n        .range(nLeaves)\r\n        .map(function () { return utils.range(leafSize).map(function () { return -1; }); });\r\n    recursiveFlatten(tree, hyperplanes, offsets, children, indices, 0, 0);\r\n    return new FlatTree(hyperplanes, offsets, children, indices);\r\n}\r\nfunction recursiveFlatten(tree, hyperplanes, offsets, children, indices, nodeNum, leafNum) {\r\n    var _a;\r\n    if (tree.isLeaf) {\r\n        children[nodeNum][0] = -leafNum;\r\n        (_a = indices[leafNum]).splice.apply(_a, __spread([0, tree.indices.length], tree.indices));\r\n        leafNum += 1;\r\n        return { nodeNum: nodeNum, leafNum: leafNum };\r\n    }\r\n    else {\r\n        hyperplanes[nodeNum] = tree.hyperplane;\r\n        offsets[nodeNum] = tree.offset;\r\n        children[nodeNum][0] = nodeNum + 1;\r\n        var oldNodeNum = nodeNum;\r\n        var res = recursiveFlatten(tree.leftChild, hyperplanes, offsets, children, indices, nodeNum + 1, leafNum);\r\n        nodeNum = res.nodeNum;\r\n        leafNum = res.leafNum;\r\n        children[oldNodeNum][1] = nodeNum + 1;\r\n        res = recursiveFlatten(tree.rightChild, hyperplanes, offsets, children, indices, nodeNum + 1, leafNum);\r\n        return { nodeNum: res.nodeNum, leafNum: res.leafNum };\r\n    }\r\n}\r\nfunction numNodes(tree) {\r\n    if (tree.isLeaf) {\r\n        return 1;\r\n    }\r\n    else {\r\n        return 1 + numNodes(tree.leftChild) + numNodes(tree.rightChild);\r\n    }\r\n}\r\nfunction numLeaves(tree) {\r\n    if (tree.isLeaf) {\r\n        return 1;\r\n    }\r\n    else {\r\n        return numLeaves(tree.leftChild) + numLeaves(tree.rightChild);\r\n    }\r\n}\r\nfunction makeLeafArray(rpForest) {\r\n    var e_1, _a;\r\n    if (rpForest.length > 0) {\r\n        var output = [];\r\n        try {\r\n            for (var rpForest_1 = __values(rpForest), rpForest_1_1 = rpForest_1.next(); !rpForest_1_1.done; rpForest_1_1 = rpForest_1.next()) {\r\n                var tree = rpForest_1_1.value;\r\n                output.push.apply(output, __spread(tree.indices));\r\n            }\r\n        }\r\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n        finally {\r\n            try {\r\n                if (rpForest_1_1 && !rpForest_1_1.done && (_a = rpForest_1.return)) _a.call(rpForest_1);\r\n            }\r\n            finally { if (e_1) throw e_1.error; }\r\n        }\r\n        return output;\r\n    }\r\n    else {\r\n        return [[-1]];\r\n    }\r\n}\r\nexports.makeLeafArray = makeLeafArray;\r\nfunction selectSide(hyperplane, offset, point, random) {\r\n    var margin = offset;\r\n    for (var d = 0; d < point.length; d++) {\r\n        margin += hyperplane[d] * point[d];\r\n    }\r\n    if (margin === 0) {\r\n        var side = utils.tauRandInt(2, random);\r\n        return side;\r\n    }\r\n    else if (margin > 0) {\r\n        return 0;\r\n    }\r\n    else {\r\n        return 1;\r\n    }\r\n}\r\nfunction searchFlatTree(point, tree, random) {\r\n    var node = 0;\r\n    while (tree.children[node][0] > 0) {\r\n        var side = selectSide(tree.hyperplanes[node], tree.offsets[node], point, random);\r\n        if (side === 0) {\r\n            node = tree.children[node][0];\r\n        }\r\n        else {\r\n            node = tree.children[node][1];\r\n        }\r\n    }\r\n    var index = -1 * tree.children[node][0];\r\n    return tree.indices[index];\r\n}\r\nexports.searchFlatTree = searchFlatTree;\r\n","const toString = Object.prototype.toString;\r\n\r\nexport default function isAnyArray(object) {\r\n  return toString.call(object).endsWith('Array]');\r\n}\r\n","/**\r\n * Calculate current error\r\n * @ignore\r\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\r\n * @param {Array<number>} parameters - Array of current parameter values\r\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\r\n * @return {number}\r\n */\r\nexport default function errorCalculation(\r\n  data,\r\n  parameters,\r\n  parameterizedFunction,\r\n) {\r\n  let error = 0;\r\n  const func = parameterizedFunction(parameters);\r\n\r\n  for (let i = 0; i < data.x.length; i++) {\r\n    error += Math.abs(data.y[i] - func(data.x[i]));\r\n  }\r\n\r\n  return error;\r\n}\r\n","import { inverse, Matrix } from 'ml-matrix';\r\n\r\n/**\r\n * Difference of the matrix function over the parameters\r\n * @ignore\r\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\r\n * @param {Array<number>} evaluatedData - Array of previous evaluated function values\r\n * @param {Array<number>} params - Array of previous parameter values\r\n * @param {number} gradientDifference - Adjustment for decrease the damping parameter\r\n * @param {function} paramFunction - The parameters and returns a function with the independent variable as a parameter\r\n * @return {Matrix}\r\n */\r\nfunction gradientFunction(\r\n  data,\r\n  evaluatedData,\r\n  params,\r\n  gradientDifference,\r\n  paramFunction,\r\n) {\r\n  const n = params.length;\r\n  const m = data.x.length;\r\n\r\n  let ans = new Array(n);\r\n\r\n  for (let param = 0; param < n; param++) {\r\n    ans[param] = new Array(m);\r\n    let auxParams = params.slice();\r\n    auxParams[param] += gradientDifference;\r\n    let funcParam = paramFunction(auxParams);\r\n\r\n    for (let point = 0; point < m; point++) {\r\n      ans[param][point] = evaluatedData[point] - funcParam(data.x[point]);\r\n    }\r\n  }\r\n  return new Matrix(ans);\r\n}\r\n\r\n/**\r\n * Matrix function over the samples\r\n * @ignore\r\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\r\n * @param {Array<number>} evaluatedData - Array of previous evaluated function values\r\n * @return {Matrix}\r\n */\r\nfunction matrixFunction(data, evaluatedData) {\r\n  const m = data.x.length;\r\n\r\n  let ans = new Array(m);\r\n\r\n  for (let point = 0; point < m; point++) {\r\n    ans[point] = [data.y[point] - evaluatedData[point]];\r\n  }\r\n\r\n  return new Matrix(ans);\r\n}\r\n\r\n/**\r\n * Iteration for Levenberg-Marquardt\r\n * @ignore\r\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\r\n * @param {Array<number>} params - Array of previous parameter values\r\n * @param {number} damping - Levenberg-Marquardt parameter\r\n * @param {number} gradientDifference - Adjustment for decrease the damping parameter\r\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\r\n * @return {Array<number>}\r\n */\r\nexport default function step(\r\n  data,\r\n  params,\r\n  damping,\r\n  gradientDifference,\r\n  parameterizedFunction,\r\n) {\r\n  let value = damping * gradientDifference * gradientDifference;\r\n  let identity = Matrix.eye(params.length, params.length, value);\r\n\r\n  const func = parameterizedFunction(params);\r\n\r\n  let evaluatedData = new Float64Array(data.x.length);\r\n  for (let i = 0; i < data.x.length; i++) {\r\n    evaluatedData[i] = func(data.x[i]);\r\n  }\r\n\r\n  let gradientFunc = gradientFunction(\r\n    data,\r\n    evaluatedData,\r\n    params,\r\n    gradientDifference,\r\n    parameterizedFunction,\r\n  );\r\n  let matrixFunc = matrixFunction(data, evaluatedData);\r\n  let inverseMatrix = inverse(\r\n    identity.add(gradientFunc.mmul(gradientFunc.transpose())),\r\n  );\r\n\r\n  params = new Matrix([params]);\r\n  params = params.sub(\r\n    inverseMatrix\r\n      .mmul(gradientFunc)\r\n      .mmul(matrixFunc)\r\n      .mul(gradientDifference)\r\n      .transpose(),\r\n  );\r\n\r\n  return params.to1DArray();\r\n}\r\n","import isArray from 'is-any-array';\r\n\r\nimport errorCalculation from './errorCalculation';\r\nimport step from './step';\r\n\r\n/**\r\n * Curve fitting algorithm\r\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\r\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\r\n * @param {object} [options] - Options object\r\n * @param {number} [options.damping] - Levenberg-Marquardt parameter\r\n * @param {number} [options.gradientDifference = 10e-2] - Adjustment for decrease the damping parameter\r\n * @param {Array<number>} [options.minValues] - Minimum allowed values for parameters\r\n * @param {Array<number>} [options.maxValues] - Maximum allowed values for parameters\r\n * @param {Array<number>} [options.initialValues] - Array of initial parameter values\r\n * @param {number} [options.maxIterations = 100] - Maximum of allowed iterations\r\n * @param {number} [options.errorTolerance = 10e-3] - Minimum uncertainty allowed for each point\r\n * @return {{parameterValues: Array<number>, parameterError: number, iterations: number}}\r\n */\r\nexport default function levenbergMarquardt(\r\n  data,\r\n  parameterizedFunction,\r\n  options = {},\r\n) {\r\n  let {\r\n    maxIterations = 100,\r\n    gradientDifference = 10e-2,\r\n    damping = 0,\r\n    errorTolerance = 10e-3,\r\n    minValues,\r\n    maxValues,\r\n    initialValues,\r\n  } = options;\r\n\r\n  if (damping <= 0) {\r\n    throw new Error('The damping option must be a positive number');\r\n  } else if (!data.x || !data.y) {\r\n    throw new Error('The data parameter must have x and y elements');\r\n  } else if (\r\n    !isArray(data.x) ||\r\n    data.x.length < 2 ||\r\n    !isArray(data.y) ||\r\n    data.y.length < 2\r\n  ) {\r\n    throw new Error(\r\n      'The data parameter elements must be an array with more than 2 points',\r\n    );\r\n  } else if (data.x.length !== data.y.length) {\r\n    throw new Error('The data parameter elements must have the same size');\r\n  }\r\n\r\n  let parameters =\r\n    initialValues || new Array(parameterizedFunction.length).fill(1);\r\n  let parLen = parameters.length;\r\n  maxValues = maxValues || new Array(parLen).fill(Number.MAX_SAFE_INTEGER);\r\n  minValues = minValues || new Array(parLen).fill(Number.MIN_SAFE_INTEGER);\r\n\r\n  if (maxValues.length !== minValues.length) {\r\n    throw new Error('minValues and maxValues must be the same size');\r\n  }\r\n\r\n  if (!isArray(parameters)) {\r\n    throw new Error('initialValues must be an array');\r\n  }\r\n\r\n  let error = errorCalculation(data, parameters, parameterizedFunction);\r\n\r\n  let converged = error <= errorTolerance;\r\n\r\n  let iteration;\r\n  for (iteration = 0; iteration < maxIterations && !converged; iteration++) {\r\n    parameters = step(\r\n      data,\r\n      parameters,\r\n      damping,\r\n      gradientDifference,\r\n      parameterizedFunction,\r\n    );\r\n\r\n    for (let k = 0; k < parLen; k++) {\r\n      parameters[k] = Math.min(\r\n        Math.max(minValues[k], parameters[k]),\r\n        maxValues[k],\r\n      );\r\n    }\r\n\r\n    error = errorCalculation(data, parameters, parameterizedFunction);\r\n    if (isNaN(error)) break;\r\n    converged = error <= errorTolerance;\r\n  }\r\n\r\n  return {\r\n    parameterValues: parameters,\r\n    parameterError: error,\r\n    iterations: iteration,\r\n  };\r\n}\r\n","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nvar __read = (this && this.__read) || function (o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n};\r\nvar __spread = (this && this.__spread) || function () {\r\n    for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n};\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.initTransform = exports.resetLocalConnectivity = exports.fastIntersection = exports.findABParams = exports.cosine = exports.euclidean = exports.UMAP = void 0;\r\nvar heap = __importStar(require(\"./heap\"));\r\nvar matrix = __importStar(require(\"./matrix\"));\r\nvar nnDescent = __importStar(require(\"./nn_descent\"));\r\nvar tree = __importStar(require(\"./tree\"));\r\nvar utils = __importStar(require(\"./utils\"));\r\nvar ml_levenberg_marquardt_1 = __importDefault(require(\"ml-levenberg-marquardt\"));\r\nvar SMOOTH_K_TOLERANCE = 1e-5;\r\nvar MIN_K_DIST_SCALE = 1e-3;\r\nvar UMAP = (function () {\r\n    function UMAP(params) {\r\n        var _this = this;\r\n        if (params === void 0) { params = {}; }\r\n        this.learningRate = 1.0;\r\n        this.localConnectivity = 1.0;\r\n        this.minDist = 0.1;\r\n        this.nComponents = 2;\r\n        this.nEpochs = 0;\r\n        this.nNeighbors = 15;\r\n        this.negativeSampleRate = 5;\r\n        this.random = Math.random;\r\n        this.repulsionStrength = 1.0;\r\n        this.setOpMixRatio = 1.0;\r\n        this.spread = 1.0;\r\n        this.transformQueueSize = 4.0;\r\n        this.targetMetric = \"categorical\";\r\n        this.targetWeight = 0.5;\r\n        this.targetNNeighbors = this.nNeighbors;\r\n        this.distanceFn = euclidean;\r\n        this.isInitialized = false;\r\n        this.rpForest = [];\r\n        this.embedding = [];\r\n        this.optimizationState = new OptimizationState();\r\n        var setParam = function (key) {\r\n            if (params[key] !== undefined)\r\n                _this[key] = params[key];\r\n        };\r\n        setParam('distanceFn');\r\n        setParam('learningRate');\r\n        setParam('localConnectivity');\r\n        setParam('minDist');\r\n        setParam('nComponents');\r\n        setParam('nEpochs');\r\n        setParam('nNeighbors');\r\n        setParam('negativeSampleRate');\r\n        setParam('random');\r\n        setParam('repulsionStrength');\r\n        setParam('setOpMixRatio');\r\n        setParam('spread');\r\n        setParam('transformQueueSize');\r\n    }\r\n    UMAP.prototype.fit = function (X) {\r\n        this.initializeFit(X);\r\n        this.optimizeLayout();\r\n        return this.embedding;\r\n    };\r\n    UMAP.prototype.fitAsync = function (X, callback) {\r\n        if (callback === void 0) { callback = function () { return true; }; }\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        this.initializeFit(X);\r\n                        return [4, this.optimizeLayoutAsync(callback)];\r\n                    case 1:\r\n                        _a.sent();\r\n                        return [2, this.embedding];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    UMAP.prototype.setSupervisedProjection = function (Y, params) {\r\n        if (params === void 0) { params = {}; }\r\n        this.Y = Y;\r\n        this.targetMetric = params.targetMetric || this.targetMetric;\r\n        this.targetWeight = params.targetWeight || this.targetWeight;\r\n        this.targetNNeighbors = params.targetNNeighbors || this.targetNNeighbors;\r\n    };\r\n    UMAP.prototype.setPrecomputedKNN = function (knnIndices, knnDistances) {\r\n        this.knnIndices = knnIndices;\r\n        this.knnDistances = knnDistances;\r\n    };\r\n    UMAP.prototype.initializeFit = function (X) {\r\n        if (X.length <= this.nNeighbors) {\r\n            throw new Error(\"Not enough data points (\" + X.length + \") to create nNeighbors: \" + this.nNeighbors + \".  Add more data points or adjust the configuration.\");\r\n        }\r\n        if (this.X === X && this.isInitialized) {\r\n            return this.getNEpochs();\r\n        }\r\n        this.X = X;\r\n        if (!this.knnIndices && !this.knnDistances) {\r\n            var knnResults = this.nearestNeighbors(X);\r\n            this.knnIndices = knnResults.knnIndices;\r\n            this.knnDistances = knnResults.knnDistances;\r\n        }\r\n        this.graph = this.fuzzySimplicialSet(X, this.nNeighbors, this.setOpMixRatio);\r\n        this.makeSearchFns();\r\n        this.searchGraph = this.makeSearchGraph(X);\r\n        this.processGraphForSupervisedProjection();\r\n        var _a = this.initializeSimplicialSetEmbedding(), head = _a.head, tail = _a.tail, epochsPerSample = _a.epochsPerSample;\r\n        this.optimizationState.head = head;\r\n        this.optimizationState.tail = tail;\r\n        this.optimizationState.epochsPerSample = epochsPerSample;\r\n        this.initializeOptimization();\r\n        this.prepareForOptimizationLoop();\r\n        this.isInitialized = true;\r\n        return this.getNEpochs();\r\n    };\r\n    UMAP.prototype.makeSearchFns = function () {\r\n        var _a = nnDescent.makeInitializations(this.distanceFn), initFromTree = _a.initFromTree, initFromRandom = _a.initFromRandom;\r\n        this.initFromTree = initFromTree;\r\n        this.initFromRandom = initFromRandom;\r\n        this.search = nnDescent.makeInitializedNNSearch(this.distanceFn);\r\n    };\r\n    UMAP.prototype.makeSearchGraph = function (X) {\r\n        var knnIndices = this.knnIndices;\r\n        var knnDistances = this.knnDistances;\r\n        var dims = [X.length, X.length];\r\n        var searchGraph = new matrix.SparseMatrix([], [], [], dims);\r\n        for (var i = 0; i < knnIndices.length; i++) {\r\n            var knn = knnIndices[i];\r\n            var distances = knnDistances[i];\r\n            for (var j = 0; j < knn.length; j++) {\r\n                var neighbor = knn[j];\r\n                var distance = distances[j];\r\n                if (distance > 0) {\r\n                    searchGraph.set(i, neighbor, distance);\r\n                }\r\n            }\r\n        }\r\n        var transpose = matrix.transpose(searchGraph);\r\n        return matrix.maximum(searchGraph, transpose);\r\n    };\r\n    UMAP.prototype.transform = function (toTransform) {\r\n        var _this = this;\r\n        var rawData = this.X;\r\n        if (rawData === undefined || rawData.length === 0) {\r\n            throw new Error('No data has been fit.');\r\n        }\r\n        var nNeighbors = Math.floor(this.nNeighbors * this.transformQueueSize);\r\n        nNeighbors = Math.min(rawData.length, nNeighbors);\r\n        var init = nnDescent.initializeSearch(this.rpForest, rawData, toTransform, nNeighbors, this.initFromRandom, this.initFromTree, this.random);\r\n        var result = this.search(rawData, this.searchGraph, init, toTransform);\r\n        var _a = heap.deheapSort(result), indices = _a.indices, distances = _a.weights;\r\n        indices = indices.map(function (x) { return x.slice(0, _this.nNeighbors); });\r\n        distances = distances.map(function (x) { return x.slice(0, _this.nNeighbors); });\r\n        var adjustedLocalConnectivity = Math.max(0, this.localConnectivity - 1);\r\n        var _b = this.smoothKNNDistance(distances, this.nNeighbors, adjustedLocalConnectivity), sigmas = _b.sigmas, rhos = _b.rhos;\r\n        var _c = this.computeMembershipStrengths(indices, distances, sigmas, rhos), rows = _c.rows, cols = _c.cols, vals = _c.vals;\r\n        var size = [toTransform.length, rawData.length];\r\n        var graph = new matrix.SparseMatrix(rows, cols, vals, size);\r\n        var normed = matrix.normalize(graph, \"l1\");\r\n        var csrMatrix = matrix.getCSR(normed);\r\n        var nPoints = toTransform.length;\r\n        var eIndices = utils.reshape2d(csrMatrix.indices, nPoints, this.nNeighbors);\r\n        var eWeights = utils.reshape2d(csrMatrix.values, nPoints, this.nNeighbors);\r\n        var embedding = initTransform(eIndices, eWeights, this.embedding);\r\n        var nEpochs = this.nEpochs\r\n            ? this.nEpochs / 3\r\n            : graph.nRows <= 10000\r\n                ? 100\r\n                : 30;\r\n        var graphMax = graph\r\n            .getValues()\r\n            .reduce(function (max, val) { return (val > max ? val : max); }, 0);\r\n        graph = graph.map(function (value) { return (value < graphMax / nEpochs ? 0 : value); });\r\n        graph = matrix.eliminateZeros(graph);\r\n        var epochsPerSample = this.makeEpochsPerSample(graph.getValues(), nEpochs);\r\n        var head = graph.getRows();\r\n        var tail = graph.getCols();\r\n        this.assignOptimizationStateParameters({\r\n            headEmbedding: embedding,\r\n            tailEmbedding: this.embedding,\r\n            head: head,\r\n            tail: tail,\r\n            currentEpoch: 0,\r\n            nEpochs: nEpochs,\r\n            nVertices: graph.getDims()[1],\r\n            epochsPerSample: epochsPerSample,\r\n        });\r\n        this.prepareForOptimizationLoop();\r\n        return this.optimizeLayout();\r\n    };\r\n    UMAP.prototype.processGraphForSupervisedProjection = function () {\r\n        var _a = this, Y = _a.Y, X = _a.X;\r\n        if (Y) {\r\n            if (Y.length !== X.length) {\r\n                throw new Error('Length of X and y must be equal');\r\n            }\r\n            if (this.targetMetric === \"categorical\") {\r\n                var lt = this.targetWeight < 1.0;\r\n                var farDist = lt ? 2.5 * (1.0 / (1.0 - this.targetWeight)) : 1.0e12;\r\n                this.graph = this.categoricalSimplicialSetIntersection(this.graph, Y, farDist);\r\n            }\r\n        }\r\n    };\r\n    UMAP.prototype.step = function () {\r\n        var currentEpoch = this.optimizationState.currentEpoch;\r\n        if (currentEpoch < this.getNEpochs()) {\r\n            this.optimizeLayoutStep(currentEpoch);\r\n        }\r\n        return this.optimizationState.currentEpoch;\r\n    };\r\n    UMAP.prototype.getEmbedding = function () {\r\n        return this.embedding;\r\n    };\r\n    UMAP.prototype.nearestNeighbors = function (X) {\r\n        var _a = this, distanceFn = _a.distanceFn, nNeighbors = _a.nNeighbors;\r\n        var log2 = function (n) { return Math.log(n) / Math.log(2); };\r\n        var metricNNDescent = nnDescent.makeNNDescent(distanceFn, this.random);\r\n        var round = function (n) {\r\n            return n === 0.5 ? 0 : Math.round(n);\r\n        };\r\n        var nTrees = 5 + Math.floor(round(Math.pow(X.length, 0.5) / 20.0));\r\n        var nIters = Math.max(5, Math.floor(Math.round(log2(X.length))));\r\n        this.rpForest = tree.makeForest(X, nNeighbors, nTrees, this.random);\r\n        var leafArray = tree.makeLeafArray(this.rpForest);\r\n        var _b = metricNNDescent(X, leafArray, nNeighbors, nIters), indices = _b.indices, weights = _b.weights;\r\n        return { knnIndices: indices, knnDistances: weights };\r\n    };\r\n    UMAP.prototype.fuzzySimplicialSet = function (X, nNeighbors, setOpMixRatio) {\r\n        if (setOpMixRatio === void 0) { setOpMixRatio = 1.0; }\r\n        var _a = this, _b = _a.knnIndices, knnIndices = _b === void 0 ? [] : _b, _c = _a.knnDistances, knnDistances = _c === void 0 ? [] : _c, localConnectivity = _a.localConnectivity;\r\n        var _d = this.smoothKNNDistance(knnDistances, nNeighbors, localConnectivity), sigmas = _d.sigmas, rhos = _d.rhos;\r\n        var _e = this.computeMembershipStrengths(knnIndices, knnDistances, sigmas, rhos), rows = _e.rows, cols = _e.cols, vals = _e.vals;\r\n        var size = [X.length, X.length];\r\n        var sparseMatrix = new matrix.SparseMatrix(rows, cols, vals, size);\r\n        var transpose = matrix.transpose(sparseMatrix);\r\n        var prodMatrix = matrix.pairwiseMultiply(sparseMatrix, transpose);\r\n        var a = matrix.subtract(matrix.add(sparseMatrix, transpose), prodMatrix);\r\n        var b = matrix.multiplyScalar(a, setOpMixRatio);\r\n        var c = matrix.multiplyScalar(prodMatrix, 1.0 - setOpMixRatio);\r\n        var result = matrix.add(b, c);\r\n        return result;\r\n    };\r\n    UMAP.prototype.categoricalSimplicialSetIntersection = function (simplicialSet, target, farDist, unknownDist) {\r\n        if (unknownDist === void 0) { unknownDist = 1.0; }\r\n        var intersection = fastIntersection(simplicialSet, target, unknownDist, farDist);\r\n        intersection = matrix.eliminateZeros(intersection);\r\n        return resetLocalConnectivity(intersection);\r\n    };\r\n    UMAP.prototype.smoothKNNDistance = function (distances, k, localConnectivity, nIter, bandwidth) {\r\n        if (localConnectivity === void 0) { localConnectivity = 1.0; }\r\n        if (nIter === void 0) { nIter = 64; }\r\n        if (bandwidth === void 0) { bandwidth = 1.0; }\r\n        var target = (Math.log(k) / Math.log(2)) * bandwidth;\r\n        var rho = utils.zeros(distances.length);\r\n        var result = utils.zeros(distances.length);\r\n        for (var i = 0; i < distances.length; i++) {\r\n            var lo = 0.0;\r\n            var hi = Infinity;\r\n            var mid = 1.0;\r\n            var ithDistances = distances[i];\r\n            var nonZeroDists = ithDistances.filter(function (d) { return d > 0.0; });\r\n            if (nonZeroDists.length >= localConnectivity) {\r\n                var index = Math.floor(localConnectivity);\r\n                var interpolation = localConnectivity - index;\r\n                if (index > 0) {\r\n                    rho[i] = nonZeroDists[index - 1];\r\n                    if (interpolation > SMOOTH_K_TOLERANCE) {\r\n                        rho[i] +=\r\n                            interpolation * (nonZeroDists[index] - nonZeroDists[index - 1]);\r\n                    }\r\n                }\r\n                else {\r\n                    rho[i] = interpolation * nonZeroDists[0];\r\n                }\r\n            }\r\n            else if (nonZeroDists.length > 0) {\r\n                rho[i] = utils.max(nonZeroDists);\r\n            }\r\n            for (var n = 0; n < nIter; n++) {\r\n                var psum = 0.0;\r\n                for (var j = 1; j < distances[i].length; j++) {\r\n                    var d = distances[i][j] - rho[i];\r\n                    if (d > 0) {\r\n                        psum += Math.exp(-(d / mid));\r\n                    }\r\n                    else {\r\n                        psum += 1.0;\r\n                    }\r\n                }\r\n                if (Math.abs(psum - target) < SMOOTH_K_TOLERANCE) {\r\n                    break;\r\n                }\r\n                if (psum > target) {\r\n                    hi = mid;\r\n                    mid = (lo + hi) / 2.0;\r\n                }\r\n                else {\r\n                    lo = mid;\r\n                    if (hi === Infinity) {\r\n                        mid *= 2;\r\n                    }\r\n                    else {\r\n                        mid = (lo + hi) / 2.0;\r\n                    }\r\n                }\r\n            }\r\n            result[i] = mid;\r\n            if (rho[i] > 0.0) {\r\n                var meanIthDistances = utils.mean(ithDistances);\r\n                if (result[i] < MIN_K_DIST_SCALE * meanIthDistances) {\r\n                    result[i] = MIN_K_DIST_SCALE * meanIthDistances;\r\n                }\r\n            }\r\n            else {\r\n                var meanDistances = utils.mean(distances.map(utils.mean));\r\n                if (result[i] < MIN_K_DIST_SCALE * meanDistances) {\r\n                    result[i] = MIN_K_DIST_SCALE * meanDistances;\r\n                }\r\n            }\r\n        }\r\n        return { sigmas: result, rhos: rho };\r\n    };\r\n    UMAP.prototype.computeMembershipStrengths = function (knnIndices, knnDistances, sigmas, rhos) {\r\n        var nSamples = knnIndices.length;\r\n        var nNeighbors = knnIndices[0].length;\r\n        var rows = utils.zeros(nSamples * nNeighbors);\r\n        var cols = utils.zeros(nSamples * nNeighbors);\r\n        var vals = utils.zeros(nSamples * nNeighbors);\r\n        for (var i = 0; i < nSamples; i++) {\r\n            for (var j = 0; j < nNeighbors; j++) {\r\n                var val = 0;\r\n                if (knnIndices[i][j] === -1) {\r\n                    continue;\r\n                }\r\n                if (knnIndices[i][j] === i) {\r\n                    val = 0.0;\r\n                }\r\n                else if (knnDistances[i][j] - rhos[i] <= 0.0) {\r\n                    val = 1.0;\r\n                }\r\n                else {\r\n                    val = Math.exp(-((knnDistances[i][j] - rhos[i]) / sigmas[i]));\r\n                }\r\n                rows[i * nNeighbors + j] = i;\r\n                cols[i * nNeighbors + j] = knnIndices[i][j];\r\n                vals[i * nNeighbors + j] = val;\r\n            }\r\n        }\r\n        return { rows: rows, cols: cols, vals: vals };\r\n    };\r\n    UMAP.prototype.initializeSimplicialSetEmbedding = function () {\r\n        var _this = this;\r\n        var nEpochs = this.getNEpochs();\r\n        var nComponents = this.nComponents;\r\n        var graphValues = this.graph.getValues();\r\n        var graphMax = 0;\r\n        for (var i = 0; i < graphValues.length; i++) {\r\n            var value = graphValues[i];\r\n            if (graphMax < graphValues[i]) {\r\n                graphMax = value;\r\n            }\r\n        }\r\n        var graph = this.graph.map(function (value) {\r\n            if (value < graphMax / nEpochs) {\r\n                return 0;\r\n            }\r\n            else {\r\n                return value;\r\n            }\r\n        });\r\n        this.embedding = utils.zeros(graph.nRows).map(function () {\r\n            return utils.zeros(nComponents).map(function () {\r\n                return utils.tauRand(_this.random) * 20 + -10;\r\n            });\r\n        });\r\n        var weights = [];\r\n        var head = [];\r\n        var tail = [];\r\n        var rowColValues = graph.getAll();\r\n        for (var i = 0; i < rowColValues.length; i++) {\r\n            var entry = rowColValues[i];\r\n            if (entry.value) {\r\n                weights.push(entry.value);\r\n                tail.push(entry.row);\r\n                head.push(entry.col);\r\n            }\r\n        }\r\n        var epochsPerSample = this.makeEpochsPerSample(weights, nEpochs);\r\n        return { head: head, tail: tail, epochsPerSample: epochsPerSample };\r\n    };\r\n    UMAP.prototype.makeEpochsPerSample = function (weights, nEpochs) {\r\n        var result = utils.filled(weights.length, -1.0);\r\n        var max = utils.max(weights);\r\n        var nSamples = weights.map(function (w) { return (w / max) * nEpochs; });\r\n        nSamples.forEach(function (n, i) {\r\n            if (n > 0)\r\n                result[i] = nEpochs / nSamples[i];\r\n        });\r\n        return result;\r\n    };\r\n    UMAP.prototype.assignOptimizationStateParameters = function (state) {\r\n        Object.assign(this.optimizationState, state);\r\n    };\r\n    UMAP.prototype.prepareForOptimizationLoop = function () {\r\n        var _a = this, repulsionStrength = _a.repulsionStrength, learningRate = _a.learningRate, negativeSampleRate = _a.negativeSampleRate;\r\n        var _b = this.optimizationState, epochsPerSample = _b.epochsPerSample, headEmbedding = _b.headEmbedding, tailEmbedding = _b.tailEmbedding;\r\n        var dim = headEmbedding[0].length;\r\n        var moveOther = headEmbedding.length === tailEmbedding.length;\r\n        var epochsPerNegativeSample = epochsPerSample.map(function (e) { return e / negativeSampleRate; });\r\n        var epochOfNextNegativeSample = __spread(epochsPerNegativeSample);\r\n        var epochOfNextSample = __spread(epochsPerSample);\r\n        this.assignOptimizationStateParameters({\r\n            epochOfNextSample: epochOfNextSample,\r\n            epochOfNextNegativeSample: epochOfNextNegativeSample,\r\n            epochsPerNegativeSample: epochsPerNegativeSample,\r\n            moveOther: moveOther,\r\n            initialAlpha: learningRate,\r\n            alpha: learningRate,\r\n            gamma: repulsionStrength,\r\n            dim: dim,\r\n        });\r\n    };\r\n    UMAP.prototype.initializeOptimization = function () {\r\n        var headEmbedding = this.embedding;\r\n        var tailEmbedding = this.embedding;\r\n        var _a = this.optimizationState, head = _a.head, tail = _a.tail, epochsPerSample = _a.epochsPerSample;\r\n        var nEpochs = this.getNEpochs();\r\n        var nVertices = this.graph.nCols;\r\n        var _b = findABParams(this.spread, this.minDist), a = _b.a, b = _b.b;\r\n        this.assignOptimizationStateParameters({\r\n            headEmbedding: headEmbedding,\r\n            tailEmbedding: tailEmbedding,\r\n            head: head,\r\n            tail: tail,\r\n            epochsPerSample: epochsPerSample,\r\n            a: a,\r\n            b: b,\r\n            nEpochs: nEpochs,\r\n            nVertices: nVertices,\r\n        });\r\n    };\r\n    UMAP.prototype.optimizeLayoutStep = function (n) {\r\n        var optimizationState = this.optimizationState;\r\n        var head = optimizationState.head, tail = optimizationState.tail, headEmbedding = optimizationState.headEmbedding, tailEmbedding = optimizationState.tailEmbedding, epochsPerSample = optimizationState.epochsPerSample, epochOfNextSample = optimizationState.epochOfNextSample, epochOfNextNegativeSample = optimizationState.epochOfNextNegativeSample, epochsPerNegativeSample = optimizationState.epochsPerNegativeSample, moveOther = optimizationState.moveOther, initialAlpha = optimizationState.initialAlpha, alpha = optimizationState.alpha, gamma = optimizationState.gamma, a = optimizationState.a, b = optimizationState.b, dim = optimizationState.dim, nEpochs = optimizationState.nEpochs, nVertices = optimizationState.nVertices;\r\n        var clipValue = 4.0;\r\n        for (var i = 0; i < epochsPerSample.length; i++) {\r\n            if (epochOfNextSample[i] > n) {\r\n                continue;\r\n            }\r\n            var j = head[i];\r\n            var k = tail[i];\r\n            var current = headEmbedding[j];\r\n            var other = tailEmbedding[k];\r\n            var distSquared = rDist(current, other);\r\n            var gradCoeff = 0;\r\n            if (distSquared > 0) {\r\n                gradCoeff = -2.0 * a * b * Math.pow(distSquared, b - 1.0);\r\n                gradCoeff /= a * Math.pow(distSquared, b) + 1.0;\r\n            }\r\n            for (var d = 0; d < dim; d++) {\r\n                var gradD = clip(gradCoeff * (current[d] - other[d]), clipValue);\r\n                current[d] += gradD * alpha;\r\n                if (moveOther) {\r\n                    other[d] += -gradD * alpha;\r\n                }\r\n            }\r\n            epochOfNextSample[i] += epochsPerSample[i];\r\n            var nNegSamples = Math.floor((n - epochOfNextNegativeSample[i]) / epochsPerNegativeSample[i]);\r\n            for (var p = 0; p < nNegSamples; p++) {\r\n                var k_1 = utils.tauRandInt(nVertices, this.random);\r\n                var other_1 = tailEmbedding[k_1];\r\n                var distSquared_1 = rDist(current, other_1);\r\n                var gradCoeff_1 = 0.0;\r\n                if (distSquared_1 > 0.0) {\r\n                    gradCoeff_1 = 2.0 * gamma * b;\r\n                    gradCoeff_1 /=\r\n                        (0.001 + distSquared_1) * (a * Math.pow(distSquared_1, b) + 1);\r\n                }\r\n                else if (j === k_1) {\r\n                    continue;\r\n                }\r\n                for (var d = 0; d < dim; d++) {\r\n                    var gradD = 4.0;\r\n                    if (gradCoeff_1 > 0.0) {\r\n                        gradD = clip(gradCoeff_1 * (current[d] - other_1[d]), clipValue);\r\n                    }\r\n                    current[d] += gradD * alpha;\r\n                }\r\n            }\r\n            epochOfNextNegativeSample[i] += nNegSamples * epochsPerNegativeSample[i];\r\n        }\r\n        optimizationState.alpha = initialAlpha * (1.0 - n / nEpochs);\r\n        optimizationState.currentEpoch += 1;\r\n        return headEmbedding;\r\n    };\r\n    UMAP.prototype.optimizeLayoutAsync = function (epochCallback) {\r\n        var _this = this;\r\n        if (epochCallback === void 0) { epochCallback = function () { return true; }; }\r\n        return new Promise(function (resolve, reject) {\r\n            var step = function () { return __awaiter(_this, void 0, void 0, function () {\r\n                var _a, nEpochs, currentEpoch, epochCompleted, shouldStop, isFinished;\r\n                return __generator(this, function (_b) {\r\n                    try {\r\n                        _a = this.optimizationState, nEpochs = _a.nEpochs, currentEpoch = _a.currentEpoch;\r\n                        this.embedding = this.optimizeLayoutStep(currentEpoch);\r\n                        epochCompleted = this.optimizationState.currentEpoch;\r\n                        shouldStop = epochCallback(epochCompleted) === false;\r\n                        isFinished = epochCompleted === nEpochs;\r\n                        if (!shouldStop && !isFinished) {\r\n                            setTimeout(function () { return step(); }, 0);\r\n                        }\r\n                        else {\r\n                            return [2, resolve(isFinished)];\r\n                        }\r\n                    }\r\n                    catch (err) {\r\n                        reject(err);\r\n                    }\r\n                    return [2];\r\n                });\r\n            }); };\r\n            setTimeout(function () { return step(); }, 0);\r\n        });\r\n    };\r\n    UMAP.prototype.optimizeLayout = function (epochCallback) {\r\n        if (epochCallback === void 0) { epochCallback = function () { return true; }; }\r\n        var isFinished = false;\r\n        var embedding = [];\r\n        while (!isFinished) {\r\n            var _a = this.optimizationState, nEpochs = _a.nEpochs, currentEpoch = _a.currentEpoch;\r\n            embedding = this.optimizeLayoutStep(currentEpoch);\r\n            var epochCompleted = this.optimizationState.currentEpoch;\r\n            var shouldStop = epochCallback(epochCompleted) === false;\r\n            isFinished = epochCompleted === nEpochs || shouldStop;\r\n        }\r\n        return embedding;\r\n    };\r\n    UMAP.prototype.getNEpochs = function () {\r\n        var graph = this.graph;\r\n        if (this.nEpochs > 0) {\r\n            return this.nEpochs;\r\n        }\r\n        var length = graph.nRows;\r\n        if (length <= 2500) {\r\n            return 500;\r\n        }\r\n        else if (length <= 5000) {\r\n            return 400;\r\n        }\r\n        else if (length <= 7500) {\r\n            return 300;\r\n        }\r\n        else {\r\n            return 200;\r\n        }\r\n    };\r\n    return UMAP;\r\n}());\r\nexports.UMAP = UMAP;\r\nfunction euclidean(x, y) {\r\n    var result = 0;\r\n    for (var i = 0; i < x.length; i++) {\r\n        result += Math.pow((x[i] - y[i]), 2);\r\n    }\r\n    return Math.sqrt(result);\r\n}\r\nexports.euclidean = euclidean;\r\nfunction cosine(x, y) {\r\n    var result = 0.0;\r\n    var normX = 0.0;\r\n    var normY = 0.0;\r\n    for (var i = 0; i < x.length; i++) {\r\n        result += x[i] * y[i];\r\n        normX += Math.pow(x[i], 2);\r\n        normY += Math.pow(y[i], 2);\r\n    }\r\n    if (normX === 0 && normY === 0) {\r\n        return 0;\r\n    }\r\n    else if (normX === 0 || normY === 0) {\r\n        return 1.0;\r\n    }\r\n    else {\r\n        return 1.0 - result / Math.sqrt(normX * normY);\r\n    }\r\n}\r\nexports.cosine = cosine;\r\nvar OptimizationState = (function () {\r\n    function OptimizationState() {\r\n        this.currentEpoch = 0;\r\n        this.headEmbedding = [];\r\n        this.tailEmbedding = [];\r\n        this.head = [];\r\n        this.tail = [];\r\n        this.epochsPerSample = [];\r\n        this.epochOfNextSample = [];\r\n        this.epochOfNextNegativeSample = [];\r\n        this.epochsPerNegativeSample = [];\r\n        this.moveOther = true;\r\n        this.initialAlpha = 1.0;\r\n        this.alpha = 1.0;\r\n        this.gamma = 1.0;\r\n        this.a = 1.5769434603113077;\r\n        this.b = 0.8950608779109733;\r\n        this.dim = 2;\r\n        this.nEpochs = 500;\r\n        this.nVertices = 0;\r\n    }\r\n    return OptimizationState;\r\n}());\r\nfunction clip(x, clipValue) {\r\n    if (x > clipValue)\r\n        return clipValue;\r\n    else if (x < -clipValue)\r\n        return -clipValue;\r\n    else\r\n        return x;\r\n}\r\nfunction rDist(x, y) {\r\n    var result = 0.0;\r\n    for (var i = 0; i < x.length; i++) {\r\n        result += Math.pow(x[i] - y[i], 2);\r\n    }\r\n    return result;\r\n}\r\nfunction findABParams(spread, minDist) {\r\n    var curve = function (_a) {\r\n        var _b = __read(_a, 2), a = _b[0], b = _b[1];\r\n        return function (x) {\r\n            return 1.0 / (1.0 + a * Math.pow(x, (2 * b)));\r\n        };\r\n    };\r\n    var xv = utils\r\n        .linear(0, spread * 3, 300)\r\n        .map(function (val) { return (val < minDist ? 1.0 : val); });\r\n    var yv = utils.zeros(xv.length).map(function (val, index) {\r\n        var gte = xv[index] >= minDist;\r\n        return gte ? Math.exp(-(xv[index] - minDist) / spread) : val;\r\n    });\r\n    var initialValues = [0.5, 0.5];\r\n    var data = { x: xv, y: yv };\r\n    var options = {\r\n        damping: 1.5,\r\n        initialValues: initialValues,\r\n        gradientDifference: 10e-2,\r\n        maxIterations: 100,\r\n        errorTolerance: 10e-3,\r\n    };\r\n    var parameterValues = ml_levenberg_marquardt_1.default(data, curve, options).parameterValues;\r\n    var _a = __read(parameterValues, 2), a = _a[0], b = _a[1];\r\n    return { a: a, b: b };\r\n}\r\nexports.findABParams = findABParams;\r\nfunction fastIntersection(graph, target, unknownDist, farDist) {\r\n    if (unknownDist === void 0) { unknownDist = 1.0; }\r\n    if (farDist === void 0) { farDist = 5.0; }\r\n    return graph.map(function (value, row, col) {\r\n        if (target[row] === -1 || target[col] === -1) {\r\n            return value * Math.exp(-unknownDist);\r\n        }\r\n        else if (target[row] !== target[col]) {\r\n            return value * Math.exp(-farDist);\r\n        }\r\n        else {\r\n            return value;\r\n        }\r\n    });\r\n}\r\nexports.fastIntersection = fastIntersection;\r\nfunction resetLocalConnectivity(simplicialSet) {\r\n    simplicialSet = matrix.normalize(simplicialSet, \"max\");\r\n    var transpose = matrix.transpose(simplicialSet);\r\n    var prodMatrix = matrix.pairwiseMultiply(transpose, simplicialSet);\r\n    simplicialSet = matrix.add(simplicialSet, matrix.subtract(transpose, prodMatrix));\r\n    return matrix.eliminateZeros(simplicialSet);\r\n}\r\nexports.resetLocalConnectivity = resetLocalConnectivity;\r\nfunction initTransform(indices, weights, embedding) {\r\n    var result = utils\r\n        .zeros(indices.length)\r\n        .map(function (z) { return utils.zeros(embedding[0].length); });\r\n    for (var i = 0; i < indices.length; i++) {\r\n        for (var j = 0; j < indices[0].length; j++) {\r\n            for (var d = 0; d < embedding[0].length; d++) {\r\n                var a = indices[i][j];\r\n                result[i][d] += weights[i][j] * embedding[a][d];\r\n            }\r\n        }\r\n    }\r\n    return result;\r\n}\r\nexports.initTransform = initTransform;\r\n","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n};\r\nvar __values = (this && this.__values) || function(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.initializeSearch = exports.makeInitializedNNSearch = exports.makeInitializations = exports.makeNNDescent = void 0;\r\nvar heap = __importStar(require(\"./heap\"));\r\nvar matrix = __importStar(require(\"./matrix\"));\r\nvar tree = __importStar(require(\"./tree\"));\r\nvar utils = __importStar(require(\"./utils\"));\r\nfunction makeNNDescent(distanceFn, random) {\r\n    return function nNDescent(data, leafArray, nNeighbors, nIters, maxCandidates, delta, rho, rpTreeInit) {\r\n        if (nIters === void 0) { nIters = 10; }\r\n        if (maxCandidates === void 0) { maxCandidates = 50; }\r\n        if (delta === void 0) { delta = 0.001; }\r\n        if (rho === void 0) { rho = 0.5; }\r\n        if (rpTreeInit === void 0) { rpTreeInit = true; }\r\n        var nVertices = data.length;\r\n        var currentGraph = heap.makeHeap(data.length, nNeighbors);\r\n        for (var i = 0; i < data.length; i++) {\r\n            var indices = heap.rejectionSample(nNeighbors, data.length, random);\r\n            for (var j = 0; j < indices.length; j++) {\r\n                var d = distanceFn(data[i], data[indices[j]]);\r\n                heap.heapPush(currentGraph, i, d, indices[j], 1);\r\n                heap.heapPush(currentGraph, indices[j], d, i, 1);\r\n            }\r\n        }\r\n        if (rpTreeInit) {\r\n            for (var n = 0; n < leafArray.length; n++) {\r\n                for (var i = 0; i < leafArray[n].length; i++) {\r\n                    if (leafArray[n][i] < 0) {\r\n                        break;\r\n                    }\r\n                    for (var j = i + 1; j < leafArray[n].length; j++) {\r\n                        if (leafArray[n][j] < 0) {\r\n                            break;\r\n                        }\r\n                        var d = distanceFn(data[leafArray[n][i]], data[leafArray[n][j]]);\r\n                        heap.heapPush(currentGraph, leafArray[n][i], d, leafArray[n][j], 1);\r\n                        heap.heapPush(currentGraph, leafArray[n][j], d, leafArray[n][i], 1);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        for (var n = 0; n < nIters; n++) {\r\n            var candidateNeighbors = heap.buildCandidates(currentGraph, nVertices, nNeighbors, maxCandidates, random);\r\n            var c = 0;\r\n            for (var i = 0; i < nVertices; i++) {\r\n                for (var j = 0; j < maxCandidates; j++) {\r\n                    var p = Math.floor(candidateNeighbors[0][i][j]);\r\n                    if (p < 0 || utils.tauRand(random) < rho) {\r\n                        continue;\r\n                    }\r\n                    for (var k = 0; k < maxCandidates; k++) {\r\n                        var q = Math.floor(candidateNeighbors[0][i][k]);\r\n                        var cj = candidateNeighbors[2][i][j];\r\n                        var ck = candidateNeighbors[2][i][k];\r\n                        if (q < 0 || (!cj && !ck)) {\r\n                            continue;\r\n                        }\r\n                        var d = distanceFn(data[p], data[q]);\r\n                        c += heap.heapPush(currentGraph, p, d, q, 1);\r\n                        c += heap.heapPush(currentGraph, q, d, p, 1);\r\n                    }\r\n                }\r\n            }\r\n            if (c <= delta * nNeighbors * data.length) {\r\n                break;\r\n            }\r\n        }\r\n        var sorted = heap.deheapSort(currentGraph);\r\n        return sorted;\r\n    };\r\n}\r\nexports.makeNNDescent = makeNNDescent;\r\nfunction makeInitializations(distanceFn) {\r\n    function initFromRandom(nNeighbors, data, queryPoints, _heap, random) {\r\n        for (var i = 0; i < queryPoints.length; i++) {\r\n            var indices = utils.rejectionSample(nNeighbors, data.length, random);\r\n            for (var j = 0; j < indices.length; j++) {\r\n                if (indices[j] < 0) {\r\n                    continue;\r\n                }\r\n                var d = distanceFn(data[indices[j]], queryPoints[i]);\r\n                heap.heapPush(_heap, i, d, indices[j], 1);\r\n            }\r\n        }\r\n    }\r\n    function initFromTree(_tree, data, queryPoints, _heap, random) {\r\n        for (var i = 0; i < queryPoints.length; i++) {\r\n            var indices = tree.searchFlatTree(queryPoints[i], _tree, random);\r\n            for (var j = 0; j < indices.length; j++) {\r\n                if (indices[j] < 0) {\r\n                    return;\r\n                }\r\n                var d = distanceFn(data[indices[j]], queryPoints[i]);\r\n                heap.heapPush(_heap, i, d, indices[j], 1);\r\n            }\r\n        }\r\n        return;\r\n    }\r\n    return { initFromRandom: initFromRandom, initFromTree: initFromTree };\r\n}\r\nexports.makeInitializations = makeInitializations;\r\nfunction makeInitializedNNSearch(distanceFn) {\r\n    return function nnSearchFn(data, graph, initialization, queryPoints) {\r\n        var e_1, _a;\r\n        var _b = matrix.getCSR(graph), indices = _b.indices, indptr = _b.indptr;\r\n        for (var i = 0; i < queryPoints.length; i++) {\r\n            var tried = new Set(initialization[0][i]);\r\n            while (true) {\r\n                var vertex = heap.smallestFlagged(initialization, i);\r\n                if (vertex === -1) {\r\n                    break;\r\n                }\r\n                var candidates = indices.slice(indptr[vertex], indptr[vertex + 1]);\r\n                try {\r\n                    for (var candidates_1 = (e_1 = void 0, __values(candidates)), candidates_1_1 = candidates_1.next(); !candidates_1_1.done; candidates_1_1 = candidates_1.next()) {\r\n                        var candidate = candidates_1_1.value;\r\n                        if (candidate === vertex ||\r\n                            candidate === -1 ||\r\n                            tried.has(candidate)) {\r\n                            continue;\r\n                        }\r\n                        var d = distanceFn(data[candidate], queryPoints[i]);\r\n                        heap.uncheckedHeapPush(initialization, i, d, candidate, 1);\r\n                        tried.add(candidate);\r\n                    }\r\n                }\r\n                catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n                finally {\r\n                    try {\r\n                        if (candidates_1_1 && !candidates_1_1.done && (_a = candidates_1.return)) _a.call(candidates_1);\r\n                    }\r\n                    finally { if (e_1) throw e_1.error; }\r\n                }\r\n            }\r\n        }\r\n        return initialization;\r\n    };\r\n}\r\nexports.makeInitializedNNSearch = makeInitializedNNSearch;\r\nfunction initializeSearch(forest, data, queryPoints, nNeighbors, initFromRandom, initFromTree, random) {\r\n    var e_2, _a;\r\n    var results = heap.makeHeap(queryPoints.length, nNeighbors);\r\n    initFromRandom(nNeighbors, data, queryPoints, results, random);\r\n    if (forest) {\r\n        try {\r\n            for (var forest_1 = __values(forest), forest_1_1 = forest_1.next(); !forest_1_1.done; forest_1_1 = forest_1.next()) {\r\n                var tree_1 = forest_1_1.value;\r\n                initFromTree(tree_1, data, queryPoints, results, random);\r\n            }\r\n        }\r\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\r\n        finally {\r\n            try {\r\n                if (forest_1_1 && !forest_1_1.done && (_a = forest_1.return)) _a.call(forest_1);\r\n            }\r\n            finally { if (e_2) throw e_2.error; }\r\n        }\r\n    }\r\n    return results;\r\n}\r\nexports.initializeSearch = initializeSearch;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar umap_1 = require(\"./umap\");\r\nObject.defineProperty(exports, \"UMAP\", { enumerable: true, get: function () { return umap_1.UMAP; } });\r\n","import * as d3 from \"d3\";\r\nimport d3tip from \"d3-tip\";\r\nimport { UMAP } from 'umap-js';\r\nimport irisData from \"./data/irisData.js\";\r\nimport spiralData from \"./data/spiralData.js\";\r\nimport { addPlotTitle } from \"./plotTitle.mjs\";\r\nimport { attachPlotZoom } from \"./plotZoom.mjs\";\r\n\r\n\r\nexport const umapDt = {\r\n  data: {\r\n    divNum: 1,\r\n    iris: {\r\n      json: irisData,\r\n      csv: null  // Will be generated on demand\r\n    },\r\n      spiral: {\r\n      json: spiralData,\r\n      csv: null  // Will be generated on demand\r\n    },\r\n    file: {\r\n      json: null,\r\n      csv: null\r\n    }\r\n  }\r\n}\r\n\r\n// UMAP (Uniform Manifold Approximation and Projection) visualization\r\n// TODO: Implement UMAP using a library like umap-js\r\n// Similar pattern to pca.mjs with umap_plot() and umap_UI() functions\r\n\r\n// Placeholder for future implementation\r\n// Expected libraries:\r\n// - umap-js for calculations\r\n// - D3.js for visualization (already available)\r\n\r\nexport async function umap_plot(options = {}) {\r\n  console.log(\"RUNNING: umap_plot() function----------\");\r\n\r\n  const {\r\n    divId: divId = \"\",\r\n    data: data = irisData,\r\n    width: width = 600, // standardized default across all clustjs plots\r\n    height: height = 460,\r\n    colors: colors = [\"red\", \"blue\", \"orange\", \"green\", \"purple\", \"pink\", \"yellow\"],\r\n    margin: userMargin = {}, // e.g. { top: 25, right: 170, bottom: 45, left: 45 } — override any side\r\n    title: title = \"UMAP Plot\", // string, or null/\"\" to hide\r\n    zoomable: zoomable = true, // wheel to zoom, drag to pan\r\n    nNeighbors: nNeighbors = 15,\r\n    minDist: minDist = 0.1,\r\n    nComponents: nComponents = 2\r\n  } = options;\r\n  const targetDivId = divId;\r\n\r\n  // Resolve target container\r\n  let div = targetDivId ? document.getElementById(targetDivId) : null;\r\n  if (div) {\r\n    console.log(\"plot div provided in function parameters. divId:\", targetDivId);\r\n    div.innerHTML = \"\";\r\n  } else {\r\n    const currentDivNum = umapDt.data.divNum;\r\n    div = document.createElement(\"div\");\r\n    div.id = targetDivId || 'umap_plot' + currentDivNum;\r\n    console.log(\"div NOT provided within function options or doesn't exist... created a new div with id: \", div.id);\r\n    const plotsPanel = document.getElementById(\"plotsPanel\");\r\n    (plotsPanel || document.body).appendChild(div);\r\n    umapDt.data.divNum = currentDivNum + 1;\r\n  }\r\n\r\n  // Extract numeric and categorical columns\r\n  const sample = data[0] || {};\r\n  const keys = Object.keys(sample);\r\n  const numericKeys = keys.filter(k => typeof sample[k] === \"number\");\r\n  const categoryKey = keys.find(k => typeof sample[k] !== \"number\");\r\n\r\n  // Extract feature matrix X and labels\r\n  const X = data.map(row => numericKeys.map(k => row[k]));\r\n  const labels = categoryKey ? data.map(row => row[categoryKey]) : data.map((_, i) => `row${i}`);\r\n\r\n  // Standardize features\r\n  const Xs = standardize(X);\r\n\r\n  // Run UMAP\r\n  const umap = new UMAP({\r\n    nComponents: nComponents,\r\n    nNeighbors: nNeighbors,\r\n    minDist: minDist,\r\n    random: Math.random\r\n  });\r\n\r\n  const embedding = umap.fit(Xs);\r\n\r\n  // Create scores array similar to PCA\r\n  const scores = embedding.map((xy, i) => ({\r\n    group: labels[i],\r\n    name: categoryKey ? String(labels[i]) + \"_\" + i : \"id_\" + i,\r\n    UMAP1: xy[0],\r\n    UMAP2: xy[1]\r\n  }));\r\n\r\n  const groups = [...new Set(scores.map(d => d.group))];\r\n  const color = d3.scaleOrdinal(colors).domain(groups);\r\n\r\n  const fontFamily = 'monospace';\r\n  const maxOpacity = 0.7;\r\n  const margin = {\r\n    top: 42, // headroom so the title clears the plot area\r\n    right: 170,\r\n    bottom: 45,\r\n    left: 45,\r\n    ...userMargin\r\n  };\r\n\r\n  // Compute padded domain for UMAP1\r\n  const minUMAP1 = d3.min(scores, d => d.UMAP1);\r\n  const maxUMAP1 = d3.max(scores, d => d.UMAP1);\r\n  const rangeUMAP1 = maxUMAP1 - minUMAP1;\r\n  const paddedMin = minUMAP1 - rangeUMAP1 * 0.10;\r\n  const paddedMax = maxUMAP1 + rangeUMAP1 * 0.10;\r\n\r\n  const x = d3.scaleLinear()\r\n    .domain([paddedMin, paddedMax])\r\n    .range([margin.left, width - margin.right]);\r\n\r\n  const xAxis = g => g\r\n    .attr(\"transform\", `translate(0,${height - margin.bottom + 5})`)\r\n    .call(d3.axisBottom(x).ticks(6).tickSizeOuter(0))\r\n    .call(g => g.select(\".domain\")\r\n      .attr(\"stroke\", \"#000\")\r\n      .attr(\"stroke-width\", 1))\r\n    .call(g => g.selectAll(\".tick line\")\r\n      .attr(\"stroke\", \"#000\")\r\n      .attr(\"stroke-width\", 1))\r\n    .call(g => g.selectAll(\".tick text\")\r\n      .attr(\"fill\", \"#000\")\r\n      .style(\"font-size\", \"12px\"))\r\n    .call(g => g.append(\"text\")\r\n      .attr(\"x\", width - margin.right)\r\n      .attr(\"y\", 35)\r\n      .attr(\"fill\", \"#000\")\r\n      .attr(\"font-weight\", \"bold\")\r\n      .attr(\"text-anchor\", \"end\")\r\n      .text(\"UMAP1\"));\r\n\r\n  const y = d3.scaleLinear()\r\n    .domain(d3.extent(scores, d => d.UMAP2))\r\n    .range([height - margin.bottom, margin.top]);\r\n\r\n  const yAxis = g => g\r\n    .attr(\"transform\", `translate(${margin.left - 5},0)`)\r\n    .call(d3.axisLeft(y).ticks(6).tickSizeOuter(0))\r\n    .call(g => g.select(\".domain\")\r\n      .attr(\"stroke\", \"#000\")\r\n      .attr(\"stroke-width\", 1))\r\n    .call(g => g.selectAll(\".tick line\")\r\n      .attr(\"stroke\", \"#000\")\r\n      .attr(\"stroke-width\", 1))\r\n    .call(g => g.selectAll(\".tick text\")\r\n      .attr(\"fill\", \"#000\")\r\n      .style(\"font-size\", \"12px\"))\r\n    .call(g => g.append(\"text\")\r\n      .attr(\"x\", -margin.top)\r\n      .attr(\"y\", margin.top - 5)\r\n      .attr(\"fill\", \"#000\")\r\n      .attr(\"font-weight\", \"bold\")\r\n      .attr(\"text-anchor\", \"start\")\r\n      .text(\"UMAP2\"));\r\n\r\n  const svg = d3.create(\"svg\")\r\n    .style(\"background\", \"white\")\r\n    .style(\"overflow\", \"visible\");\r\n\r\n  svg.attr(\"id\", \"svgid_umap\");\r\n\r\n  const g = svg\r\n    .attr('width', width)\r\n    .attr('height', height)\r\n    .append('g');\r\n\r\n  // Zoom/pan (shared helper, see plotZoom.mjs)\r\n  attachPlotZoom(svg, g, { enabled: zoomable });\r\n\r\n  // Title (shared style, centered over the plot area; inside the zoom layer so it\r\n  // moves with the plot)\r\n  addPlotTitle(g, title, margin.left + (width - margin.left - margin.right) / 2, Math.max(16, margin.top / 2));\r\n\r\n  g.append(\"g\").call(xAxis);\r\n  g.append(\"g\").call(yAxis);\r\n\r\n  g.append(\"rect\")\r\n    .attr(\"id\", \"background\")\r\n    .attr(\"x\", margin.left)\r\n    .attr(\"y\", margin.top)\r\n    .attr(\"width\", width - margin.left - margin.right)\r\n    .attr(\"height\", height - margin.top - margin.bottom)\r\n    .attr(\"fill\", \"white\")\r\n    .on(\"click\", (event, d) => selectGroup(null, d, maxOpacity));\r\n\r\n  const gPoints = g.append(\"g\").attr(\"class\", \"gPoints\").style(\"isolation\", \"isolate\");\r\n\r\n  const tooltip = d3tip()\r\n    .style('border', 'solid 2px navy')\r\n    .style('background-color', 'white')\r\n    .style(\"color\", \"#000\")\r\n    .style('border-radius', '7px')\r\n    .style('padding', '8px 12px')\r\n    .style('font-family', fontFamily)\r\n    .style('font-size', '12px')\r\n    .style('max-width', '250px')\r\n    .style('width', 'auto')\r\n    .html((event, d) => `\r\n      <div style='line-height: 1.5;'>\r\n        <div><strong>Name:</strong> ${d.name}</div>\r\n        <div><strong>UMAP1:</strong> ${d.UMAP1.toFixed(2)}</div>\r\n        <div><strong>UMAP2:</strong> ${d.UMAP2.toFixed(2)}</div>\r\n      </div>`);\r\n\r\n  svg.call(tooltip);\r\n\r\n  gPoints\r\n    .selectAll(\"circle\")\r\n    .data(scores)\r\n    .enter()\r\n    .append(\"circle\")\r\n    .attr(\"class\", \"points\")\r\n    .attr(\"cx\", d => x(d.UMAP1))\r\n    .attr(\"cy\", d => y(d.UMAP2))\r\n    .attr(\"fill\", d => color(d.group))\r\n    .attr(\"opacity\", 0.7)\r\n    .attr(\"r\", 4)\r\n    .on('mouseover', tooltip.show)\r\n    .on('mouseout', tooltip.hide);\r\n\r\n  const key = g.append(\"g\")\r\n    .selectAll(\"rect\")\r\n    .data(groups);\r\n\r\n  key.enter().append(\"rect\")\r\n    .attr(\"class\", \"keyRects\")\r\n    .attr(\"x\", width - margin.left - 50)\r\n    .attr(\"y\", (d, i) => i * 20)\r\n    .attr(\"width\", 12)\r\n    .attr(\"height\", 12)\r\n    .attr(\"fill\", d => color(d))\r\n    .on(\"click\", (event, d) => selectGroup(null, d, maxOpacity));\r\n\r\n  key.enter().append(\"text\")\r\n    .attr(\"x\", d => width - margin.left - 30)\r\n    .attr(\"y\", (d, i) => i * 20)\r\n    .attr(\"dy\", \"0.7em\")\r\n    .text(d => `${d}`)\r\n    .style(\"font-size\", \"14px\")\r\n    .on(\"click\", (event, d) => selectGroup(null, d, maxOpacity));\r\n\r\n  div.appendChild(svg.node());\r\n  return svg.node();\r\n\r\n  function selectGroup(ctx, group, maxOpacity) {\r\n    const groupElements = d3.selectAll(\".points\")\r\n      .filter(d => d.group !== group);\r\n    const activeGroup = d3.selectAll(\".keyRects\")\r\n      .filter(d => d === group);\r\n    const otherElements = d3.selectAll(\".points\")\r\n      .filter(d => d.group === group);\r\n    const otherGroups = d3.selectAll(\".keyRects\")\r\n      .filter(d => d !== group);\r\n\r\n    groupElements.transition().attr(\"opacity\", 0.1);\r\n    otherGroups.transition().attr(\"opacity\", 0.1);\r\n    otherElements.transition().attr(\"opacity\", maxOpacity);\r\n    activeGroup.transition().attr(\"opacity\", maxOpacity);\r\n  }\r\n}\r\n\r\nexport const umap_UI = async (options = {}) => {\r\n  console.log(\"UMAP UI - not yet implemented\");\r\n  console.log(\"Options:\", options);\r\n  \r\n  // TODO: Implement UI similar to pca_UI with file upload and plot rendering\r\n}\r\n\r\n// ---- 1) Extract X (features) + y (labels) from your JSON ----\r\nfunction toXY(rows) {\r\n  const X = rows.map(r => [\r\n    r.sepal_length,\r\n    r.sepal_width,\r\n    r.petal_length,\r\n    r.petal_width,\r\n  ]);\r\n  const y = rows.map(r => r.species);\r\n  return { X, y };\r\n}\r\n\r\n// ---- 2) Standardize features (recommended for Iris) ----\r\nfunction standardize(X) {\r\n  const n = X.length;\r\n  const d = X[0].length;\r\n\r\n  const mean = Array(d).fill(0);\r\n  const std = Array(d).fill(0);\r\n\r\n  for (const row of X) for (let j = 0; j < d; j++) mean[j] += row[j];\r\n  for (let j = 0; j < d; j++) mean[j] /= n;\r\n\r\n  for (const row of X) for (let j = 0; j < d; j++) std[j] += (row[j] - mean[j]) ** 2;\r\n  for (let j = 0; j < d; j++) std[j] = Math.sqrt(std[j] / (n - 1)) || 1;\r\n\r\n  return X.map(row => row.map((v, j) => (v - mean[j]) / std[j]));\r\n}\r\n\r\n// ---- 3) UMAP ----\r\nexport function umapIris(rows, opts = {}) {\r\n  const { X, y } = toXY(rows);\r\n  const Xs = standardize(X);\r\n\r\n  const umap = new UMAP({\r\n    nComponents: opts.nComponents ?? 2,\r\n    nNeighbors: opts.nNeighbors ?? 15,\r\n    minDist: opts.minDist ?? 0.1,\r\n    // metric: \"euclidean\" // umap-js uses euclidean by default\r\n    random: opts.random ?? Math.random, // optional\r\n  });\r\n\r\n  const embedding = umap.fit(Xs); // shape: [n, 2]\r\n\r\n  // return points as objects (easy for plotting)\r\n  const points = embedding.map((xy, i) => ({\r\n    x: xy[0],\r\n    y: xy[1],\r\n    species: y[i],\r\n    original: rows[i],\r\n  }));\r\n\r\n  return { embedding, labels: y, points };\r\n}\r\n\r\n// ---- Example usage ----\r\n// const { points } = umapIris(irisData);\r\n// console.log(points.slice(0, 5));","import * as d3 from \"d3\";\r\nimport d3tip from \"d3-tip\";\r\nimport irisData from \"./data/irisData.js\";\r\nimport spiralData from \"./data/spiralData.js\";\r\nimport { addPlotTitle } from \"./plotTitle.mjs\";\r\nimport { attachPlotZoom } from \"./plotZoom.mjs\";\r\n\r\nexport const scatterDt = {\r\n  data: {\r\n    divNum: 1,\r\n    iris: {\r\n      json: irisData,\r\n      csv: null\r\n    },\r\n    spiral: {\r\n      json: spiralData,\r\n      csv: null\r\n    },\r\n    file: {\r\n      json: null,\r\n      csv: null\r\n    }\r\n  }\r\n};\r\n\r\nfunction selectGroup(ctx, group, maxOpacity) {\r\n  const groupElements = d3.selectAll(\".points\")\r\n    .filter(d => d.group !== group);\r\n  const activeGroup = d3.selectAll(\".keyRects\")\r\n    .filter(d => d === group);\r\n  const otherElements = d3.selectAll(\".points\")\r\n    .filter(d => d.group === group);\r\n  const otherGroups = d3.selectAll(\".keyRects\")\r\n    .filter(d => d !== group);\r\n\r\n  groupElements.transition().attr(\"opacity\", 0.1);\r\n  otherGroups.transition().attr(\"opacity\", 0.1);\r\n  otherElements.transition().attr(\"opacity\", maxOpacity);\r\n  activeGroup.transition().attr(\"opacity\", maxOpacity);\r\n}\r\n\r\nexport async function scatter_plot(options = {}) {\r\n  console.log(\"RUNNING: scatter_plot() function----------\");\r\n\r\n  const {\r\n    divId: divId = \"\",\r\n    data: data = spiralData,\r\n    width: width = 600,\r\n    height: height = 460,\r\n    colors: colors = [\"red\", \"blue\", \"orange\", \"green\", \"purple\", \"pink\", \"yellow\"],\r\n    margin: userMargin = {}, // e.g. { top: 25, right: 170, bottom: 45, left: 45 } — override any side\r\n    title: title = \"Scatter Plot\", // string, or null/\"\" to hide\r\n    zoomable: zoomable = true, // wheel to zoom, drag to pan\r\n    xCol: xCol = null,  // column name for x-axis\r\n    yCol: yCol = null   // column name for y-axis\r\n  } = options;\r\n  const targetDivId = divId;\r\n\r\n  // Resolve target container\r\n  let div = targetDivId ? document.getElementById(targetDivId) : null;\r\n  if (div) {\r\n    console.log(\"div provided in function parameters:\", targetDivId);\r\n    div.innerHTML = \"\";\r\n  } else {\r\n    const currentDivNum = scatterDt.data.divNum;\r\n    div = document.createElement(\"div\");\r\n    div.id = targetDivId || 'scatter_plot' + currentDivNum;\r\n    console.log(\"div NOT provided within function options or doesn't exist... created a new div with id: \", div.id);\r\n    const plotsPanel = document.getElementById(\"plotsPanel\");\r\n    (plotsPanel || document.body).appendChild(div);\r\n    scatterDt.data.divNum = currentDivNum + 1;\r\n  }\r\n\r\n  // Extract columns\r\n  const sample = data[0] || {};\r\n  const keys = Object.keys(sample);\r\n  const numericKeys = keys.filter(k => typeof sample[k] === \"number\");\r\n  const categoryKey = keys.find(k => typeof sample[k] !== \"number\");\r\n\r\n  // Auto-select x and y columns if not provided\r\n  const xColumn = xCol || numericKeys[0] || keys[0];\r\n  const yColumn = yCol || numericKeys[1] || keys[1];\r\n\r\n  if (!xColumn || !yColumn) {\r\n    console.error(\"Need at least 2 columns for scatter plot\");\r\n    return;\r\n  }\r\n\r\n  // Build scatter data\r\n  const scatterData = data.map((row, i) => ({\r\n    x: row[xColumn],\r\n    y: row[yColumn],\r\n    group: categoryKey ? row[categoryKey] : \"row_\" + i,\r\n    name: categoryKey ? String(row[categoryKey]) + \"_\" + i : \"id_\" + i,\r\n    original: row\r\n  }));\r\n\r\n  const groups = [...new Set(scatterData.map(d => d.group))];\r\n  const color = d3.scaleOrdinal(colors).domain(groups);\r\n\r\n  const fontFamily = 'monospace';\r\n  const maxOpacity = 0.7;\r\n  const margin = {\r\n    top: 42, // headroom so the title clears the plot area\r\n    right: 170,\r\n    bottom: 45,\r\n    left: 45,\r\n    ...userMargin\r\n  };\r\n\r\n  // Compute padded domain for x\r\n  const minX = d3.min(scatterData, d => d.x);\r\n  const maxX = d3.max(scatterData, d => d.x);\r\n  const rangeX = maxX - minX;\r\n  const paddedMinX = minX - rangeX * 0.10;\r\n  const paddedMaxX = maxX + rangeX * 0.10;\r\n\r\n  const x = d3.scaleLinear()\r\n    .domain([paddedMinX, paddedMaxX])\r\n    .range([margin.left, width - margin.right]);\r\n\r\n  const xAxis = g => g\r\n    .attr(\"transform\", `translate(0,${height - margin.bottom + 5})`)\r\n    .call(d3.axisBottom(x).ticks(6).tickSizeOuter(0))\r\n    .call(g => g.select(\".domain\")\r\n      .attr(\"stroke\", \"#000\")\r\n      .attr(\"stroke-width\", 1))\r\n    .call(g => g.selectAll(\".tick line\")\r\n      .attr(\"stroke\", \"#000\")\r\n      .attr(\"stroke-width\", 1))\r\n    .call(g => g.selectAll(\".tick text\")\r\n      .attr(\"fill\", \"#000\")\r\n      .style(\"font-size\", \"12px\"))\r\n    .call(g => g.append(\"text\")\r\n      .attr(\"x\", width - margin.right)\r\n      .attr(\"y\", 35)\r\n      .attr(\"fill\", \"#000\")\r\n      .attr(\"font-weight\", \"bold\")\r\n      .attr(\"text-anchor\", \"end\")\r\n      .text(xColumn));\r\n\r\n  const y = d3.scaleLinear()\r\n    .domain(d3.extent(scatterData, d => d.y))\r\n    .range([height - margin.bottom, margin.top]);\r\n\r\n  const yAxis = g => g\r\n    .attr(\"transform\", `translate(${margin.left - 5},0)`)\r\n    .call(d3.axisLeft(y).ticks(6).tickSizeOuter(0))\r\n    .call(g => g.select(\".domain\")\r\n      .attr(\"stroke\", \"#000\")\r\n      .attr(\"stroke-width\", 1))\r\n    .call(g => g.selectAll(\".tick line\")\r\n      .attr(\"stroke\", \"#000\")\r\n      .attr(\"stroke-width\", 1))\r\n    .call(g => g.selectAll(\".tick text\")\r\n      .attr(\"fill\", \"#000\")\r\n      .style(\"font-size\", \"12px\"))\r\n    .call(g => g.append(\"text\")\r\n      .attr(\"x\", -margin.top)\r\n      .attr(\"y\", margin.top - 5)\r\n      .attr(\"fill\", \"#000\")\r\n      .attr(\"font-weight\", \"bold\")\r\n      .attr(\"text-anchor\", \"start\")\r\n      .text(yColumn));\r\n\r\n  const svg = d3.create(\"svg\")\r\n    .style(\"background\", \"white\")\r\n    .style(\"overflow\", \"visible\");\r\n\r\n  svg.attr(\"id\", \"svgid_scatter\");\r\n\r\n  const g = svg\r\n    .attr('width', width)\r\n    .attr('height', height)\r\n    .append('g');\r\n\r\n  // Zoom/pan (shared helper, see plotZoom.mjs)\r\n  attachPlotZoom(svg, g, { enabled: zoomable });\r\n\r\n  // Title (shared style, centered over the plot area; inside the zoom layer so it\r\n  // moves with the plot)\r\n  addPlotTitle(g, title, margin.left + (width - margin.left - margin.right) / 2, Math.max(16, margin.top / 2));\r\n\r\n  g.append(\"g\").call(xAxis);\r\n  g.append(\"g\").call(yAxis);\r\n\r\n  g.append(\"rect\")\r\n    .attr(\"id\", \"background\")\r\n    .attr(\"x\", margin.left)\r\n    .attr(\"y\", margin.top)\r\n    .attr(\"width\", width - margin.left - margin.right)\r\n    .attr(\"height\", height - margin.top - margin.bottom)\r\n    .attr(\"fill\", \"white\")\r\n    .on(\"click\", (event, d) => selectGroup(null, d, maxOpacity));\r\n\r\n  const gPoints = g.append(\"g\").attr(\"class\", \"gPoints\").style(\"isolation\", \"isolate\");\r\n\r\n  const tooltip = d3tip()\r\n    .style('border', 'solid 2px navy')\r\n    .style('background-color', 'white')\r\n    .style(\"color\", \"#000\")\r\n    .style('border-radius', '7px')\r\n    .style('padding', '8px 12px')\r\n    .style('font-family', fontFamily)\r\n    .style('font-size', '12px')\r\n    .style('max-width', '250px')\r\n    .style('width', 'auto')\r\n    .html((event, d) => `\r\n      <div style='line-height: 1.5;'>\r\n        <div><strong>Name:</strong> ${d.name}</div>\r\n        <div><strong>${xColumn}:</strong> ${d.x.toFixed(2)}</div>\r\n        <div><strong>${yColumn}:</strong> ${d.y.toFixed(2)}</div>\r\n      </div>`);\r\n\r\n  svg.call(tooltip);\r\n\r\n  gPoints\r\n    .selectAll(\"circle\")\r\n    .data(scatterData)\r\n    .enter()\r\n    .append(\"circle\")\r\n    .attr(\"class\", \"points\")\r\n    .attr(\"cx\", d => x(d.x))\r\n    .attr(\"cy\", d => y(d.y))\r\n    .attr(\"fill\", d => color(d.group))\r\n    .attr(\"opacity\", 0.7)\r\n    .attr(\"r\", 4)\r\n    .on('mouseover', tooltip.show)\r\n    .on('mouseout', tooltip.hide);\r\n\r\n  const legend = g.append(\"g\")\r\n    .selectAll(\"rect\")\r\n    .data(groups);\r\n\r\n  legend.enter().append(\"rect\")\r\n    .attr(\"class\", \"keyRects\")\r\n    .attr(\"x\", width - margin.left - 50)\r\n    .attr(\"y\", (d, i) => i * 20)\r\n    .attr(\"width\", 12)\r\n    .attr(\"height\", 12)\r\n    .attr(\"fill\", d => color(d))\r\n    .on(\"click\", (event, d) => selectGroup(null, d, maxOpacity));\r\n\r\n  legend.enter().append(\"text\")\r\n    .attr(\"x\", d => width - margin.left - 30)\r\n    .attr(\"y\", (d, i) => i * 20)\r\n    .attr(\"dy\", \"0.7em\")\r\n    .text(d => `${d}`)\r\n    .style(\"font-size\", \"14px\")\r\n    .on(\"click\", (event, d) => selectGroup(null, d, maxOpacity));\r\n\r\n  div.appendChild(svg.node());\r\n  return svg.node();\r\n}\r\n\r\nexport const scatter_UI = async (options = {}) => {\r\n  console.log(\"Scatter UI - not yet implemented\");\r\n  console.log(\"Options:\", options);\r\n  \r\n  // TODO: Implement UI similar to pca_UI with file upload and plot rendering\r\n};\r\n","import * as d3 from \"d3\";\r\nimport d3tip from \"d3-tip\";\r\nimport irisData from \"./data/irisData.js\";\r\nimport spiralData from \"./data/spiralData.js\";\r\nimport { addPlotTitle } from \"./plotTitle.mjs\";\r\nimport { attachPlotZoom } from \"./plotZoom.mjs\";\r\n\r\nexport const pairsDt = {\r\n  data: {\r\n    divNum: 1,\r\n    iris: {\r\n      json: irisData,\r\n      csv: null\r\n    },\r\n    spiral: {\r\n      json: spiralData,\r\n      csv: null\r\n    },\r\n    file: {\r\n      json: null,\r\n      csv: null\r\n    }\r\n  }\r\n};\r\n\r\nlet selectedPairsGroup = null;\r\n\r\nfunction resetGroups(maxOpacity) {\r\n  d3.selectAll(\".points\")\r\n    .transition()\r\n    .attr(\"opacity\", maxOpacity);\r\n  d3.selectAll(\".keyRects\")\r\n    .transition()\r\n    .attr(\"opacity\", 1);\r\n  selectedPairsGroup = null;\r\n}\r\n\r\n\r\n\r\nfunction selectGroup(ctx, group, maxOpacity) {\r\n  const groupElements = d3.selectAll(\".points\")\r\n    .filter(d => d.group !== group);\r\n  const activeGroup = d3.selectAll(\".keyRects\")\r\n    .filter(d => d === group);\r\n  const otherElements = d3.selectAll(\".points\")\r\n    .filter(d => d.group === group);\r\n  const otherGroups = d3.selectAll(\".keyRects\")\r\n    .filter(d => d !== group);\r\n\r\n  groupElements.transition().attr(\"opacity\", 0.1);\r\n  otherGroups.transition().attr(\"opacity\", 0.1);\r\n  otherElements.transition().attr(\"opacity\", maxOpacity);\r\n  activeGroup.transition().attr(\"opacity\", maxOpacity);\r\n}\r\n\r\nexport async function pairs_plot(options = {}) {\r\n  console.log(\"RUNNING: pairs_plot() function----------\");\r\n\r\n  const {\r\n    divId: divId = \"\",\r\n    data: data = irisData,\r\n    width: width = 600, // standardized default across all clustjs plots\r\n    height: height = 600, // unused: the grid is square and self-sizes from width\r\n    colors: colors = [\"red\", \"blue\", \"orange\", \"green\", \"purple\", \"pink\", \"yellow\"],\r\n    margin: userMargin = {}, // e.g. { top: 60, right: 150, bottom: 40, left: 60 } — override any side\r\n    title: title = \"Pairs Plot\", // string, or null/\"\" to hide\r\n    zoomable: zoomable = true, // wheel to zoom, drag to pan\r\n  } = options;\r\n  const targetDivId = divId;\r\n\r\n  // Resolve target container\r\n  let div = targetDivId ? document.getElementById(targetDivId) : null;\r\n  if (div) {\r\n    console.log(\"div provided in function parameters:\", targetDivId);\r\n    div.innerHTML = \"\";\r\n  } else {\r\n    const currentDivNum = pairsDt.data.divNum;\r\n    div = document.createElement(\"div\");\r\n    div.id = targetDivId || 'pairs_plot' + currentDivNum;\r\n    console.log(\"div NOT provided... created new div with id:\", div.id);\r\n    const plotsPanel = document.getElementById(\"plotsPanel\");\r\n    (plotsPanel || document.body).appendChild(div);\r\n    pairsDt.data.divNum = currentDivNum + 1;\r\n  }\r\n\r\n  // Extract numeric columns and categorical column\r\n  const sample = data[0] || {};\r\n  const keys = Object.keys(sample);\r\n  const numericKeys = keys.filter(k => typeof sample[k] === \"number\");\r\n  const categoryKey = keys.find(k => typeof sample[k] !== \"number\");\r\n\r\n  if (numericKeys.length < 2) {\r\n    div.innerHTML = '<div class=\"text-muted\">Need at least 2 numeric columns for pairs plot</div>';\r\n    return;\r\n  }\r\n\r\n  // Build data with groups\r\n  const plotData = data.map((row, i) => ({\r\n    values: numericKeys.map(k => row[k]),\r\n    group: categoryKey ? row[categoryKey] : \"row_\" + i,\r\n    name: categoryKey ? String(row[categoryKey]) + \"_\" + i : \"id_\" + i\r\n  }));\r\n\r\n  const groups = [...new Set(plotData.map(d => d.group))];\r\n  const color = d3.scaleOrdinal(colors).domain(groups);\r\n  const maxOpacity = 0.6;\r\n\r\n  const n = numericKeys.length;\r\n  const margin = { top: 60, right: 150, bottom: 40, left: 60, ...userMargin };\r\n  // Cell size derived from the requested width minus the real margins, so the\r\n  // rendered SVG width matches the requested width (capped at 180px per cell).\r\n  const cellSize = Math.min(180, (width - margin.left - margin.right) / n);\r\n  const plotWidth = cellSize * n + margin.left + margin.right;\r\n  const plotHeight = cellSize * n + margin.top + margin.bottom;\r\n\r\n  const svg = d3.create(\"svg\")\r\n    .attr(\"width\", plotWidth)\r\n    .attr(\"height\", plotHeight)\r\n    .style(\"background\", \"white\");\r\n\r\n  // Zoom wrapper — the grid, legend and title zoom/pan together\r\n  const zoomLayer = svg.append(\"g\").attr(\"class\", \"zoom-layer\");\r\n  attachPlotZoom(svg, zoomLayer, { enabled: zoomable });\r\n\r\n  // Title (shared style, centered over the pairs grid; inside the zoom layer so it\r\n  // moves with the plot)\r\n  addPlotTitle(zoomLayer, title, margin.left + (cellSize * n) / 2, Math.max(16, margin.top / 2));\r\n\r\n  const g = zoomLayer.append(\"g\")\r\n    .attr(\"transform\", `translate(${margin.left},${margin.top})`);\r\n\r\n  // Add background for click reset\r\n  g.append(\"rect\")\r\n    .attr(\"x\", 0)\r\n    .attr(\"y\", 0)\r\n    .attr(\"width\", cellSize * n)\r\n    .attr(\"height\", cellSize * n)\r\n    .attr(\"fill\", \"transparent\")\r\n    .attr(\"pointer-events\", \"all\")\r\n    .style(\"cursor\", \"pointer\")\r\n    .on(\"click\", () => resetGroups(maxOpacity));\r\n\r\n  // Create tooltip\r\n  const tooltip = d3tip()\r\n    .style('border', 'solid 2px navy')\r\n    .style('background-color', 'white')\r\n    .style(\"color\", \"#000\")\r\n    .style('border-radius', '7px')\r\n    .style('padding', '8px 12px')\r\n    .style('font-family', 'monospace')\r\n    .style('font-size', '11px')\r\n    .html((event, d) => {\r\n      const xVar = d.xVar;\r\n      const yVar = d.yVar;\r\n      return `\r\n        <div>\r\n          <strong>${d.group}</strong><br/>\r\n          ${xVar}: ${d.xVal.toFixed(2)}<br/>\r\n          ${yVar}: ${d.yVal.toFixed(2)}\r\n        </div>`;\r\n    });\r\n\r\n  svg.call(tooltip);\r\n\r\n  // Create scales for each variable\r\n  const scales = numericKeys.map(key => {\r\n    const values = data.map(d => d[key]);\r\n    return d3.scaleLinear()\r\n      .domain(d3.extent(values))\r\n      .range([cellSize, 0]);\r\n  });\r\n\r\n  // Create grid of scatter plots\r\n  for (let i = 0; i < n; i++) {\r\n    for (let j = 0; j < n; j++) {\r\n      const gCell = g.append(\"g\")\r\n        .attr(\"transform\", `translate(${j * cellSize},${i * cellSize})`);\r\n\r\n      // Add border\r\n      gCell.append(\"rect\")\r\n        .attr(\"width\", cellSize)\r\n        .attr(\"height\", cellSize)\r\n        .attr(\"fill\", \"none\")\r\n        .attr(\"stroke\", \"#ccc\");\r\n\r\n      if (i === j) {\r\n        // Diagonal: show variable name\r\n        gCell.append(\"text\")\r\n          .attr(\"x\", cellSize / 2)\r\n          .attr(\"y\", cellSize / 2)\r\n          .attr(\"text-anchor\", \"middle\")\r\n          .attr(\"dominant-baseline\", \"middle\")\r\n          .style(\"font-size\", \"11px\")\r\n          .style(\"font-weight\", \"bold\")\r\n          .text(numericKeys[i]);\r\n      } else {\r\n        // Off-diagonal: scatter plot\r\n        const xScale = scales[j];\r\n        const yScale = scales[i];\r\n\r\n        plotData.forEach(d => {\r\n          gCell.append(\"circle\")\r\n            .datum({\r\n              ...d,\r\n              xVar: numericKeys[j],\r\n              yVar: numericKeys[i],\r\n              xVal: d.values[j],\r\n              yVal: d.values[i]\r\n            })\r\n            .attr(\"class\", \"points\")\r\n            .attr(\"cx\", xScale(d.values[j]))\r\n            .attr(\"cy\", yScale(d.values[i]))\r\n            .attr(\"r\", 2.5)\r\n            .attr(\"fill\", color(d.group))\r\n            .attr(\"opacity\", maxOpacity)\r\n            .on('mouseover', tooltip.show)\r\n            .on('mouseout', tooltip.hide);\r\n        });\r\n      }\r\n\r\n      // Add axis labels on edges\r\n      if (i === n - 1) {\r\n        // Bottom row - x labels\r\n        gCell.append(\"text\")\r\n          .attr(\"x\", cellSize / 2)\r\n          .attr(\"y\", cellSize + 15)\r\n          .attr(\"text-anchor\", \"middle\")\r\n          .style(\"font-size\", \"9px\")\r\n          .text(numericKeys[j]);\r\n      }\r\n\r\n      if (j === 0) {\r\n        // Left column - y labels\r\n        gCell.append(\"text\")\r\n          .attr(\"x\", -10)\r\n          .attr(\"y\", cellSize / 2)\r\n          .attr(\"text-anchor\", \"end\")\r\n          .attr(\"dominant-baseline\", \"middle\")\r\n          .style(\"font-size\", \"9px\")\r\n          .text(numericKeys[i]);\r\n      }\r\n    }\r\n  }\r\n\r\n  // Add legend\r\n  const legendG = zoomLayer.append(\"g\")\r\n    .attr(\"transform\", `translate(${plotWidth - margin.right + 20},${margin.top})`);\r\n\r\n  const legend = legendG\r\n    .selectAll(\"rect\")\r\n    .data(groups);\r\n\r\n  legend.enter().append(\"rect\")\r\n    .attr(\"class\", \"keyRects\")\r\n    .attr(\"x\", 0)\r\n    .attr(\"y\", (d, i) => i * 20)\r\n    .attr(\"width\", 12)\r\n    .attr(\"height\", 12)\r\n    .attr(\"fill\", d => color(d))\r\n    .on(\"click\", (event, d) => selectGroup(null, d, maxOpacity));\r\n\r\n  legend.enter().append(\"text\")\r\n    .attr(\"x\", 20)\r\n    .attr(\"y\", (d, i) => i * 20)\r\n    .attr(\"dy\", \"0.7em\")\r\n    .text(d => `${d}`)\r\n    .style(\"font-size\", \"14px\")\r\n    .on(\"click\", (event, d) => selectGroup(null, d, maxOpacity));\r\n\r\n  div.appendChild(svg.node());\r\n  return svg.node();\r\n}\r\n\r\nexport async function pairs_UI(options = {}) {\r\n  const {\r\n    divId: divId = \"\",\r\n    data: data = irisData,\r\n    width: width = 600,\r\n    height: height = 600,\r\n    colors: colors = [\"red\", \"blue\", \"orange\", \"green\", \"purple\", \"pink\", \"yellow\"],\r\n    margin: margin = {},\r\n  } = options;\r\n\r\n  await pairs_plot({ divId, data, width, height, colors, margin });\r\n}","import * as d3 from \"d3\";\r\nimport irisData from \"./data/irisData.js\";\r\nimport { heatmap_plot } from \"./heatmap.mjs\";\r\nimport { hclust_plot } from \"./hclust.mjs\";\r\n\r\n// Convert a value to a finite number or null (missing).\r\nconst toFiniteNumber = value => {\r\n  if (typeof value === \"number\") return Number.isFinite(value) ? value : null;\r\n  if (typeof value === \"string\" && value.trim() !== \"\") {\r\n    const parsed = Number(value);\r\n    return Number.isFinite(parsed) ? parsed : null;\r\n  }\r\n  return null;\r\n};\r\n\r\n// Accept either an array of arrays (numeric matrix) or an array of objects.\r\n// Returns { matrix, rowNames, colNames } where matrix is row-major numeric (null = missing).\r\nconst coerceMatrix = ({ data, rowNames, colNames }) => {\r\n  if (!Array.isArray(data) || data.length === 0) {\r\n    throw new Error(\"distance_plot() requires a non-empty data array.\");\r\n  }\r\n\r\n  if (Array.isArray(data[0])) {\r\n    const matrix = data.map(row => row.map(toFiniteNumber));\r\n    return {\r\n      matrix,\r\n      rowNames: rowNames ?? matrix.map((_, i) => `row${i}`),\r\n      colNames: colNames ?? (matrix[0] ?? []).map((_, j) => `col${j}`)\r\n    };\r\n  }\r\n\r\n  if (typeof data[0] !== \"object\" || data[0] === null) {\r\n    throw new Error(\"distance_plot() data must be an array of arrays or array of objects.\");\r\n  }\r\n\r\n  const keys = Object.keys(data[0]);\r\n  const numericKeys = keys.filter(key => data.some(row => toFiniteNumber(row[key]) !== null));\r\n  const textKeys = keys.filter(key => data.some(row => typeof row[key] === \"string\" && row[key].trim() !== \"\"));\r\n  const labelKey = textKeys.length ? textKeys[0] : null;\r\n\r\n  const matrix = data.map(row => numericKeys.map(key => toFiniteNumber(row[key])));\r\n  return {\r\n    matrix,\r\n    rowNames: rowNames ?? (labelKey ? data.map((row, i) => `${row[labelKey]}${i}`) : matrix.map((_, i) => `row${i}`)),\r\n    colNames: colNames ?? numericKeys\r\n  };\r\n};\r\n\r\n// Standardize each column to zero mean / unit sd (ignoring missing), like R's scale().\r\nexport const standardizeColumns = matrix => {\r\n  const rowCount = matrix.length;\r\n  const colCount = matrix[0]?.length ?? 0;\r\n  const scaled = matrix.map(row => row.slice());\r\n\r\n  for (let c = 0; c < colCount; c++) {\r\n    const values = [];\r\n    for (let r = 0; r < rowCount; r++) {\r\n      const v = matrix[r][c];\r\n      if (v !== null && Number.isFinite(v)) values.push(v);\r\n    }\r\n    if (values.length === 0) continue;\r\n    const mean = d3.mean(values);\r\n    const sd = d3.deviation(values) || 1;\r\n    for (let r = 0; r < rowCount; r++) {\r\n      const v = matrix[r][c];\r\n      scaled[r][c] = v === null || !Number.isFinite(v) ? null : (v - mean) / sd;\r\n    }\r\n  }\r\n  return scaled;\r\n};\r\n\r\n// Pairwise distance between a set of vectors, ignoring dimensions missing in either\r\n// vector and rescaling by P/q (R's dist() missing-value convention). Returns a\r\n// symmetric matrix with a zero diagonal.\r\nexport const distanceMatrix = (vectors, metric = \"euclidean\") => {\r\n  const isManhattan = metric === \"manhattan\" || metric === \"cityblock\";\r\n  const n = vectors.length;\r\n  const dims = vectors[0]?.length ?? 0;\r\n  const out = Array.from({ length: n }, () => new Array(n).fill(0));\r\n\r\n  for (let i = 0; i < n; i++) {\r\n    for (let j = i + 1; j < n; j++) {\r\n      let accumulated = 0;\r\n      let shared = 0;\r\n      for (let k = 0; k < dims; k++) {\r\n        const a = vectors[i][k];\r\n        const b = vectors[j][k];\r\n        if (a === null || b === null || !Number.isFinite(a) || !Number.isFinite(b)) continue;\r\n        const diff = a - b;\r\n        accumulated += isManhattan ? Math.abs(diff) : diff * diff;\r\n        shared++;\r\n      }\r\n      const value = shared === 0\r\n        ? 0\r\n        : (isManhattan\r\n          ? (dims / shared) * accumulated\r\n          : Math.sqrt((dims / shared) * accumulated));\r\n      out[i][j] = value;\r\n      out[j][i] = value;\r\n    }\r\n  }\r\n  return out;\r\n};\r\n\r\n// Render a pairwise-distance matrix as a heatmap.\r\n// axis: \"cols\" (variable-to-variable) or \"rows\" (observation-to-observation).\r\nexport async function distance_plot(options = {}) {\r\n  const {\r\n    divId = \"\",\r\n    data = irisData,\r\n    rowNames: inputRowNames,\r\n    colNames: inputColNames,\r\n    axis = \"cols\",\r\n    metric = \"euclidean\",\r\n    standardize = true,\r\n    width,\r\n    height,\r\n    color = null,\r\n    title: inputTitle, // string, null to hide; default is auto-generated\r\n    marginLeft = 20,   // breathing room on the left edge\r\n    ...heatmapOptions\r\n  } = options;\r\n\r\n  const { matrix, rowNames, colNames } = coerceMatrix({\r\n    data,\r\n    rowNames: inputRowNames,\r\n    colNames: inputColNames\r\n  });\r\n\r\n  const prepared = standardize ? standardizeColumns(matrix) : matrix;\r\n\r\n  // Build the list of vectors to compare.\r\n  // - cols: each variable is a vector over observations (transpose).\r\n  // - rows: each observation is a vector over variables.\r\n  const transpose = m => (m[0] ?? []).map((_, c) => m.map(row => row[c]));\r\n  const vectors = axis === \"rows\" ? prepared : transpose(prepared);\r\n  const labels = axis === \"rows\" ? rowNames : colNames;\r\n\r\n  const dist = distanceMatrix(vectors, metric);\r\n\r\n  // Auto title, e.g. \"Row distances (euclidean, standardized)\"\r\n  const title = inputTitle !== undefined\r\n    ? inputTitle\r\n    : `${axis === \"rows\" ? \"Row\" : \"Column\"} distances (${metric}${standardize ? \", standardized\" : \"\"})`;\r\n\r\n  return heatmap_plot({\r\n    divId,\r\n    data: dist,\r\n    rowNames: labels,\r\n    colNames: labels,\r\n    width,\r\n    height,\r\n    color,\r\n    title,\r\n    marginLeft,\r\n    missingValue: null,\r\n    ...heatmapOptions\r\n  });\r\n}\r\n\r\n// Linked hclust + distance view: renders an hclust plot and a distance heatmap that\r\n// Linked hclust + distance view: renders an hclust plot and a distance heatmap.\r\n// Clicking a dendrogram branch outlines the same rows/columns in violet on the\r\n// distance heatmap (like hclust's own selection) and shows a \"Plot selection\"\r\n// button on the distance plot to drill down to the selected subset.\r\n// Clearing the selection restores the full-data distance plot.\r\n// Note: selection indices map to the original data, so this assumes hclust's default\r\n// removeMissingBy: \"none\" (no rows/columns dropped before clustering).\r\nexport async function hclust_distance_plot(options = {}) {\r\n  const {\r\n    divId = \"\",              // hclust container\r\n    distanceDivId = \"\",      // distance heatmap container; created right after the hclust div if omitted\r\n    data = irisData,\r\n    rowNames: inputRowNames,\r\n    colNames: inputColNames,\r\n    axis = \"rows\",           // which distances to show: \"rows\" or \"cols\"\r\n    metric = \"euclidean\",\r\n    standardize = true,\r\n    distanceOptions = {},    // extra options forwarded to distance_plot (width, color, ...)\r\n    onSelectionChange = null, // still called with the hclust selection\r\n    onPlotSelection = null,   // still called when \"Plot selection\" is clicked\r\n    ...hclustOptions          // everything else forwarded to hclust_plot\r\n  } = options;\r\n\r\n  const { matrix, rowNames, colNames } = coerceMatrix({\r\n    data,\r\n    rowNames: inputRowNames,\r\n    colNames: inputColNames\r\n  });\r\n\r\n  // Standardize ONCE on the full data: subset distance plots reuse these z-scores\r\n  // instead of re-standardizing within the selection.\r\n  const prepared = standardize ? standardizeColumns(matrix) : matrix;\r\n\r\n  // Resolve or create the distance container\r\n  let distDiv = distanceDivId ? document.getElementById(distanceDivId) : null;\r\n  if (!distDiv) {\r\n    distDiv = document.createElement(\"div\");\r\n    distDiv.id = distanceDivId || `hclustDistance_${Math.random().toString(36).slice(2, 8)}`;\r\n    const host = divId ? document.getElementById(divId) : null;\r\n    if (host && host.parentNode) host.parentNode.insertBefore(distDiv, host.nextSibling);\r\n    else document.body.appendChild(distDiv);\r\n  }\r\n\r\n  const autoTitle = suffix => distanceOptions.title !== undefined\r\n    ? distanceOptions.title\r\n    : `${axis === \"rows\" ? \"Row\" : \"Column\"} distances (${metric}${standardize ? \", standardized\" : \"\"})${suffix}`;\r\n\r\n  const base = {\r\n    divId: distDiv.id,\r\n    axis,\r\n    metric,\r\n    standardize: false, // 'prepared' already carries full-data z-scores\r\n    ...distanceOptions\r\n  };\r\n\r\n  const addButton = (label, onClick) => {\r\n    const bar = document.createElement(\"div\");\r\n    bar.style.cssText = \"display:flex;gap:6px;margin-bottom:4px;\";\r\n    const btn = document.createElement(\"button\");\r\n    btn.textContent = label;\r\n    btn.style.cssText = \"padding:3px 10px;cursor:pointer;\"; // match hclust's buttons\r\n    btn.onclick = onClick;\r\n    bar.appendChild(btn);\r\n    distDiv.prepend(bar);\r\n  };\r\n\r\n  // Full matrix; the selected rows/cols are outlined in violet like hclust,\r\n  // with a \"Plot selection\" button to drill down\r\n  const renderFull = async selection => {\r\n    const sel = axis === \"rows\" ? selection?.rowIndices : selection?.colIndices;\r\n    const hasHighlight = Array.isArray(sel) && sel.length > 0;\r\n    await distance_plot({\r\n      ...base,\r\n      data: prepared,\r\n      rowNames,\r\n      colNames,\r\n      highlightRows: hasHighlight ? sel : null,\r\n      highlightCols: hasHighlight ? sel : null,\r\n      title: autoTitle(hasHighlight ? ` — ${sel.length} selected` : \"\")\r\n    });\r\n    if (hasHighlight) addButton(\"Plot selection\", () => renderSubset(selection));\r\n  };\r\n\r\n  // Subset drill-down: (selected rows or all) × (selected cols or all)\r\n  const renderSubset = async selection => {\r\n    const useRows = selection?.rowIndices?.length ? selection.rowIndices : matrix.map((_, i) => i);\r\n    const useCols = selection?.colIndices?.length ? selection.colIndices : (matrix[0] ?? []).map((_, j) => j);\r\n    const subMatrix = useRows.map(r => useCols.map(c => prepared[r][c]));\r\n    await distance_plot({\r\n      ...base,\r\n      data: subMatrix,\r\n      rowNames: useRows.map(r => rowNames[r]),\r\n      colNames: useCols.map(c => colNames[c]),\r\n      title: autoTitle(` — selection (${useRows.length}×${useCols.length})`)\r\n    });\r\n    addButton(\"Show all\", () => renderFull(selection));\r\n  };\r\n\r\n  // Initial distance plot on the full data\r\n  await renderFull(null);\r\n\r\n  return hclust_plot({\r\n    divId,\r\n    data,\r\n    rowNames: inputRowNames,\r\n    colNames: inputColNames,\r\n    ...hclustOptions,\r\n    // Branch click: highlight the same rows/cols on the distance heatmap\r\n    onSelectionChange: selection => {\r\n      renderFull(selection);\r\n      if (typeof onSelectionChange === \"function\") onSelectionChange(selection);\r\n    },\r\n    // \"Plot selection\": drill the distance heatmap down to the subset, like hclust\r\n    onPlotSelection: selection => {\r\n      renderSubset(selection);\r\n      if (typeof onPlotSelection === \"function\") onPlotSelection(selection);\r\n    }\r\n  });\r\n}\r\n","// ===============================\r\n// DATASETS\r\n// ===============================\r\nexport { default as irisData } from \"./data/irisData.js\";\r\nexport { default as spiralData } from \"./data/spiralData.js\";\r\n\r\n// ===============================\r\n// DEPENDENCIES\r\n// ===============================\r\nexport * as d3 from \"d3\";\r\n\r\n// ===============================\r\n// PLOTS\r\n// ===============================\r\n\r\nexport { hclust_plot,  hclustDt } from \"./hclust.mjs\";\r\nexport { pca_plot, pca_UI, pcaDt } from \"./pca.mjs\";\r\nexport { tsne_plot, tsne_UI, tsneDt } from \"./tsne.mjs\";\r\nexport { umap_plot, umap_UI, umapDt } from \"./umap.mjs\";\r\nexport { scatter_plot, scatter_UI, scatterDt } from \"./scatter.mjs\";\r\nexport { pairs_plot, pairs_UI, pairsDt } from \"./pairs.mjs\";\r\nexport { heatmap_plot } from \"./heatmap.mjs\";\r\nexport { distance_plot, distanceMatrix, standardizeColumns, hclust_distance_plot } from \"./distance.mjs\";\r\n// export { hclust_plot } from \"./plots/hclust.mjs\";\r\n// optionally also export helpers\r\nexport * from \"./otherFunctions.js\";\r\n\r\n// ===============================\r\n// SDK METADATA\r\n// ===============================\r\nexport const version = \"0.1.0\";\r\n\r\n"],"names":["irisData","sepal_length","sepal_width","petal_length","petal_width","species","spiralData","f1","f2","f3","f4","label","ascending","a","b","NaN","descending","bisector","f","compare1","compare2","delta","left","x","lo","hi","length","mid","d","zero","center","i","right","number","ascendingBisect","bisectRight","bisectLeft","bisectCenter","blur2","Blur2","blurf","blurImage","radius","blur","T","S","start","stop","step","data","rx","ry","RangeError","values","width","height","Math","floor","undefined","blurx","blury","temp","slice","blurh","blurv","w","h","y","n","radius0","sum","s","j","min","max","bluri","t","s0","s1","count","valueof","value","index","array","empty","arrayify","Array","from","variance","mean","deviation","v","sqrt","extent","Adder","constructor","this","_partials","Float64Array","_n","add","p","abs","valueOf","InternMap","Map","entries","key","keyof","super","Object","defineProperties","_intern","_key","set","get","intern_get","has","intern_set","delete","intern_delete","InternSet","Set","identity","group","keys","nest","groups","flatten","flatMap","g","pop","map","rollup","reduce","rollups","unique","Error","regroup","push","permute","source","sort","F","Symbol","iterator","TypeError","Uint32Array","c","ascendingDefined","compareDefined","compare","prototype","constant","e10","e5","e2","tickSpec","power","log10","error","pow","factor","i1","i2","inc","round","ticks","reverse","tickIncrement","tickStep","nice","prestep","isFinite","ceil","thresholdSturges","log","LN2","bin","domain","threshold","sturges","histogram","isArray","xz","x0","x1","tz","tn","m","bins","bisect","_","arguments","thresholds","call","maxIndex","minIndex","quickselect","k","Infinity","z","exp","sd","swap","greatest","defined","maxValue","element","quantile","numbers","isNaN","i0","value0","subarray","quantileSorted","quantileIndex","merge","arrays","pair","range","leastIndex","minValue","shuffle$1","shuffler","random","transpose","matrix","row","superset","other","o","io","intern","done","next","ivalue","is","identity$8","epsilon","translateX","translateY","scale","offset","bandwidth","entering","__axis","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","window","devicePixelRatio","transform","context","apply","format","spacing","range0","range1","position","copy","selection","path","selectAll","tick","order","tickExit","exit","tickEnter","enter","append","attr","line","select","text","insert","transition","getAttribute","parentNode","remove","filter","each","tickSize","axisRight","axisBottom","axisLeft","noop","dispatch","test","Dispatch","type","name","callback","concat","on","typename","types","trim","split","indexOf","hasOwnProperty","that","args","xhtml","namespaces$1","svg","xlink","xml","xmlns","namespace$1","prefix","namespaces","space","local","creatorInherit","document","ownerDocument","uri","namespaceURI","documentElement","createElement","createElementNS","creatorFixed","fullname","creator$1","namespace","none","selector$1","selector","querySelector","selectorAll$1","querySelectorAll","matcher$1","matches","childMatcher","node","find","childFirst","firstElementChild","children","sparse$1","update","EnterNode","parent","datum","_next","_parent","__data__","bindIndex","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","arraylike","attrRemove","removeAttribute","attrRemoveNS","removeAttributeNS","attrConstant","setAttribute","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","defaultView$1","defaultView","styleRemove","style","removeProperty","styleConstant","priority","setProperty","styleFunction","styleValue","getPropertyValue","getComputedStyle","propertyRemove","propertyConstant","propertyFunction","classArray","string","classList","ClassList","_node","_names","classedAdd","names","list","classedRemove","classedTrue","classedFalse","classedFunction","textRemove","textContent","textConstant","textFunction","htmlRemove","innerHTML","htmlConstant","htmlFunction","raise","nextSibling","appendChild","lower","previousSibling","insertBefore","firstChild","constantNull","removeChild","selection_cloneShallow","clone","cloneNode","selection_cloneDeep","onRemove","__on","removeEventListener","listener","options","onAdd","event","contextListener","addEventListener","dispatchEvent","params","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","child","join","splice","contains","root","Selection","parents","_groups","_parents","select$1","create$1","creator","subgroups","subnode","subgroup","arrayAll","selectorAll","selectChild","match","childFind","selectChildren","childrenFilter","matcher","bind","enterGroup","updateGroup","previous","_enter","_exit","sparse","onenter","onupdate","onexit","groups0","groups1","m0","m1","merges","group0","group1","compareDocumentPosition","compareNode","sortgroups","sortgroup","nodes","size","getAttributeNS","property","classed","html","create","before","deep","typenames","parseTypenames","nextId","Local","toString","sourceEvent","pointer","currentTarget","ownerSVGElement","createSVGPoint","point","clientX","clientY","matrixTransform","getScreenCTM","inverse","getBoundingClientRect","rect","clientLeft","top","clientTop","pageX","pageY","id","nonpassive","passive","nonpassivecapture","capture","nopropagation","stopImmediatePropagation","noevent$2","preventDefault","dragDisable","view","noevent","__noselect","MozUserSelect","yesdrag","noclick","setTimeout","constant$a","DragEvent","subject","target","identifier","active","dx","dy","enumerable","configurable","defaultFilter","ctrlKey","button","defaultContainer","defaultSubject","defaultTouchable","navigator","maxTouchPoints","define","factory","extend","definition","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","l","toLowerCase","exec","parseInt","rgbn","Rgb","rgba","hsla","r","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","clampa","clampi","Hsl","hslConvert","hsl","clamph","clampt","hsl2rgb","m2","channels","assign","displayable","formatHex8","formatHsl","clamp","radians","PI","degrees","Xn","Zn","t0","t1","t2","t3","labConvert","Lab","Hcl","hcl2lab","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","atan2","hcl","cos","sin","A","B","C","D","E","ED","EB","BC_DA","cubehelix","Cubehelix","bl","cubehelixConvert","basis","v0","v1","v2","v3","basis$2","basisClosed$1","cosh","sinh","constant$9","linear","hue","gamma","nogamma","exponential","interpolateRgb","rgbGamma","end","colorRgb","rgbSpline","spline","colors","rgbBasis","rgbBasisClosed","basisClosed","numberArray","isNumberArray","ArrayBuffer","isView","DataView","genericArray","nb","na","date$1","Date","setTime","interpolateNumber","object$1","reA","reB","interpolateString","am","bm","bs","bi","lastIndex","q","one","interpolate$2","date","object","interpolateRound","svgNode","rotate","skewX","scaleX","scaleY","decompose","e","atan","interpolateTransform","parse","pxComma","pxParen","degParen","xa","ya","xb","yb","translate","interpolateTransformCss","DOMMatrix","WebKitCSSMatrix","isIdentity","interpolateTransformSvg","baseVal","consolidate","interpolateZoom","zoomRho","rho","rho2","rho4","zoom","p0","p1","ux0","uy0","w0","ux1","uy1","w1","d2","d1","b0","b1","r0","r1","coshr0","u","tanh","duration","SQRT2","_1","_2","colorHsl","hsl_default","hslLong","colorHcl","hcl_default","hclLong","cubehelixGamma","colorCubehelix","cubehelix_default","cubehelixLong","piecewise","interpolate","I","taskHead","taskTail","frame","timeout","interval","clockLast","clockNow","clockSkew","clock","performance","now","setFrame","requestAnimationFrame","clearNow","Timer","_call","_time","timer","delay","time","restart","timerFlush","wake","sleep","nap","poke","clearTimeout","clearInterval","setInterval","elapsed","emptyOn","emptyTween","schedule","timing","schedules","__transition","self","tween","state","ease","init","interrupt","tweenRemove","tween0","tween1","tweenFunction","tweenValue","_id","interpolate$1","value1","string00","interpolate0","string1","string0","string10","attrTweenNS","attrInterpolateNS","_value","attrTween","attrInterpolate","delayFunction","delayConstant","durationFunction","durationConstant","Transition","_name","newId","selection_prototype","inherit","id0","id1","on0","on1","sit","every","onFunction","styleTween","styleNull","listener0","styleMaybeRemove","styleInterpolate","textTween","textInterpolate","removeFunction","easeConstant","easeVarying","Promise","resolve","reject","cancel","quadInOut","cubicInOut","polyIn","custom","exponent","polyOut","polyInOut","pi","halfPi","sinInOut","tpmt","expInOut","circleInOut","b2","b3","b5","b6","b8","bounceOut","overshoot","backIn","backOut","backInOut","tau","elasticIn","asin","amplitude","period","elasticOut","elasticInOut","defaultTiming","easeCubicInOut","constant$8","BrushEvent","mode","noevent$1","MODE_DRAG","MODE_SPACE","MODE_HANDLE","MODE_CENTER","number1","number2","X","handles","input","output","xy","Y","XY","cursors","overlay","nw","ne","se","sw","flipX","flipY","signsX","signsY","defaultExtent","hasAttribute","viewBox","__brush","brush","dim","touchending","touchable","listeners","handleSize","initialize","handle","redraw","started","touchmoved","touchended","emitter","clean","emit","Emitter","touches","n0","n1","e0","e1","moving","lockX","lockY","metaKey","altKey","signX","signY","W","N","shifting","shiftKey","points","point0","beforestart","pts","move","moved","ended","keyCode","changedTouches","cur","dragEnable","selection0","selection1","clear","starting","keyModifiers","chord","directed","padAngle","sortGroups","sortSubgroups","sortChords","groupSums","groupIndex","chords","subgroupIndex","startAngle","endAngle","tauEpsilon","strings","Path$1","digits","_x0","_y0","_x1","_y1","_append","appendRound","moveTo","closePath","lineTo","quadraticCurveTo","y1","bezierCurveTo","x2","y2","arcTo","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","cw","da","Path","constant$7","defaultSource","defaultTarget","defaultRadius","defaultStartAngle","defaultEndAngle","defaultPadAngle","defaultArrowheadRadius","ribbon","headRadius","sourceRadius","targetRadius","buffer","ap","argv","sr","sa0","sa1","tr","ta0","ta1","tr2","ta2","ascending$2","constant$6","contains$2","ring","hole","ringContains","xi","yi","pj","xj","yj","segmentContains","collinear","noop$2","cases","Contours","smooth","smoothLinear","contours","finite","shift","contour","polygons","holes","fragmentByStart","fragmentByEnd","above","forEach","stitch","startIndex","endIndex","unshift","isorings","area","polygon","coordinates","xt","yt","valid","smooth1","_0","sign","defaultX","defaultY","defaultWeight","splitter","elen","flen","Q","Qnew","hh","bvirt","enow","fnow","eindex","findex","hindex","vec","C1","C2","orient2d","ax","ay","bx","by","cx","cy","detleft","detright","det","detsum","acxtail","acytail","bcxtail","bcytail","ahi","alo","bhi","blo","_i","_j","u3","acx","bcx","acy","bcy","estimate","errbound","C1len","C2len","Dlen","orient2dadapt","EPSILON","EDGE_STACK","Delaunator","getX","defaultGetX","getY","defaultGetY","coords","maxTriangles","_triangles","_halfedges","Int32Array","_hashSize","_hullPrev","_hullNext","_hullTri","_hullHash","_ids","_dists","hullPrev","hullNext","hullTri","hullHash","minX","minY","maxX","maxY","minDist","dist","i0x","i0y","i1x","i1y","minRadius","circumradius","i2x","i2y","quicksort","hull","d0","triangles","halfedges","ex","ey","cl","circumcenter","_cx","_cy","_hullStart","hullSize","fill","_hashKey","trianglesLen","_addTriangle","xp","yp","_legalize","pseudoAngle","ar","al","pr","pl","inCircle","hbl","_link","br","px","py","fx","fy","bp","cp","ids","dists","tempDist","arr","tmp","Polygon","Voronoi","delaunay","xmin","ymin","xmax","ymax","_circumcenters","vectors","_init","circumcenters","x3","y3","ab","render","inedges","ti","tj","_renderSegment","h0","h1","_project","renderBounds","renderCell","_clip","cellPolygons","cell","cellPolygon","c0","_regioncode","c1","_clipSegment","_step","neighbors","ci","cj","loop","ai","li","aj","lj","_cell","V","_simplify","_clipInfinite","_clipFinite","P","sx0","sy0","sx1","sy1","_edgecode","_edge","flip","vx0","vy0","vxn","vyn","vx","vy","pointX","pointY","jitter","Delaunay","flatArray","flatIterable","_delaunator","_hullIndex","bounds","hypot","hullIndex","voronoi","dc","dt","renderHull","renderPoints","hullPolygon","renderTriangle","trianglePolygons","trianglePolygon","EOL","EOF","objectConverter","columns","Function","JSON","stringify","inferColumns","rows","columnSet","column","pad","formatDate","year","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","dsvFormat","delimiter","reFormat","DELIMITER","charCodeAt","parseRows","eof","eol","token","replace","preformatBody","formatValue","formatRow","convert","customConverter","formatBody","formatRows","csv","dsv","csvParse","csvParseRows","csvFormat","csvFormatBody","csvFormatRows","csvFormatRow","csvFormatValue","tsv","tsvParse","tsvParseRows","tsvFormat","tsvFormatBody","tsvFormatRows","tsvFormatRow","tsvFormatValue","fixtz","getHours","responseBlob","response","ok","status","statusText","blob","responseArrayBuffer","arrayBuffer","responseText","fetch","then","dsvParse","responseJson","json","parser","DOMParser","parseFromString","tree","xm","ym","bottom","_root","leaf","_x","_y","Quad","quadtree","Quadtree","addAll","leaf_copy","treeProto","constant$5","jiggle","nodeById","nodeId","cover","yz","visit","quads","retainer","removeAll","visitAfter","initialAngle","formatDecimalParts","toExponential","coefficient","prefixExponent","re","formatSpecifier","specifier","FormatSpecifier","align","symbol","comma","precision","formatRounded","formatTypes","toFixed","toLocaleString","toPrecision","toUpperCase","identity$6","locale","formatPrefix","prefixes","formatLocale$1","grouping","thousands","Number","substring","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","String","percent","minus","nan","newFormat","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","out","formatTrim","padding","defaultLocale","formatLocale","precisionFixed","precisionPrefix","precisionRound","epsilon2","quarterPi","haversin","streamGeometry","geometry","stream","streamGeometryType","streamObjectType","Feature","FeatureCollection","features","Sphere","sphere","Point","MultiPoint","LineString","streamLine","MultiLineString","streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lineStart","lineEnd","polygonStart","polygonEnd","geoStream","lambda00","phi00","lambda0","cosPhi0","sinPhi0","phi0","lambda1","phi1","lambda2","deltaSum","ranges","areaRingSum","areaSum","areaStream","areaRingStart","areaRingEnd","areaRing","areaPointFirst","areaPoint","lambda","phi","dLambda","sdLambda","adLambda","cosPhi","sinPhi","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","W0","W1","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","z0","boundsStream","boundsPoint","boundsLineStart","boundsLineEnd","boundsRingPoint","boundsRingStart","boundsRingEnd","linePoint","normal","inflection","phii","lambdai","antimeridian","angle","rangeCompare","rangeContains","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointCartesian","centroidLinePointFirst","centroidLinePoint","centroidRingPointFirst","centroidRingPoint","cz","constant$4","compose","invert","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","forward","circleStream","direction","cosRadius","sinRadius","circleRadius","clipBuffer","lines","rejoin","result","pointEqual","Intersection","entry","clipRejoin","segments","compareIntersection","startInside","clip","segment","link","current","isSubject","longitude","polygonContains","winding","sinPhi1","cosPhi1","point1","absDelta","intersection","phiArc","pointVisible","clipLine","sink","ringBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","pointLine","ringSegments","validSegment","clipAntimeridian","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","to","clipCircle","cr","smallRadius","notHemisphere","visible","intersect","two","n2","n2n2","n1n2","determinant","c2","n1xn2","uu","polar","q1","code","v00","point2","lengthSum","clipMax","clipMin","clipRectangle","corner","comparePoint","ca","cb","x__","y__","v__","x_","y_","v_","first","activeStream","bufferStream","clipStream","polygonInside","cleanInside","lengthStream","lengthPointFirst","lengthLineEnd","lengthPoint","cosDelta","length$1","distance","containsObjectType","containsGeometry","containsGeometryType","containsPoint","containsLine","containsPolygon","ao","bo","ringRadians","pointRadians","graticuleX","graticuleY","graticule","DX","DY","outline","extentMajor","extentMinor","stepMajor","stepMinor","x00","y00","identity$5","centroid","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","_context","_radius","pointRadius","_line","_point","lengthRing","cacheDigits","cacheAppend","cacheRadius","cacheCircle","PathString","transformer","methods","TransformStream","fit","projection","fitBounds","clipExtent","fitExtent","fitSize","fitWidth","fitHeight","cosMinDistance","resample","project","delta2","resampleLineTo","depth","phi2","dx2","dy2","dz","a00","b00","c00","resampleStream","ringPoint","resampleNone","transformRadians","scaleTranslateRotate","sx","sy","alpha","scaleTranslate","cosAlpha","sinAlpha","fi","projectionMutator","projectAt","projectResample","projectTransform","projectRotateTransform","cache","cacheStream","theta","preclip","postclip","recenter","reset","transformRotate","clipAngle","reflectX","reflectY","conicProjection","parallels","conicEqualAreaRaw","cylindricalEqualAreaRaw","r0y","conicEqualArea","albers","azimuthalRaw","azimuthalInvert","sc","cc","azimuthalEqualAreaRaw","cxcy","azimuthalEquidistantRaw","mercatorRaw","mercatorProjection","reclip","tany","conicConformalRaw","cy0","equirectangularRaw","conicEquidistantRaw","gy","nx","A1","A2","A3","A4","M","equalEarthRaw","l2","l6","gnomonicRaw","naturalEarth1Raw","phi4","orthographicRaw","stereographicRaw","transverseMercatorRaw","defaultSeparation","meanXReduce","maxYReduce","cluster","separation","nodeSize","previousNode","eachAfter","meanX","leafLeft","leafRight","hierarchy","mapChildren","objectChildren","childs","Node","eachBefore","computeHeight","copyData","optional","required","constantZero","constant$3","ancestor","aNodes","ancestors","bNodes","leastCommonAncestor","descendants","leaves","links","lcg$1","packEncloseRandom","circles","shuffle","enclosesWeak","encloseBasis","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","encloseBasis1","r2","r21","r3","a2","a3","c3","d3","place","intersects","score","circle","packSiblingsRandom","aa","sj","sk","pack","radiusLeaf","packChildrenRandom","translateChild","roundNode","treemapDice","preroot","ambiguous","imputed","defaultId","defaultParentId","parentId","parentof","slash","nextLeft","nextRight","moveSubtree","wm","wp","change","nextAncestor","vim","TreeNode","treemapSlice","squarifyRatio","ratio","nodeValue","sumValue","newRatio","minRatio","beta","dice","squarify","resquarify","_squarify","cross$1","lexicographicOrder","computeUpperHullIndexes","indexes","cross","uniform","sourceRandomUniform","randomUniform","int","sourceRandomInt","randomInt","sourceRandomNormal","randomNormal","mu","sigma","logNormal","sourceRandomLogNormal","randomLogNormal","irwinHall","sourceRandomIrwinHall","randomIrwinHall","bates","sourceRandomBates","randomBates","sourceRandomExponential","randomExponential","log1p","pareto","sourceRandomPareto","randomPareto","bernoulli","sourceRandomBernoulli","randomBernoulli","geometric","sourceRandomGeometric","randomGeometric","sourceRandomGamma","randomGamma","multiplier","sourceRandomBeta","G","randomBeta","binomial","sourceRandomBinomial","randomBinomial","acc","nn","pp","weibull","sourceRandomWeibull","randomWeibull","outerFunc","cauchy","sourceRandomCauchy","randomCauchy","logistic","sourceRandomLogistic","randomLogistic","poisson","sourceRandomPoisson","randomPoisson","eps","initRange","initInterpolator","interpolator","implicit","ordinal","unknown","band","ordinalRange","paddingInner","paddingOuter","rescale","sequence","rangeRound","pointish","unit","normalize","bimap","polymap","untransform","interpolateValue","clamper","continuous","linearish","maxIter","transformLog","transformExp","transformLogn","transformExpn","pow10","reflect","loggish","logs","pows","base","log2","logp","powp","transformSymlog","transformSymexp","expm1","symlogish","transformPow","transformSqrt","transformSquare","powish","square","timeInterval","floori","offseti","field","millisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","second","getMilliseconds","timeMinute","getSeconds","getMinutes","timeMinutes","utcMinute","setUTCSeconds","utcMinutes","timeHour","timeHours","utcHour","setUTCMinutes","utcHours","timeDay","setHours","setDate","getDate","getTimezoneOffset","timeDays","utcDay","setUTCHours","setUTCDate","utcDays","unixDay","unixDays","timeWeekday","getDay","timeSunday","timeMonday","timeTuesday","timeWednesday","timeThursday","timeFriday","timeSaturday","timeSundays","timeMondays","timeTuesdays","timeWednesdays","timeThursdays","timeFridays","timeSaturdays","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcSundays","utcMondays","utcTuesdays","utcWednesdays","utcThursdays","utcFridays","utcSaturdays","timeMonth","setMonth","getMonth","getFullYear","timeMonths","utcMonth","setUTCMonth","utcMonths","timeYear","setFullYear","timeYears","utcYear","setUTCFullYear","utcYears","ticker","month","week","day","hour","minute","tickIntervals","tickInterval","utcTicks","utcTickInterval","timeTicks","timeTickInterval","localDate","H","L","utcDate","UTC","newDate","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatDayOfMonth","formatMicroseconds","formatYearISO","formatFullYearISO","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","U","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatFullYear","Z","formatZone","formatLiteralPercent","utcFormats","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCYearISO","formatUTCFullYearISO","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","parseSpecifier","parseDayOfMonth","parseMicroseconds","parseYear","parseFullYear","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parseQuarter","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseZone","parseLiteralPercent","pads","charAt","newParse","utcFormat","utcParse","timeFormat","timeParse","numberRe","percentRe","requoteRe","requote","dISO","dow","UTCdISO","isoSpecifier","formatIso","toISOString","parseIso","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","k10","sequentialPow","k21","divergingPow","category10","Accent","Dark2","observable10","Paired","Pastel1","Pastel2","Set1","Set2","Set3","Tableau10","ramp$1","scheme","interpolateRgbBasis","BrBG","ramp","PRGn","PiYG","PuOr","RdBu","RdGy","RdYlBu","RdYlGn","Spectral","BuGn","BuPu","GnBu","OrRd","PuBuGn","PuBu","PuRd","RdPu","YlGnBu","YlGn","YlOrBr","YlOrRd","Blues","Greens","Greys","Purples","Reds","Oranges","interpolateCubehelixLong","warm","cool","pi_1_3","pi_2_3","viridis","magma","inferno","plasma","constant$2","withPath","shape","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","arcEndAngle","arcPadAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","cx0","cx1","cy1","dx0","dy0","dx1","dy1","Linear","curveLinear","curve","defined0","x0z","y0z","areaStart","areaEnd","arealine","lineX0","lineY0","lineY1","lineX1","descending$1","identity$1","curveRadialLinear","curveRadial","Radial","_curve","radial","lineRadial","lineRadial_default","areaRadial","lineStartAngle","lineEndAngle","lineInnerRadius","lineOuterRadius","pointRadial","Bump","BumpRadial","p2","p3","bumpX","bumpY","bumpRadial","linkSource","linkTarget","sqrt3","asterisk","draw","tan30","tan30_2","diamond","diamond2","plus","square2","kr","kx","ky","star","triangle","triangle2","wye","times","symbolsFill","symbolsStroke","Basis","BasisClosed","BasisOpen","Bundle","_basis","_beta","_x2","_x3","_x4","_y2","_y3","_y4","bundle","_k","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","cardinalClosed","CardinalOpen","cardinalOpen","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","_alpha","x23","y23","catmullRom","CatmullRomClosed","catmullRomClosed","CatmullRomOpen","catmullRomOpen","LinearClosed","slope3","slope2","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","Step","_t","none$2","series","none$1","stackValue","stackSeries","appearance","peaks","peak","vi","vj","ascending$1","sums","_t0","constant$1","ZoomEvent","Transform","applyX","applyY","location","invertX","invertY","rescaleX","rescaleY","__zoom","SVGElement","clientWidth","clientHeight","defaultTransform","defaultWheelDelta","deltaY","deltaMode","defaultConstrain","translateExtent","touchstarting","touchfirst","constrain","wheelDelta","scaleExtent","clickDistance2","tapDistance","wheeled","mousedowned","dblclicked","touchstarted","gesture","__zooming","Gesture","taps","wheel","mouse","k1","touch0","touch1","l0","l1","dp","dl","collection","scaleBy","scaleTo","translateBy","translateTo","clickDistance","cornerRadius","padRadius","a01","a11","a10","da0","da1","rp","rc0","rc1","oc","x32","y32","kc","lc","weight","grid","Float32Array","pow2k","wi","density","pow4k","MIN_VALUE","transformPolygon","transformRing","transformPoint","resize","defineProperty","cellSize","reducer","lengths","product","some","others","mousedownx","mousedowny","mousemoving","container","gestures","drag","mousemoved","mouseupped","nodrag","touch","adder","strength","force","radii","iterations","ri","ri2","prepare","quad","rj","_nodes","_random","strengths","distances","bias","initializeStrength","initializeDistance","distanceMin2","distanceMax2","theta2","accumulate","distanceMin","distanceMax","radiuses","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","lcg","initializeNodes","initializeForce","randomSource","closest","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","albersUsa","streams","feature","merged","deltaMax","sa","tx","ty","kx0","ky0","kx1","ky1","projectionStream","contextStream","pathArea","measure","pathMeasure","pathBounds","pathCentroid","ak","av","bk","bv","image","Image","onerror","onload","src","colorLab","ts","total","_restart","mapper","counts","modeValue","modeCount","pairof","pairs","partition","positionNode","sortValues","pie","arcs","pa","events","inside","sortedPoints","flippedPoints","upperIndexes","lowerIndexes","skipLeft","skipRight","perimeter","samples","seed","R","compareIndex","diverging","divergingLog","divergingSymlog","invertExtent","quantiles","quantize","squared","unsquare","sequential","sequentialLog","sequentialQuantile","sequentialSymlog","symlog","timeWeek","timeSecond","utcWeek","utcSecond","orderNone","offsetNone","stack","oz","sz","yn","s2","si","sij0","s3","tops","bottoms","stratify","nodeKey","currentId","currentParentId","nodeByKey","cbrt","treeRoot","firstWalk","secondWalk","sizeNode","siblings","executeShifts","midpoint","vip","vop","vom","sip","sop","sim","som","apportion","tile","paddingStack","paddingTop","paddingRight","paddingBottom","paddingLeft","treemap","valueOffset","valueTarget","valueLeft","valueRight","xk","yk","proto","filterEvents","mouseenter","mouseleave","filterContextListener","related","relatedTarget","event1","wrap","d3tip","rootElement","body","initNode","tip","vis","tagName","getSVGNode","show","content","poffset","dir","nodel","getNodeEl","directions","scrollTop","scrollLeft","directionCallbacks","hide","functor","destroy","bbox","getScreenBBox","offsetHeight","offsetWidth","div","targetShape","targetel","tbbox","getBBox","euclidean","squaredEuclidean","isAnyArray","tag","endsWith","includes","currentMin","_options$fromIndex","fromIndex","_options$toIndex","toIndex","isInteger","currentMax","_options$min","autoMinMax","_options$max","require$$0","require$$1","indent","repeat","indentData","inspectMatrixWithOptions","maxRows","maxColumns","maxNumSize","padMinus","maxI","maxJ","formatNumber","inspectData","num","formatNumber2","padEnd","len","str","fix","startsWith","checkRowIndex","outer","checkColumnIndex","checkRowVector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","checkNonEmpty","isEmpty","AbstractMatrix","from1DArray","newRows","newColumns","newData","newMatrix","Matrix","rowVector","columnVector","zeros","ones","rand","randInt","eye","diag","matrix1","matrix2","checkMatrix","isMatrix","klass","to2DArray","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isDistance","isEchelonForm","previousColumn","checked","isReducedEchelonForm","echelonForm","iMax","swapRows","reducedEchelonForm","maxRow","pivot","setSubMatrix","neg","mulS","getRow","getRowVector","setRow","row1","row2","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","NEGATIVE_INFINITY","idx","POSITIVE_INFINITY","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","dot","cumulativeSum","vector2","vector1","mmul","Bcolj","mpow","scalar","bb","strassen2x2","b11","a12","b12","a21","b21","a22","b22","m3","m4","m5","c01","c10","c11","strassen3x3","a02","a20","b01","b02","b10","b20","m6","m7","m8","m9","m12","m13","m14","m15","m16","m17","m18","c02","c12","c20","c21","c22","mmulStrassen","embed","mat","cols","resultat","console","warn","blockMult","halfRows","halfCols","subMatrix","sub","scaleRows","scaleColumns","flipRows","middle","last","flipColumns","kroneckerProduct","kroneckerSum","AxI","IxB","sortRows","compareFunction","compareNumbers","sortColumns","subMatrixRow","indices","subMatrixColumn","rowIndex","columnIndex","trace","sumByRow","sumByColumn","sumAll","productByRow","productByColumn","productAll","unbiased","sum1","sum2","varianceByRow","varianceByColumn","varianceAll","standardDeviation","centerByRow","centerByColumn","centerAll","getScaleByRow","scaleByRow","getScaleByColumn","scaleByColumn","divider","getScaleAll","scaleAll","col","isArrayOfNumbers","for","diagonal","negate","tensorProduct","initData","nRows","nColumns","arrayData","removeRow","addRow","removeColumn","newRow","addColumn","addS","addM","subS","subM","subtract","subtractS","subtractM","mul","mulM","multiply","multiplyS","multiplyM","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","acosh","asinh","atanh","clz32","fround","trunc","arg0","powS","powM","installMathOperations","SymmetricMatrix","diagonalSize","isSymmetricMatrix","klassType","upperRightEntries","toMatrix","removeCross","addCross","applyMask","mask","sidesToRemove","passthroughs","sideIndex","toCompact","compact","fromCompact","compactSize","upperRightValues","DistanceMatrix","isDistanceMatrix","klassSubType","sideSize","toSymmetricMatrix","BaseView","MatrixSelectionView","WrapperMatrix1D","_calculateIndex","WrapperMatrix2D","LuDecomposition","LUcolj","kmax","lu","pivotVector","pivotSign","LU","isSingular","solve","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","work","nct","nrt","mrc","kase","ks","cs","sn","sp","spm1","epm1","ek","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","leftHandSide","rightHandSide","useSVD","xrange","exception","dependenciesOneRow","thresholdValue","thresholdError","returnArray","EigenvalueDecomposition","assumeSymmetric","tred2","dl1","el1","tst1","tql2","ort","low","high","orthes","ra","vr","notlast","cdivres","exshift","iter","cdiv","hqr2","realEigenvalues","imaginaryEigenvalues","eigenvectorMatrix","xr","yr","CholeskyDecomposition","dimension","positiveDefinite","isPositiveDefinite","nipals","scaleScores","maxIterations","terminationCriteria","tOld","diff","counter","xResidual","residual","yResidual","betas","CHO","EVD","MatrixColumnSelectionView","MatrixColumnView","MatrixFlipColumnView","MatrixFlipRowView","MatrixRowSelectionView","MatrixRowView","MatrixSubView","MatrixTransposeView","NIPALS","Nipals","SVD","correlation","xMatrix","yMatrix","yIsSame","sdx","sdy","corr","covariance","cov","default","subMatrix0","subMatrix1","subMatrix2","linearDependencies","results","Abis","pseudoInverse","svdSolution","matrix.EVD","matrix.Matrix","matrix.MatrixTransposeView","matrix.NIPALS","matrix.SVD","matrix.default","matrix.inverse","Heap","defaultCmp","heapify","heappop","heappush","heappushpop","heapreplace","insort","nlargest","nsmallest","updateItem","_siftdown","_siftup","cmp","item","lastelt","returnitem","_ref","_len","_ref1","_results","_results1","pos","elem","los","startpos","newitem","parentpos","childpos","endpos","rightpos","pushpop","peek","heap","toArray","front","module","exports","Cluster","isLeaf","cut","ans","traverse","singleLink","dKI","dKJ","completeLink","averageLink","dIJ","nj","weightedAverageLink","centroidLink","medianLink","wardLink","nk","wardLink2","agnes","distanceFunction","method","updateFunc","distanceFn","getMatrix","getDistanceMatrix","distanceMatrix","numLeaves","clusters","getSmallestDistance","cluster1","cluster2","newCluster","newClusters","newDistanceMatrix","newIndex","getPreviousIndex","prevI","prevICluster","val","smallest","smallestI","smallestJ","prev1","prev2","addPlotTitle","title","attachPlotZoom","layer","enabled","d3.zoom","resetZoom","d3.zoomIdentity","plotZoom","trimText","maxLen","async","heatmap_plot","divId","obj","rowNames","colNames","inputHeight","inputWidth","inputColor","marginTop","marginBottom","marginLeft","marginRight","legendOffsetX","colorScale","missingValue","missingColor","denseLabelThreshold","denseLabelBoost","bottomLabelAngle","maxLabelLength","highlightRows","highlightCols","tooltip_decimal","tooltip_fontFamily","tooltip_fontSize","mountToDOM","zoomable","debug","targetDivId","colCount","rowCount","autoWidth","autoHeight","effectiveMarginTop","color_scale","derivedScale","d3.extent","flat","midVal","d3.scaleLinear","cellWidth","labelFontSizeBottom","maxColLabelLength","d3.max","bottomAngleRad","bottomLabelTextWidth","dynamicBottomMargin","cellHeight","labelFontSizeRight","maxRowLabelLength","margin","innerHeight","innerWidth","trimmedColnames","trimmedRownames","colIndices","d3.range","colSpacing","bottomLabelFootprint","xLabelStep","fitFont","xTickValues","lastCol","rowSpacing","yLabelStep","yTickValues","lastRow","x_scale","d3.scaleBand","y_scale","d3.create","useZoom","zoomHost","x_axis","d3.axisBottom","isVerticalBottomLabel","y_axis","d3.axisRight","tooltip","heatMapData","buildData","getHeatmapColor","HIGHLIGHT","rowHi","colHi","runs","sorted","rowRuns","colRuns","bands","legendHeight","legendX","legendY","minVal","gradientId","substr","gradient","legendScale","legendTickValues","legendAxis","d3.format","legendAxisG","heatmap","err","getElementById","csvToJson","headers","currentLine","convertStrToNumber","removeNonNumbers","removeNumbers","removeNonNumberValues","ob","newObj","removeNumberValues","asDataFrame","aoo","getOwnPropertyDescriptor","Objects","df","createTableFromCSV","csvData","tableId","table","cells","td","textBox","border","display","overflow","boxSizing","targetId","tbl","hclustDt","divNum","iris","file","toFiniteNumber","parsedValue","extractHclustInput","numericColumnNames","textColumnNames","textColumnName","materializeHclustInput","normalized","keptRowIndices","keptColIndices","missingFill","colIndex","SUPPORTED_DISTANCE_METRICS","SUPPORTED_CLUSTERING_METHODS","assertClusteringMethod","optionName","pairwiseDistanceMatrix","metric","minOverlapRatio","totalDims","isManhattan","unavailablePairCount","rowI","rowJ","accumulated","shared","correction","hclust_plot","rawData","displayData","rawDisplayData","inputRowNames","inputColNames","clusterCols","clusterRows","clusteringDistanceRows","clusteringDistanceCols","clusteringMethodCols","clusteringMethodRows","marginTopInput","colPadding","rowPadding","dendogram_font","colDendoColor","rowDendoColor","heatmapColor","heatmapColorScale","removeMissingBy","scaleData","interactive","showResetButton","hoverHighlight","clickSelect","onSelectionChange","onPlotSelection","onRerender","rawMatrix","rawRowNames","rawColNames","nullifySentinel","nullifiedMatrix","preparedMatrix","columnStats","observed","d3.mean","d3.deviation","scaleMatrixColumns","hasExplicitDisplayData","displaySource","rawDisplayMatrix","rawDisplayRowNames","rawDisplayColNames","resolveMissingFilterIndices","targetDiv","cssWidth","parseFloat","detectedContainerWidth","colDistanceMatrix","rowDistanceMatrix","d3.hierarchy","hclust.agnes","d3.cluster","clusterLayout","root2","clusterLayout2","colIdx","rowIdx","displayMatrix","validColNames","validRowNames","colNamesClust","rowNamesClust","heatmapInnerHeight","heatmapInnerWidth","zoomLayer","myNewPlot","d3.select","heatmapG","selectedCols","selectedRows","selectedColNode","selectedRowNode","collectLeafOrders","nodeAndDescendants","applyBranchHighlight","hasCol","hasRow","colOk","rowOk","gPointsNode","heatG","colSel","sel","rowSel","clearBranchSelection","notifySelection","getSelection","rowOrders","colOrders","plotSelection","subRowIdx","subColIdx","subData","subDisplayData","newNode","_fullOptions","dendoTooltip","transformY","ht","colMaxHeight","colElbow","allNodes","leafs","leafHeight","colDendroY","colLinks","colLinkG","stopPropagation","rowElbow","transformX","height2","rowMaxHeight","allNodes2","leafs2","leafHeight2","rowLinks","rowLinkG","mountDiv","currentDivNum","hclust","buttonBar","cssText","resetButton","onclick","clearButton","plotSelButton","showAllButton","_mountPlot","clearSelection","PCA","dataset","model","means","stdevs","excludedFeatures","datasetMatrix","isCovarianceMatrix","nCompNIPALS","ignoreZeroVariance","_computeFromCovarianceMatrix","_adjust","covarianceMatrix","_computeWithNIPALS","svd","singularValues","eigenvalues","singularValue","load","predict","nComponents","datasetmatrix","predictions","getExplainedVariance","getCumulativeVariance","explained","getEigenvectors","getEigenvalues","getStandardDeviations","getLoadings","evd","pcaDt","selectGroup","ctx","maxOpacity","groupElements","d3.selectAll","activeGroup","otherElements","otherGroups","pca_plot","userMargin","scores","numbersOnlyObjs","scaledArr","pca","sample","categoryKey","PC1","PC2","pcaScores","d3.scaleOrdinal","minPC1","d3.min","maxPC1","rangePC1","paddedMin","paddedMax","d3.axisLeft","gPoints","pca_UI","loadIrisOnStart","loadingDiv","backgroundColor","borderRadius","errorDiv","irisDataButton","fileInput","fileLabel","plotDiv","textBoxDiv","alignContent","showError","message","renderData","numericData","handleFileChange","files","reader","FileReader","readAsText","handleIrisClick","TSNE","tsne_1","tsne","opt","returnV","vValue","perplexity","getopt","assert","defaultval","gaussRandom","randn","std","randn2d","uses","xhere","L2","x1i","x2i","xtod","d2p","nf","hTarget","prow","betamin","betamax","maxtries","psum","nHere","pOut","N2","initDataRaw","initSolution","initDataDist","gains","ystep","getSolution","cg","costGrad","cost","grad","ymean","gid","sid","gainid","newgain","newsid","debugGrad","yold","cg0","cg1","analytic","numerical","pmul","quArr","qsum","dsum","dhere","qu","NN","gsum","premult","tsneDt","spiral","tsne_plot","numericKeys","labels","Xs","standardize","earlyExaggeration","learningRate","nIter","tSNE1","tSNE2","minTSNE1","maxTSNE1","rangeTSNE1","tsne_UI","__values","tauRandInt","filled","utils","reshape2d","rejectionSample","max2d","tauRand","e_1","_a","vec_1","vec_1_1","e_1_1","return","nSamples","poolSize","rejectSample","broken","__createBinding","k2","__setModuleDefault","__importStar","__esModule","smallestFlagged","deheapSort","buildCandidates","uncheckedHeapPush","heapPush","makeHeap","nPoints","makeArrays","fillValue","flag","weights","isNew","iSwap","ic1","ic2","heapShape2","siftDown","heap1","heap2","ceiling","elt","leftChild","rightChild","temp1","temp2","currentGraph","nVertices","nNeighbors","maxCandidates","candidateNeighbors","isn","indHeap","distHeap","indHeapIndex","distHeapIndex","ind","resultIndex","__read","getCSR","eliminateZeros","multiplyScalar","maximum","pairwiseMultiply","SparseMatrix","dims","nCols","checkDims","makeKey","defaultValue","getAll","ordered","rowColValues","getDims","getRows","_b","getCols","getValues","fn","vals","_this","elementWise","zeroIndices","removeByZeroIndex","nextValues","nextRows","nextCols","normType","normFn","normFns","colsByRow","nextMatrix","_loop_1","_c","xs","op","visited","operate","nextValue","valuesA","rowsA","colsA","valuesB","rowsB","colsB","indptr","currentRow","__spread","searchFlatTree","makeForest","FlatTree","hyperplanes","offsets","makeEuclideanTree","leafSize","splitResults","leftIndex","rightIndex","hyperplaneOffset","hyperplaneVector","nLeft","nRight","side","indicesLeft","indicesRight","hyperplane","euclideanRandomProjectionSplit","recursiveFlatten","nodeNum","leafNum","oldNodeNum","res","numNodes","selectSide","nTrees","trees","makeTree","forest","nNodes","nLeaves","flattenTree","makeLeafArray","rpForest","rpForest_1","rpForest_1_1","errorCalculation","parameters","parameterizedFunction","func","damping","gradientDifference","evaluatedData","gradientFunc","paramFunction","param","auxParams","funcParam","gradientFunction","matrixFunc","matrixFunction","inverseMatrix","errorTolerance","minValues","maxValues","initialValues","parLen","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","iteration","converged","parameterValues","parameterError","__awaiter","thisArg","_arguments","generator","fulfilled","rejected","__generator","sent","trys","ops","verb","throw","__importDefault","umap","initTransform","resetLocalConnectivity","fastIntersection","findABParams","cosine","UMAP","nnDescent","nn_descent","initializeSearch","makeInitializations","makeNNDescent","require$$2","require$$3","leafArray","nIters","rpTreeInit","ck","initFromRandom","queryPoints","_heap","initFromTree","_tree","makeInitializedNNSearch","graph","initialization","tried","vertex","candidates","candidates_1","candidates_1_1","candidate","e_2","forest_1","forest_1_1","e_2_1","require$$4","ml_levenberg_marquardt_1","require$$5","SMOOTH_K_TOLERANCE","MIN_K_DIST_SCALE","localConnectivity","nEpochs","negativeSampleRate","repulsionStrength","setOpMixRatio","spread","transformQueueSize","targetMetric","targetWeight","targetNNeighbors","isInitialized","embedding","optimizationState","OptimizationState","setParam","initializeFit","optimizeLayout","fitAsync","optimizeLayoutAsync","setSupervisedProjection","setPrecomputedKNN","knnIndices","knnDistances","getNEpochs","knnResults","nearestNeighbors","fuzzySimplicialSet","makeSearchFns","searchGraph","makeSearchGraph","processGraphForSupervisedProjection","initializeSimplicialSetEmbedding","head","tail","epochsPerSample","initializeOptimization","prepareForOptimizationLoop","search","knn","neighbor","toTransform","adjustedLocalConnectivity","smoothKNNDistance","sigmas","rhos","computeMembershipStrengths","normed","csrMatrix","graphMax","makeEpochsPerSample","assignOptimizationStateParameters","headEmbedding","tailEmbedding","currentEpoch","farDist","categoricalSimplicialSetIntersection","optimizeLayoutStep","getEmbedding","metricNNDescent","_d","_e","sparseMatrix","prodMatrix","simplicialSet","unknownDist","ithDistances","nonZeroDists","interpolation","meanIthDistances","meanDistances","graphValues","moveOther","epochsPerNegativeSample","epochOfNextNegativeSample","epochOfNextSample","initialAlpha","distSquared","rDist","gradCoeff","gradD","nNegSamples","k_1","other_1","distSquared_1","gradCoeff_1","epochCallback","epochCompleted","shouldStop","isFinished","normX","normY","clipValue","xv","yv","umap_1","umapDt","umap_plot","UMAP1","UMAP2","minUMAP1","maxUMAP1","rangeUMAP1","umap_UI","scatterDt","scatter_plot","xCol","yCol","xColumn","yColumn","scatterData","original","rangeX","paddedMinX","paddedMaxX","legend","scatter_UI","pairsDt","pairs_plot","plotData","plotWidth","plotHeight","resetGroups","xVar","yVar","xVal","yVal","scales","gCell","xScale","yScale","pairs_UI","parsed","coerceMatrix","textKeys","labelKey","standardizeColumns","scaled","distance_plot","inputTitle","heatmapOptions","prepared","hclust_distance_plot","distanceDivId","distanceOptions","hclustOptions","distDiv","host","autoTitle","addButton","onClick","bar","btn","prepend","renderFull","hasHighlight","renderSubset","useRows","useCols","version"],"mappings":"AAAK,MAACA,EAAW,CAAC,CAACC,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrG,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,EAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,EAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,EAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,EAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,EAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,EAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,EAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,EAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,GAAIC,QAAU,UACrF,CAACJ,aAAe,EAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,EAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,EAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,EAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,EAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,EAAIC,YAAc,IAAIC,aAAe,EAAIC,YAAc,EAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,EAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,EAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,EAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,EAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,EAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,EAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,EAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,EAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,EAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,EAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,EAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,EAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,EAAIC,YAAc,IAAIC,QAAU,cACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,EAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,EAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,EAAIC,YAAc,EAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,EAAIC,YAAc,IAAIC,aAAe,EAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,EAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,EAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,EAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,EAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,EAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,EAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,EAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,IAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,aACrF,CAACJ,aAAe,IAAIC,YAAc,EAAIC,aAAe,IAAIC,YAAc,IAAIC,QAAU,cC7EjFC,EAAa,CACjB,CACEC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,GAAM,KACNC,GAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,KACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,KACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,IACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,KACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,GAAM,MACNC,GAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,KACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,GAAM,MACNC,GAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,KACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,KACNC,GAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,IACNC,GAAM,MACNC,GAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,IACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,KACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,IAAM,MACNC,GAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,IACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,KACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,KACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,KACNC,IAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,KACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,IAAM,KACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,IAAM,MACNC,GAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,KACNC,GAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,KACNC,IAAM,IACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,KACNC,IAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,KACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,KACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,KACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,KACNC,GAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,IACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,IAAM,KACNC,IAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,KACNC,GAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,IAAM,KACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,IAAM,KACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,KACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,IACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,KACNC,GAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,GACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,IACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,KACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,KACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,KACNC,IAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,KACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,IACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,IACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,KACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,IAAM,MACNC,GAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,IACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,KACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,KACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,IACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,KACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,KACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,IAAM,MACNC,GAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,KACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,KACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,KACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,KACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,KACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,KACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,IACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,KACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,IACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,IAAM,KACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,KACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,IACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,IACNC,GAAM,MACNC,IAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,KACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,KACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,GACNC,MAAS,YAEX,CACEJ,GAAM,IACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,KACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,KACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,GAAM,MACNC,IAAM,MACNC,IAAM,IACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,IACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,IACNC,IAAM,KACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,GAAM,IACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,KACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,KACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,KACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,GAAM,MACNC,IAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,IACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,IACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,KACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,KACNC,GAAM,IACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,IACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,KACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,KACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,KACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,KACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,KACNC,GAAM,KACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,KACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,KACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,MACNC,IAAM,MACNC,GAAM,KACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,KACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,IACNC,IAAM,MACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAEX,CACEJ,IAAM,MACNC,GAAM,MACNC,GAAM,MACNC,IAAM,MACNC,MAAS,YAEX,CACEJ,GAAM,MACNC,IAAM,KACNC,IAAM,MACNC,GAAM,MACNC,MAAS,YAE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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,595,597,598,600,601,602,603,604,605,606,607,608,609,610]}