wurmlab/sequenceserver

View on GitHub
public/sequenceserver-report.min.js.map

Summary

Maintainability
Test Coverage
{"version":3,"file":"./sequenceserver-report.min.js","mappings":"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","sources":["webpack://SequenceServer/./public/js/circosjs.js","webpack://SequenceServer/./public/packages/jquery-ui@1.13.3.js","webpack://SequenceServer/./node_modules/jquery/dist/jquery.js","webpack://SequenceServer/./node_modules/react-detect-print/index.js","webpack://SequenceServer/./node_modules/react-dom/cjs/react-dom.development.js","webpack://SequenceServer/./node_modules/react-dom/client.js","webpack://SequenceServer/./node_modules/react-dom/index.js","webpack://SequenceServer/./node_modules/react/cjs/react-jsx-runtime.development.js","webpack://SequenceServer/./node_modules/react/cjs/react.development.js","webpack://SequenceServer/./node_modules/react/index.js","webpack://SequenceServer/./node_modules/react/jsx-runtime.js","webpack://SequenceServer/./node_modules/scheduler/cjs/scheduler.development.js","webpack://SequenceServer/./node_modules/scheduler/index.js","webpack://SequenceServer/./node_modules/d3-array/src/ascending.js","webpack://SequenceServer/./node_modules/d3-array/src/descending.js","webpack://SequenceServer/./node_modules/d3-array/src/bisector.js","webpack://SequenceServer/./node_modules/d3-array/src/number.js","webpack://SequenceServer/./node_modules/d3-array/src/bisect.js","webpack://SequenceServer/./node_modules/d3-array/src/blur.js","webpack://SequenceServer/./node_modules/d3-array/src/count.js","webpack://SequenceServer/./node_modules/d3-array/src/cross.js","webpack://SequenceServer/./node_modules/d3-array/src/cumsum.js","webpack://SequenceServer/./node_modules/d3-array/src/variance.js","webpack://SequenceServer/./node_modules/d3-array/src/deviation.js","webpack://SequenceServer/./node_modules/d3-array/src/extent.js","webpack://SequenceServer/./node_modules/d3-array/src/fsum.js","webpack://SequenceServer/./node_modules/internmap/src/index.js","webpack://SequenceServer/./node_modules/d3-array/src/identity.js","webpack://SequenceServer/./node_modules/d3-array/src/group.js","webpack://SequenceServer/./node_modules/d3-array/src/permute.js","webpack://SequenceServer/./node_modules/d3-array/src/sort.js","webpack://SequenceServer/./node_modules/d3-array/src/groupSort.js","webpack://SequenceServer/./node_modules/d3-array/src/array.js","webpack://SequenceServer/./node_modules/d3-array/src/constant.js","webpack://SequenceServer/./node_modules/d3-array/src/ticks.js","webpack://SequenceServer/./node_modules/d3-array/src/nice.js","webpack://SequenceServer/./node_modules/d3-array/src/threshold/sturges.js","webpack://SequenceServer/./node_modules/d3-array/src/bin.js","webpack://SequenceServer/./node_modules/d3-array/src/max.js","webpack://SequenceServer/./node_modules/d3-array/src/maxIndex.js","webpack://SequenceServer/./node_modules/d3-array/src/min.js","webpack://SequenceServer/./node_modules/d3-array/src/minIndex.js","webpack://SequenceServer/./node_modules/d3-array/src/quickselect.js","webpack://SequenceServer/./node_modules/d3-array/src/greatest.js","webpack://SequenceServer/./node_modules/d3-array/src/quantile.js","webpack://SequenceServer/./node_modules/d3-array/src/threshold/freedmanDiaconis.js","webpack://SequenceServer/./node_modules/d3-array/src/threshold/scott.js","webpack://SequenceServer/./node_modules/d3-array/src/mean.js","webpack://SequenceServer/./node_modules/d3-array/src/median.js","webpack://SequenceServer/./node_modules/d3-array/src/merge.js","webpack://SequenceServer/./node_modules/d3-array/src/mode.js","webpack://SequenceServer/./node_modules/d3-array/src/pairs.js","webpack://SequenceServer/./node_modules/d3-array/src/range.js","webpack://SequenceServer/./node_modules/d3-array/src/rank.js","webpack://SequenceServer/./node_modules/d3-array/src/least.js","webpack://SequenceServer/./node_modules/d3-array/src/leastIndex.js","webpack://SequenceServer/./node_modules/d3-array/src/greatestIndex.js","webpack://SequenceServer/./node_modules/d3-array/src/scan.js","webpack://SequenceServer/./node_modules/d3-array/src/shuffle.js","webpack://SequenceServer/./node_modules/d3-array/src/sum.js","webpack://SequenceServer/./node_modules/d3-array/src/transpose.js","webpack://SequenceServer/./node_modules/d3-array/src/zip.js","webpack://SequenceServer/./node_modules/d3-array/src/every.js","webpack://SequenceServer/./node_modules/d3-array/src/some.js","webpack://SequenceServer/./node_modules/d3-array/src/filter.js","webpack://SequenceServer/./node_modules/d3-array/src/map.js","webpack://SequenceServer/./node_modules/d3-array/src/reduce.js","webpack://SequenceServer/./node_modules/d3-array/src/reverse.js","webpack://SequenceServer/./node_modules/d3-array/src/difference.js","webpack://SequenceServer/./node_modules/d3-array/src/disjoint.js","webpack://SequenceServer/./node_modules/d3-array/src/intersection.js","webpack://SequenceServer/./node_modules/d3-array/src/superset.js","webpack://SequenceServer/./node_modules/d3-array/src/subset.js","webpack://SequenceServer/./node_modules/d3-array/src/union.js","webpack://SequenceServer/./node_modules/d3-axis/src/identity.js","webpack://SequenceServer/./node_modules/d3-axis/src/axis.js","webpack://SequenceServer/./node_modules/d3-dispatch/src/dispatch.js","webpack://SequenceServer/./node_modules/d3-selection/src/selector.js","webpack://SequenceServer/./node_modules/d3-selection/src/array.js","webpack://SequenceServer/./node_modules/d3-selection/src/selectorAll.js","webpack://SequenceServer/./node_modules/d3-selection/src/matcher.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/selectChild.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/selectChildren.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/sparse.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/enter.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/data.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/sort.js","webpack://SequenceServer/./node_modules/d3-selection/src/namespaces.js","webpack://SequenceServer/./node_modules/d3-selection/src/namespace.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/attr.js","webpack://SequenceServer/./node_modules/d3-selection/src/window.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/style.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/property.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/classed.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/text.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/html.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/raise.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/lower.js","webpack://SequenceServer/./node_modules/d3-selection/src/creator.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/insert.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/remove.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/clone.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/on.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/dispatch.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/index.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/select.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/selectAll.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/filter.js","webpack://SequenceServer/./node_modules/d3-selection/src/constant.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/exit.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/join.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/merge.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/order.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/call.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/nodes.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/node.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/size.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/empty.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/each.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/append.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/datum.js","webpack://SequenceServer/./node_modules/d3-selection/src/selection/iterator.js","webpack://SequenceServer/./node_modules/d3-selection/src/select.js","webpack://SequenceServer/./node_modules/d3-drag/src/noevent.js","webpack://SequenceServer/./node_modules/d3-drag/src/nodrag.js","webpack://SequenceServer/./node_modules/d3-color/src/define.js","webpack://SequenceServer/./node_modules/d3-color/src/color.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/basis.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/basisClosed.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/constant.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/color.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/rgb.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/numberArray.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/array.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/date.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/number.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/object.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/string.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/value.js","webpack://SequenceServer/./node_modules/d3-selection/src/sourceEvent.js","webpack://SequenceServer/./node_modules/d3-selection/src/pointer.js","webpack://SequenceServer/./node_modules/d3-timer/src/timer.js","webpack://SequenceServer/./node_modules/d3-timer/src/timeout.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/schedule.js","webpack://SequenceServer/./node_modules/d3-transition/src/interrupt.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/transform/decompose.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/transform/parse.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/transform/index.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/tween.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/interpolate.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/attr.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/attrTween.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/delay.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/duration.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/selection.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/style.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/index.js","webpack://SequenceServer/./node_modules/d3-ease/src/cubic.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/select.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/selectAll.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/filter.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/merge.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/transition.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/on.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/styleTween.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/text.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/textTween.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/remove.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/ease.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/easeVarying.js","webpack://SequenceServer/./node_modules/d3-transition/src/transition/end.js","webpack://SequenceServer/./node_modules/d3-transition/src/selection/transition.js","webpack://SequenceServer/./node_modules/d3-transition/src/selection/index.js","webpack://SequenceServer/./node_modules/d3-transition/src/selection/interrupt.js","webpack://SequenceServer/./node_modules/d3-transition/src/active.js","webpack://SequenceServer/./node_modules/d3-brush/src/constant.js","webpack://SequenceServer/./node_modules/d3-brush/src/event.js","webpack://SequenceServer/./node_modules/d3-brush/src/noevent.js","webpack://SequenceServer/./node_modules/d3-brush/src/brush.js","webpack://SequenceServer/./node_modules/d3-chord/src/math.js","webpack://SequenceServer/./node_modules/d3-chord/src/chord.js","webpack://SequenceServer/./node_modules/d3-path/src/path.js","webpack://SequenceServer/./node_modules/d3-chord/src/array.js","webpack://SequenceServer/./node_modules/d3-chord/src/constant.js","webpack://SequenceServer/./node_modules/d3-chord/src/ribbon.js","webpack://SequenceServer/./node_modules/d3-color/src/math.js","webpack://SequenceServer/./node_modules/d3-color/src/lab.js","webpack://SequenceServer/./node_modules/d3-color/src/cubehelix.js","webpack://SequenceServer/./node_modules/d3-contour/src/array.js","webpack://SequenceServer/./node_modules/d3-contour/src/ascending.js","webpack://SequenceServer/./node_modules/d3-contour/src/constant.js","webpack://SequenceServer/./node_modules/d3-contour/src/contains.js","webpack://SequenceServer/./node_modules/d3-contour/src/noop.js","webpack://SequenceServer/./node_modules/d3-contour/src/contours.js","webpack://SequenceServer/./node_modules/d3-contour/src/area.js","webpack://SequenceServer/./node_modules/d3-contour/src/density.js","webpack://SequenceServer/./node_modules/robust-predicates/esm/util.js","webpack://SequenceServer/./node_modules/robust-predicates/esm/orient2d.js","webpack://SequenceServer/./node_modules/robust-predicates/esm/orient3d.js","webpack://SequenceServer/./node_modules/robust-predicates/esm/incircle.js","webpack://SequenceServer/./node_modules/robust-predicates/esm/insphere.js","webpack://SequenceServer/./node_modules/delaunator/index.js","webpack://SequenceServer/./node_modules/d3-delaunay/src/path.js","webpack://SequenceServer/./node_modules/d3-delaunay/src/polygon.js","webpack://SequenceServer/./node_modules/d3-delaunay/src/voronoi.js","webpack://SequenceServer/./node_modules/d3-delaunay/src/delaunay.js","webpack://SequenceServer/./node_modules/d3-drag/src/constant.js","webpack://SequenceServer/./node_modules/d3-drag/src/event.js","webpack://SequenceServer/./node_modules/d3-drag/src/drag.js","webpack://SequenceServer/./node_modules/d3-dsv/src/dsv.js","webpack://SequenceServer/./node_modules/d3-dsv/src/csv.js","webpack://SequenceServer/./node_modules/d3-dsv/src/tsv.js","webpack://SequenceServer/./node_modules/d3-dsv/src/autoType.js","webpack://SequenceServer/./node_modules/d3-ease/src/linear.js","webpack://SequenceServer/./node_modules/d3-ease/src/quad.js","webpack://SequenceServer/./node_modules/d3-ease/src/poly.js","webpack://SequenceServer/./node_modules/d3-ease/src/sin.js","webpack://SequenceServer/./node_modules/d3-ease/src/math.js","webpack://SequenceServer/./node_modules/d3-ease/src/exp.js","webpack://SequenceServer/./node_modules/d3-ease/src/circle.js","webpack://SequenceServer/./node_modules/d3-ease/src/bounce.js","webpack://SequenceServer/./node_modules/d3-ease/src/back.js","webpack://SequenceServer/./node_modules/d3-ease/src/elastic.js","webpack://SequenceServer/./node_modules/d3-fetch/src/blob.js","webpack://SequenceServer/./node_modules/d3-fetch/src/buffer.js","webpack://SequenceServer/./node_modules/d3-fetch/src/text.js","webpack://SequenceServer/./node_modules/d3-fetch/src/dsv.js","webpack://SequenceServer/./node_modules/d3-fetch/src/image.js","webpack://SequenceServer/./node_modules/d3-fetch/src/json.js","webpack://SequenceServer/./node_modules/d3-fetch/src/xml.js","webpack://SequenceServer/./node_modules/d3-force/src/center.js","webpack://SequenceServer/./node_modules/d3-quadtree/src/add.js","webpack://SequenceServer/./node_modules/d3-quadtree/src/quad.js","webpack://SequenceServer/./node_modules/d3-quadtree/src/x.js","webpack://SequenceServer/./node_modules/d3-quadtree/src/y.js","webpack://SequenceServer/./node_modules/d3-quadtree/src/quadtree.js","webpack://SequenceServer/./node_modules/d3-force/src/constant.js","webpack://SequenceServer/./node_modules/d3-force/src/jiggle.js","webpack://SequenceServer/./node_modules/d3-force/src/collide.js","webpack://SequenceServer/./node_modules/d3-force/src/link.js","webpack://SequenceServer/./node_modules/d3-quadtree/src/cover.js","webpack://SequenceServer/./node_modules/d3-quadtree/src/data.js","webpack://SequenceServer/./node_modules/d3-quadtree/src/extent.js","webpack://SequenceServer/./node_modules/d3-quadtree/src/find.js","webpack://SequenceServer/./node_modules/d3-quadtree/src/remove.js","webpack://SequenceServer/./node_modules/d3-quadtree/src/root.js","webpack://SequenceServer/./node_modules/d3-quadtree/src/size.js","webpack://SequenceServer/./node_modules/d3-quadtree/src/visit.js","webpack://SequenceServer/./node_modules/d3-quadtree/src/visitAfter.js","webpack://SequenceServer/./node_modules/d3-force/src/lcg.js","webpack://SequenceServer/./node_modules/d3-force/src/simulation.js","webpack://SequenceServer/./node_modules/d3-force/src/manyBody.js","webpack://SequenceServer/./node_modules/d3-force/src/radial.js","webpack://SequenceServer/./node_modules/d3-force/src/x.js","webpack://SequenceServer/./node_modules/d3-force/src/y.js","webpack://SequenceServer/./node_modules/d3-format/src/formatDecimal.js","webpack://SequenceServer/./node_modules/d3-format/src/exponent.js","webpack://SequenceServer/./node_modules/d3-format/src/formatSpecifier.js","webpack://SequenceServer/./node_modules/d3-format/src/formatPrefixAuto.js","webpack://SequenceServer/./node_modules/d3-format/src/formatRounded.js","webpack://SequenceServer/./node_modules/d3-format/src/formatTypes.js","webpack://SequenceServer/./node_modules/d3-format/src/identity.js","webpack://SequenceServer/./node_modules/d3-format/src/locale.js","webpack://SequenceServer/./node_modules/d3-format/src/defaultLocale.js","webpack://SequenceServer/./node_modules/d3-format/src/formatGroup.js","webpack://SequenceServer/./node_modules/d3-format/src/formatNumerals.js","webpack://SequenceServer/./node_modules/d3-format/src/formatTrim.js","webpack://SequenceServer/./node_modules/d3-format/src/precisionFixed.js","webpack://SequenceServer/./node_modules/d3-format/src/precisionPrefix.js","webpack://SequenceServer/./node_modules/d3-format/src/precisionRound.js","webpack://SequenceServer/./node_modules/d3-geo/src/math.js","webpack://SequenceServer/./node_modules/d3-geo/src/noop.js","webpack://SequenceServer/./node_modules/d3-geo/src/stream.js","webpack://SequenceServer/./node_modules/d3-geo/src/area.js","webpack://SequenceServer/./node_modules/d3-geo/src/bounds.js","webpack://SequenceServer/./node_modules/d3-geo/src/cartesian.js","webpack://SequenceServer/./node_modules/d3-geo/src/centroid.js","webpack://SequenceServer/./node_modules/d3-geo/src/constant.js","webpack://SequenceServer/./node_modules/d3-geo/src/compose.js","webpack://SequenceServer/./node_modules/d3-geo/src/rotation.js","webpack://SequenceServer/./node_modules/d3-geo/src/circle.js","webpack://SequenceServer/./node_modules/d3-geo/src/clip/buffer.js","webpack://SequenceServer/./node_modules/d3-geo/src/pointEqual.js","webpack://SequenceServer/./node_modules/d3-geo/src/clip/rejoin.js","webpack://SequenceServer/./node_modules/d3-geo/src/polygonContains.js","webpack://SequenceServer/./node_modules/d3-geo/src/clip/index.js","webpack://SequenceServer/./node_modules/d3-geo/src/clip/antimeridian.js","webpack://SequenceServer/./node_modules/d3-geo/src/clip/circle.js","webpack://SequenceServer/./node_modules/d3-geo/src/clip/rectangle.js","webpack://SequenceServer/./node_modules/d3-geo/src/length.js","webpack://SequenceServer/./node_modules/d3-geo/src/clip/line.js","webpack://SequenceServer/./node_modules/d3-geo/src/clip/extent.js","webpack://SequenceServer/./node_modules/d3-geo/src/distance.js","webpack://SequenceServer/./node_modules/d3-geo/src/contains.js","webpack://SequenceServer/./node_modules/d3-geo/src/graticule.js","webpack://SequenceServer/./node_modules/d3-geo/src/interpolate.js","webpack://SequenceServer/./node_modules/d3-geo/src/identity.js","webpack://SequenceServer/./node_modules/d3-geo/src/path/area.js","webpack://SequenceServer/./node_modules/d3-geo/src/path/bounds.js","webpack://SequenceServer/./node_modules/d3-geo/src/path/centroid.js","webpack://SequenceServer/./node_modules/d3-geo/src/path/context.js","webpack://SequenceServer/./node_modules/d3-geo/src/path/measure.js","webpack://SequenceServer/./node_modules/d3-geo/src/path/string.js","webpack://SequenceServer/./node_modules/d3-geo/src/path/index.js","webpack://SequenceServer/./node_modules/d3-geo/src/transform.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/fit.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/resample.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/index.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/conic.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/conicEqualArea.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/cylindricalEqualArea.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/albers.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/albersUsa.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/azimuthal.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/azimuthalEqualArea.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/azimuthalEquidistant.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/mercator.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/conicConformal.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/equirectangular.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/conicEquidistant.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/equalEarth.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/gnomonic.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/identity.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/naturalEarth1.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/orthographic.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/stereographic.js","webpack://SequenceServer/./node_modules/d3-geo/src/projection/transverseMercator.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/cluster.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/hierarchy/count.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/hierarchy/index.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/accessors.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/constant.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/hierarchy/each.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/hierarchy/find.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/hierarchy/sum.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/hierarchy/sort.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/hierarchy/path.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/hierarchy/ancestors.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/hierarchy/descendants.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/hierarchy/leaves.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/hierarchy/links.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/hierarchy/iterator.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/lcg.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/pack/enclose.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/array.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/pack/siblings.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/pack/index.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/treemap/round.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/treemap/dice.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/partition.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/stratify.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/tree.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/treemap/slice.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/treemap/squarify.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/treemap/index.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/treemap/binary.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/treemap/sliceDice.js","webpack://SequenceServer/./node_modules/d3-hierarchy/src/treemap/resquarify.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/discrete.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/hue.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/round.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/zoom.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/hsl.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/lab.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/hcl.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/cubehelix.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/piecewise.js","webpack://SequenceServer/./node_modules/d3-interpolate/src/quantize.js","webpack://SequenceServer/./node_modules/d3-polygon/src/area.js","webpack://SequenceServer/./node_modules/d3-polygon/src/centroid.js","webpack://SequenceServer/./node_modules/d3-polygon/src/cross.js","webpack://SequenceServer/./node_modules/d3-polygon/src/hull.js","webpack://SequenceServer/./node_modules/d3-polygon/src/contains.js","webpack://SequenceServer/./node_modules/d3-polygon/src/length.js","webpack://SequenceServer/./node_modules/d3-random/src/defaultSource.js","webpack://SequenceServer/./node_modules/d3-random/src/uniform.js","webpack://SequenceServer/./node_modules/d3-random/src/int.js","webpack://SequenceServer/./node_modules/d3-random/src/normal.js","webpack://SequenceServer/./node_modules/d3-random/src/logNormal.js","webpack://SequenceServer/./node_modules/d3-random/src/irwinHall.js","webpack://SequenceServer/./node_modules/d3-random/src/bates.js","webpack://SequenceServer/./node_modules/d3-random/src/exponential.js","webpack://SequenceServer/./node_modules/d3-random/src/pareto.js","webpack://SequenceServer/./node_modules/d3-random/src/bernoulli.js","webpack://SequenceServer/./node_modules/d3-random/src/geometric.js","webpack://SequenceServer/./node_modules/d3-random/src/gamma.js","webpack://SequenceServer/./node_modules/d3-random/src/beta.js","webpack://SequenceServer/./node_modules/d3-random/src/binomial.js","webpack://SequenceServer/./node_modules/d3-random/src/weibull.js","webpack://SequenceServer/./node_modules/d3-random/src/cauchy.js","webpack://SequenceServer/./node_modules/d3-random/src/logistic.js","webpack://SequenceServer/./node_modules/d3-random/src/poisson.js","webpack://SequenceServer/./node_modules/d3-random/src/lcg.js","webpack://SequenceServer/./node_modules/d3-scale/src/init.js","webpack://SequenceServer/./node_modules/d3-scale/src/ordinal.js","webpack://SequenceServer/./node_modules/d3-scale/src/band.js","webpack://SequenceServer/./node_modules/d3-scale/src/number.js","webpack://SequenceServer/./node_modules/d3-scale/src/continuous.js","webpack://SequenceServer/./node_modules/d3-scale/src/constant.js","webpack://SequenceServer/./node_modules/d3-scale/src/tickFormat.js","webpack://SequenceServer/./node_modules/d3-scale/src/linear.js","webpack://SequenceServer/./node_modules/d3-scale/src/identity.js","webpack://SequenceServer/./node_modules/d3-scale/src/nice.js","webpack://SequenceServer/./node_modules/d3-scale/src/log.js","webpack://SequenceServer/./node_modules/d3-scale/src/symlog.js","webpack://SequenceServer/./node_modules/d3-scale/src/pow.js","webpack://SequenceServer/./node_modules/d3-scale/src/radial.js","webpack://SequenceServer/./node_modules/d3-scale/src/quantile.js","webpack://SequenceServer/./node_modules/d3-scale/src/quantize.js","webpack://SequenceServer/./node_modules/d3-scale/src/threshold.js","webpack://SequenceServer/./node_modules/d3-time/src/duration.js","webpack://SequenceServer/./node_modules/d3-time/src/interval.js","webpack://SequenceServer/./node_modules/d3-time/src/millisecond.js","webpack://SequenceServer/./node_modules/d3-time/src/second.js","webpack://SequenceServer/./node_modules/d3-time/src/minute.js","webpack://SequenceServer/./node_modules/d3-time/src/hour.js","webpack://SequenceServer/./node_modules/d3-time/src/day.js","webpack://SequenceServer/./node_modules/d3-time/src/week.js","webpack://SequenceServer/./node_modules/d3-time/src/month.js","webpack://SequenceServer/./node_modules/d3-time/src/year.js","webpack://SequenceServer/./node_modules/d3-time/src/ticks.js","webpack://SequenceServer/./node_modules/d3-time-format/src/locale.js","webpack://SequenceServer/./node_modules/d3-time-format/src/defaultLocale.js","webpack://SequenceServer/./node_modules/d3-scale/src/time.js","webpack://SequenceServer/./node_modules/d3-scale/src/utcTime.js","webpack://SequenceServer/./node_modules/d3-scale/src/sequential.js","webpack://SequenceServer/./node_modules/d3-scale/src/sequentialQuantile.js","webpack://SequenceServer/./node_modules/d3-scale/src/diverging.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/colors.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/categorical/observable10.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/categorical/Tableau10.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/ramp.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js","webpack://SequenceServer/./node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://SequenceServer/./node_modules/d3-selection/src/create.js","webpack://SequenceServer/./node_modules/d3-selection/src/local.js","webpack://SequenceServer/./node_modules/d3-selection/src/pointers.js","webpack://SequenceServer/./node_modules/d3-selection/src/selectAll.js","webpack://SequenceServer/./node_modules/d3-shape/src/constant.js","webpack://SequenceServer/./node_modules/d3-shape/src/math.js","webpack://SequenceServer/./node_modules/d3-shape/src/path.js","webpack://SequenceServer/./node_modules/d3-shape/src/arc.js","webpack://SequenceServer/./node_modules/d3-shape/src/array.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/linear.js","webpack://SequenceServer/./node_modules/d3-shape/src/point.js","webpack://SequenceServer/./node_modules/d3-shape/src/line.js","webpack://SequenceServer/./node_modules/d3-shape/src/area.js","webpack://SequenceServer/./node_modules/d3-shape/src/descending.js","webpack://SequenceServer/./node_modules/d3-shape/src/identity.js","webpack://SequenceServer/./node_modules/d3-shape/src/pie.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/radial.js","webpack://SequenceServer/./node_modules/d3-shape/src/lineRadial.js","webpack://SequenceServer/./node_modules/d3-shape/src/areaRadial.js","webpack://SequenceServer/./node_modules/d3-shape/src/pointRadial.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/bump.js","webpack://SequenceServer/./node_modules/d3-shape/src/link.js","webpack://SequenceServer/./node_modules/d3-shape/src/symbol/asterisk.js","webpack://SequenceServer/./node_modules/d3-shape/src/symbol/circle.js","webpack://SequenceServer/./node_modules/d3-shape/src/symbol/cross.js","webpack://SequenceServer/./node_modules/d3-shape/src/symbol/diamond.js","webpack://SequenceServer/./node_modules/d3-shape/src/symbol/diamond2.js","webpack://SequenceServer/./node_modules/d3-shape/src/symbol/plus.js","webpack://SequenceServer/./node_modules/d3-shape/src/symbol/square.js","webpack://SequenceServer/./node_modules/d3-shape/src/symbol/square2.js","webpack://SequenceServer/./node_modules/d3-shape/src/symbol/star.js","webpack://SequenceServer/./node_modules/d3-shape/src/symbol/triangle.js","webpack://SequenceServer/./node_modules/d3-shape/src/symbol/triangle2.js","webpack://SequenceServer/./node_modules/d3-shape/src/symbol/wye.js","webpack://SequenceServer/./node_modules/d3-shape/src/symbol/times.js","webpack://SequenceServer/./node_modules/d3-shape/src/symbol.js","webpack://SequenceServer/./node_modules/d3-shape/src/noop.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/basis.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/basisClosed.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/basisOpen.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/bundle.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/cardinal.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/cardinalClosed.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/cardinalOpen.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/catmullRom.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/catmullRomClosed.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/catmullRomOpen.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/linearClosed.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/monotone.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/natural.js","webpack://SequenceServer/./node_modules/d3-shape/src/curve/step.js","webpack://SequenceServer/./node_modules/d3-shape/src/offset/none.js","webpack://SequenceServer/./node_modules/d3-shape/src/order/none.js","webpack://SequenceServer/./node_modules/d3-shape/src/stack.js","webpack://SequenceServer/./node_modules/d3-shape/src/offset/expand.js","webpack://SequenceServer/./node_modules/d3-shape/src/offset/diverging.js","webpack://SequenceServer/./node_modules/d3-shape/src/offset/silhouette.js","webpack://SequenceServer/./node_modules/d3-shape/src/offset/wiggle.js","webpack://SequenceServer/./node_modules/d3-shape/src/order/appearance.js","webpack://SequenceServer/./node_modules/d3-shape/src/order/ascending.js","webpack://SequenceServer/./node_modules/d3-shape/src/order/descending.js","webpack://SequenceServer/./node_modules/d3-shape/src/order/insideOut.js","webpack://SequenceServer/./node_modules/d3-shape/src/order/reverse.js","webpack://SequenceServer/./node_modules/d3-time-format/src/isoFormat.js","webpack://SequenceServer/./node_modules/d3-time-format/src/isoParse.js","webpack://SequenceServer/./node_modules/d3-timer/src/interval.js","webpack://SequenceServer/./node_modules/d3-zoom/src/constant.js","webpack://SequenceServer/./node_modules/d3-zoom/src/event.js","webpack://SequenceServer/./node_modules/d3-zoom/src/transform.js","webpack://SequenceServer/./node_modules/d3-zoom/src/noevent.js","webpack://SequenceServer/./node_modules/d3-zoom/src/zoom.js","webpack://SequenceServer/webpack/bootstrap","webpack://SequenceServer/webpack/runtime/compat get default export","webpack://SequenceServer/webpack/runtime/define property getters","webpack://SequenceServer/webpack/runtime/global","webpack://SequenceServer/webpack/runtime/hasOwnProperty shorthand","webpack://SequenceServer/webpack/runtime/make namespace object","webpack://SequenceServer/webpack/runtime/node module decorator","webpack://SequenceServer/./public/js/jquery_world.js","webpack://SequenceServer/./node_modules/underscore/modules/_setup.js","webpack://SequenceServer/./node_modules/underscore/modules/restArguments.js","webpack://SequenceServer/./node_modules/underscore/modules/isObject.js","webpack://SequenceServer/./node_modules/underscore/modules/isNull.js","webpack://SequenceServer/./node_modules/underscore/modules/isUndefined.js","webpack://SequenceServer/./node_modules/underscore/modules/isBoolean.js","webpack://SequenceServer/./node_modules/underscore/modules/isElement.js","webpack://SequenceServer/./node_modules/underscore/modules/_tagTester.js","webpack://SequenceServer/./node_modules/underscore/modules/isString.js","webpack://SequenceServer/./node_modules/underscore/modules/isNumber.js","webpack://SequenceServer/./node_modules/underscore/modules/isDate.js","webpack://SequenceServer/./node_modules/underscore/modules/isRegExp.js","webpack://SequenceServer/./node_modules/underscore/modules/isError.js","webpack://SequenceServer/./node_modules/underscore/modules/isSymbol.js","webpack://SequenceServer/./node_modules/underscore/modules/isArrayBuffer.js","webpack://SequenceServer/./node_modules/underscore/modules/isFunction.js","webpack://SequenceServer/./node_modules/underscore/modules/_hasObjectTag.js","webpack://SequenceServer/./node_modules/underscore/modules/_stringTagBug.js","webpack://SequenceServer/./node_modules/underscore/modules/isDataView.js","webpack://SequenceServer/./node_modules/underscore/modules/isArray.js","webpack://SequenceServer/./node_modules/underscore/modules/_has.js","webpack://SequenceServer/./node_modules/underscore/modules/isArguments.js","webpack://SequenceServer/./node_modules/underscore/modules/isFinite.js","webpack://SequenceServer/./node_modules/underscore/modules/isNaN.js","webpack://SequenceServer/./node_modules/underscore/modules/constant.js","webpack://SequenceServer/./node_modules/underscore/modules/_createSizePropertyCheck.js","webpack://SequenceServer/./node_modules/underscore/modules/_shallowProperty.js","webpack://SequenceServer/./node_modules/underscore/modules/_getByteLength.js","webpack://SequenceServer/./node_modules/underscore/modules/_isBufferLike.js","webpack://SequenceServer/./node_modules/underscore/modules/isTypedArray.js","webpack://SequenceServer/./node_modules/underscore/modules/_getLength.js","webpack://SequenceServer/./node_modules/underscore/modules/_collectNonEnumProps.js","webpack://SequenceServer/./node_modules/underscore/modules/keys.js","webpack://SequenceServer/./node_modules/underscore/modules/isEmpty.js","webpack://SequenceServer/./node_modules/underscore/modules/isMatch.js","webpack://SequenceServer/./node_modules/underscore/modules/underscore.js","webpack://SequenceServer/./node_modules/underscore/modules/_toBufferView.js","webpack://SequenceServer/./node_modules/underscore/modules/isEqual.js","webpack://SequenceServer/./node_modules/underscore/modules/allKeys.js","webpack://SequenceServer/./node_modules/underscore/modules/_methodFingerprint.js","webpack://SequenceServer/./node_modules/underscore/modules/isMap.js","webpack://SequenceServer/./node_modules/underscore/modules/isWeakMap.js","webpack://SequenceServer/./node_modules/underscore/modules/isSet.js","webpack://SequenceServer/./node_modules/underscore/modules/isWeakSet.js","webpack://SequenceServer/./node_modules/underscore/modules/values.js","webpack://SequenceServer/./node_modules/underscore/modules/pairs.js","webpack://SequenceServer/./node_modules/underscore/modules/invert.js","webpack://SequenceServer/./node_modules/underscore/modules/functions.js","webpack://SequenceServer/./node_modules/underscore/modules/_createAssigner.js","webpack://SequenceServer/./node_modules/underscore/modules/extend.js","webpack://SequenceServer/./node_modules/underscore/modules/extendOwn.js","webpack://SequenceServer/./node_modules/underscore/modules/defaults.js","webpack://SequenceServer/./node_modules/underscore/modules/_baseCreate.js","webpack://SequenceServer/./node_modules/underscore/modules/create.js","webpack://SequenceServer/./node_modules/underscore/modules/clone.js","webpack://SequenceServer/./node_modules/underscore/modules/tap.js","webpack://SequenceServer/./node_modules/underscore/modules/toPath.js","webpack://SequenceServer/./node_modules/underscore/modules/_toPath.js","webpack://SequenceServer/./node_modules/underscore/modules/_deepGet.js","webpack://SequenceServer/./node_modules/underscore/modules/get.js","webpack://SequenceServer/./node_modules/underscore/modules/has.js","webpack://SequenceServer/./node_modules/underscore/modules/identity.js","webpack://SequenceServer/./node_modules/underscore/modules/matcher.js","webpack://SequenceServer/./node_modules/underscore/modules/property.js","webpack://SequenceServer/./node_modules/underscore/modules/_optimizeCb.js","webpack://SequenceServer/./node_modules/underscore/modules/_baseIteratee.js","webpack://SequenceServer/./node_modules/underscore/modules/iteratee.js","webpack://SequenceServer/./node_modules/underscore/modules/_cb.js","webpack://SequenceServer/./node_modules/underscore/modules/mapObject.js","webpack://SequenceServer/./node_modules/underscore/modules/noop.js","webpack://SequenceServer/./node_modules/underscore/modules/propertyOf.js","webpack://SequenceServer/./node_modules/underscore/modules/times.js","webpack://SequenceServer/./node_modules/underscore/modules/random.js","webpack://SequenceServer/./node_modules/underscore/modules/now.js","webpack://SequenceServer/./node_modules/underscore/modules/_createEscaper.js","webpack://SequenceServer/./node_modules/underscore/modules/_escapeMap.js","webpack://SequenceServer/./node_modules/underscore/modules/escape.js","webpack://SequenceServer/./node_modules/underscore/modules/unescape.js","webpack://SequenceServer/./node_modules/underscore/modules/_unescapeMap.js","webpack://SequenceServer/./node_modules/underscore/modules/templateSettings.js","webpack://SequenceServer/./node_modules/underscore/modules/template.js","webpack://SequenceServer/./node_modules/underscore/modules/result.js","webpack://SequenceServer/./node_modules/underscore/modules/uniqueId.js","webpack://SequenceServer/./node_modules/underscore/modules/chain.js","webpack://SequenceServer/./node_modules/underscore/modules/_executeBound.js","webpack://SequenceServer/./node_modules/underscore/modules/partial.js","webpack://SequenceServer/./node_modules/underscore/modules/bind.js","webpack://SequenceServer/./node_modules/underscore/modules/_isArrayLike.js","webpack://SequenceServer/./node_modules/underscore/modules/_flatten.js","webpack://SequenceServer/./node_modules/underscore/modules/bindAll.js","webpack://SequenceServer/./node_modules/underscore/modules/memoize.js","webpack://SequenceServer/./node_modules/underscore/modules/delay.js","webpack://SequenceServer/./node_modules/underscore/modules/defer.js","webpack://SequenceServer/./node_modules/underscore/modules/throttle.js","webpack://SequenceServer/./node_modules/underscore/modules/debounce.js","webpack://SequenceServer/./node_modules/underscore/modules/wrap.js","webpack://SequenceServer/./node_modules/underscore/modules/negate.js","webpack://SequenceServer/./node_modules/underscore/modules/compose.js","webpack://SequenceServer/./node_modules/underscore/modules/after.js","webpack://SequenceServer/./node_modules/underscore/modules/before.js","webpack://SequenceServer/./node_modules/underscore/modules/once.js","webpack://SequenceServer/./node_modules/underscore/modules/findKey.js","webpack://SequenceServer/./node_modules/underscore/modules/_createPredicateIndexFinder.js","webpack://SequenceServer/./node_modules/underscore/modules/findIndex.js","webpack://SequenceServer/./node_modules/underscore/modules/findLastIndex.js","webpack://SequenceServer/./node_modules/underscore/modules/sortedIndex.js","webpack://SequenceServer/./node_modules/underscore/modules/_createIndexFinder.js","webpack://SequenceServer/./node_modules/underscore/modules/indexOf.js","webpack://SequenceServer/./node_modules/underscore/modules/lastIndexOf.js","webpack://SequenceServer/./node_modules/underscore/modules/find.js","webpack://SequenceServer/./node_modules/underscore/modules/findWhere.js","webpack://SequenceServer/./node_modules/underscore/modules/each.js","webpack://SequenceServer/./node_modules/underscore/modules/map.js","webpack://SequenceServer/./node_modules/underscore/modules/_createReduce.js","webpack://SequenceServer/./node_modules/underscore/modules/reduce.js","webpack://SequenceServer/./node_modules/underscore/modules/reduceRight.js","webpack://SequenceServer/./node_modules/underscore/modules/filter.js","webpack://SequenceServer/./node_modules/underscore/modules/reject.js","webpack://SequenceServer/./node_modules/underscore/modules/every.js","webpack://SequenceServer/./node_modules/underscore/modules/some.js","webpack://SequenceServer/./node_modules/underscore/modules/contains.js","webpack://SequenceServer/./node_modules/underscore/modules/invoke.js","webpack://SequenceServer/./node_modules/underscore/modules/pluck.js","webpack://SequenceServer/./node_modules/underscore/modules/where.js","webpack://SequenceServer/./node_modules/underscore/modules/max.js","webpack://SequenceServer/./node_modules/underscore/modules/min.js","webpack://SequenceServer/./node_modules/underscore/modules/toArray.js","webpack://SequenceServer/./node_modules/underscore/modules/sample.js","webpack://SequenceServer/./node_modules/underscore/modules/shuffle.js","webpack://SequenceServer/./node_modules/underscore/modules/sortBy.js","webpack://SequenceServer/./node_modules/underscore/modules/_group.js","webpack://SequenceServer/./node_modules/underscore/modules/groupBy.js","webpack://SequenceServer/./node_modules/underscore/modules/indexBy.js","webpack://SequenceServer/./node_modules/underscore/modules/countBy.js","webpack://SequenceServer/./node_modules/underscore/modules/partition.js","webpack://SequenceServer/./node_modules/underscore/modules/size.js","webpack://SequenceServer/./node_modules/underscore/modules/_keyInObj.js","webpack://SequenceServer/./node_modules/underscore/modules/pick.js","webpack://SequenceServer/./node_modules/underscore/modules/omit.js","webpack://SequenceServer/./node_modules/underscore/modules/initial.js","webpack://SequenceServer/./node_modules/underscore/modules/first.js","webpack://SequenceServer/./node_modules/underscore/modules/rest.js","webpack://SequenceServer/./node_modules/underscore/modules/last.js","webpack://SequenceServer/./node_modules/underscore/modules/compact.js","webpack://SequenceServer/./node_modules/underscore/modules/flatten.js","webpack://SequenceServer/./node_modules/underscore/modules/difference.js","webpack://SequenceServer/./node_modules/underscore/modules/without.js","webpack://SequenceServer/./node_modules/underscore/modules/uniq.js","webpack://SequenceServer/./node_modules/underscore/modules/union.js","webpack://SequenceServer/./node_modules/underscore/modules/intersection.js","webpack://SequenceServer/./node_modules/underscore/modules/unzip.js","webpack://SequenceServer/./node_modules/underscore/modules/zip.js","webpack://SequenceServer/./node_modules/underscore/modules/object.js","webpack://SequenceServer/./node_modules/underscore/modules/range.js","webpack://SequenceServer/./node_modules/underscore/modules/chunk.js","webpack://SequenceServer/./node_modules/underscore/modules/_chainResult.js","webpack://SequenceServer/./node_modules/underscore/modules/mixin.js","webpack://SequenceServer/./node_modules/underscore/modules/underscore-array-methods.js","webpack://SequenceServer/./node_modules/underscore/modules/index-default.js","webpack://SequenceServer/./public/js/download_fasta.js","webpack://SequenceServer/./public/js/mailto.js","webpack://SequenceServer/./public/js/share_url.js","webpack://SequenceServer/./public/js/cloud_share_modal.js","webpack://SequenceServer/./public/js/null_plugins/download_links.js","webpack://SequenceServer/./public/js/sidebar.js","webpack://SequenceServer/./public/js/exporter.js","webpack://SequenceServer/./public/js/alignment_exporter.js","webpack://SequenceServer/./public/js/svgExporter.js","webpack://SequenceServer/./public/js/collapse_preferences.js","webpack://SequenceServer/./public/js/grapher.js","webpack://SequenceServer/./public/js/null_plugins/grapher/histogram.js","webpack://SequenceServer/./node_modules/chroma-js/src/utils/limit.js","webpack://SequenceServer/./node_modules/chroma-js/src/utils/clip_rgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/utils/type.js","webpack://SequenceServer/./node_modules/chroma-js/src/utils/unpack.js","webpack://SequenceServer/./node_modules/chroma-js/src/utils/last.js","webpack://SequenceServer/./node_modules/chroma-js/src/utils/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/input.js","webpack://SequenceServer/./node_modules/chroma-js/src/Color.js","webpack://SequenceServer/./node_modules/chroma-js/src/chroma.js","webpack://SequenceServer/./node_modules/chroma-js/src/version.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/cmyk/rgb2cmyk.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/cmyk/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/cmyk/cmyk2rgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/css/hsl2css.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/hsl/rgb2hsl.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/css/rgb2css.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/hsl/hsl2rgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/css/css2rgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/css/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/gl/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/hcg/hcg2rgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/hcg/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/hcg/rgb2hcg.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/hex/hex2rgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/hex/rgb2hex.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/hex/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/hsi/hsi2rgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/hsi/rgb2hsi.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/hsi/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/hsl/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/hsv/hsv2rgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/hsv/rgb2hsv.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/hsv/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/lab/lab-constants.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/lab/lab2rgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/lab/rgb2lab.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/lab/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/lch/lch2lab.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/lch/lch2rgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/lch/lab2lch.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/lch/rgb2lch.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/lch/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/lch/hcl2rgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/colors/w3cx11.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/named/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/num/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/num/rgb2num.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/num/num2rgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/rgb/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/temp/temperature2rgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/temp/rgb2temperature.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/temp/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/oklab/oklab2rgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/oklab/rgb2oklab.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/oklab/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/oklch/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/oklch/rgb2oklch.js","webpack://SequenceServer/./node_modules/chroma-js/src/io/oklch/oklch2rgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/ops/alpha.js","webpack://SequenceServer/./node_modules/chroma-js/src/ops/clipped.js","webpack://SequenceServer/./node_modules/chroma-js/src/ops/darken.js","webpack://SequenceServer/./node_modules/chroma-js/src/ops/get.js","webpack://SequenceServer/./node_modules/chroma-js/src/ops/luminance.js","webpack://SequenceServer/./node_modules/chroma-js/src/interpolator/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/generator/mix.js","webpack://SequenceServer/./node_modules/chroma-js/src/ops/mix.js","webpack://SequenceServer/./node_modules/chroma-js/src/ops/premultiply.js","webpack://SequenceServer/./node_modules/chroma-js/src/ops/saturate.js","webpack://SequenceServer/./node_modules/chroma-js/src/ops/set.js","webpack://SequenceServer/./node_modules/chroma-js/src/ops/shade.js","webpack://SequenceServer/./node_modules/chroma-js/src/interpolator/rgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/interpolator/lrgb.js","webpack://SequenceServer/./node_modules/chroma-js/src/interpolator/lab.js","webpack://SequenceServer/./node_modules/chroma-js/src/interpolator/_hsx.js","webpack://SequenceServer/./node_modules/chroma-js/src/interpolator/lch.js","webpack://SequenceServer/./node_modules/chroma-js/src/interpolator/num.js","webpack://SequenceServer/./node_modules/chroma-js/src/interpolator/hcg.js","webpack://SequenceServer/./node_modules/chroma-js/src/interpolator/hsi.js","webpack://SequenceServer/./node_modules/chroma-js/src/interpolator/hsl.js","webpack://SequenceServer/./node_modules/chroma-js/src/interpolator/hsv.js","webpack://SequenceServer/./node_modules/chroma-js/src/interpolator/oklab.js","webpack://SequenceServer/./node_modules/chroma-js/src/interpolator/oklch.js","webpack://SequenceServer/./node_modules/chroma-js/src/generator/average.js","webpack://SequenceServer/./node_modules/chroma-js/src/generator/scale.js","webpack://SequenceServer/./node_modules/chroma-js/src/generator/bezier.js","webpack://SequenceServer/./node_modules/chroma-js/src/generator/blend.js","webpack://SequenceServer/./node_modules/chroma-js/src/generator/cubehelix.js","webpack://SequenceServer/./node_modules/chroma-js/src/generator/random.js","webpack://SequenceServer/./node_modules/chroma-js/src/utils/analyze.js","webpack://SequenceServer/./node_modules/chroma-js/src/utils/contrast.js","webpack://SequenceServer/./node_modules/chroma-js/src/utils/delta-e.js","webpack://SequenceServer/./node_modules/chroma-js/src/utils/scales.js","webpack://SequenceServer/./node_modules/chroma-js/src/colors/colorbrewer.js","webpack://SequenceServer/./node_modules/chroma-js/index.js","webpack://SequenceServer/./node_modules/chroma-js/src/utils/distance.js","webpack://SequenceServer/./node_modules/chroma-js/src/utils/valid.js","webpack://SequenceServer/./public/js/null_plugins/report_plugins.js","webpack://SequenceServer/./public/js/report/report_header.js","webpack://SequenceServer/./public/js/report/run_summary.js","webpack://SequenceServer/./public/js/visualisation_helpers.js","webpack://SequenceServer/./public/js/utils.js","webpack://SequenceServer/./public/js/circos.js","webpack://SequenceServer/./public/js/report/graphical_overview.js","webpack://SequenceServer/./public/js/hits_overview.js","webpack://SequenceServer/./public/js/length_distribution.js","webpack://SequenceServer/./public/js/query.js","webpack://SequenceServer/./public/js/kablammo.js","webpack://SequenceServer/./public/js/null_plugins/hit_buttons.js","webpack://SequenceServer/./public/js/hit.js","webpack://SequenceServer/./public/js/hsp.js","webpack://SequenceServer/./public/js/hits.js","webpack://SequenceServer/./public/js/report/alignment_results.js","webpack://SequenceServer/./public/js/report.js","webpack://SequenceServer/./public/js/sequence_modal.js","webpack://SequenceServer/./public/js/sequence.js","webpack://SequenceServer/./public/js/error_modal.js","webpack://SequenceServer/./public/js/report_root.js"],"sourcesContent":["const d3 = require('d3');\n\n// ribbon function from d3 version 3\nvar π = Math.PI, halfπ = π / 2;\nfunction d3_functor(v) {\n    return typeof v === \"function\" ? v : function() {\n        return v;\n    };\n}\n\nfunction d3_source(d) {\n  return d.source;\n}\n\nfunction d3_target(d) {\n  return d.target;\n}\n\nfunction d3_svg_chordRadius(d) {\n  return d.radius;\n}\n\nfunction d3_svg_arcStartAngle(d) {\n  return d.startAngle;\n}\n\nfunction d3_svg_arcEndAngle(d) {\n  return d.endAngle;\n}\n\nvar ribbonV3 = function() {\n    var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;\n    function chord(d, i) {\n        var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i);\n        result = \"M\" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.p0) : curve(t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(s.p0)) + \"Z\";\n        return result;\n    }\n    function subgroup(self, f, d, i) {\n        var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ;\n        return {\n            r: r,\n            a0: a0,\n            a1: a1,\n            p0: [ r * Math.cos(a0), r * Math.sin(a0) ],\n            p1: [ r * Math.cos(a1), r * Math.sin(a1) ]\n        };\n    }\n    function equals(a, b) {\n        return a.a0 == b.a0 && a.a1 == b.a1;\n    }\n    function arc(r, p, a) {\n        return \"A\" + r + \",\" + r + \" 0 \" + +(a > π) + \",1 \" + p;\n    }\n    function curve(p1) {\n        return \"Q 0,0 \" + p1;\n    }\n    chord.radius = function(v) {\n        if (!arguments.length) return radius;\n        radius = d3_functor(v);\n        return chord;\n    };\n    chord.source = function(v) {\n        if (!arguments.length) return source;\n        source = d3_functor(v);\n        return chord;\n    };\n    chord.target = function(v) {\n        if (!arguments.length) return target;\n        target = d3_functor(v);\n        return chord;\n    };\n    chord.startAngle = function(v) {\n        if (!arguments.length) return startAngle;\n        startAngle = d3_functor(v);\n        return chord;\n    };\n    chord.endAngle = function(v) {\n        if (!arguments.length) return endAngle;\n        endAngle = d3_functor(v);\n        return chord;\n    };\n    return chord;\n};\n// end of ribbon function from d3 version 3\n\n\n// Bellow code extracted from circosjs https://github.com/nicgirault/circosJS and d3 version upgraded to use version 7.9\n\nvar circosJS,\n    indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\nif (typeof Object.assign !== 'function') {\n    Object.assign = function(target) {\n        'use strict';\n        var index, key, source;\n        if (target === null) {\n            throw new TypeError('Cannot convert undefined or null to object');\n        }\n        target = Object(target);\n        index = 1;\n        while (index < arguments.length) {\n            source = arguments[index];\n            if (source !== null) {\n                for (key in source) {\n                    if (Object.prototype.hasOwnProperty.call(source, key)) {\n                        target[key] = source[key];\n                    }\n                }\n            }\n            index++;\n        }\n        return target;\n    };\n}\n\ncircosJS = function(conf) {\n    var instance;\n    instance = new circosJS.Core(conf);\n    return instance;\n};\n\ncircosJS.Core = function(conf) {\n    this.tracks = {\n        heatmaps: {},\n        histograms: {},\n        chords: {},\n        scatters: {},\n        lines: {},\n        stacks: {},\n        highlights: {},\n        texts: {}\n    };\n    this.conf = circosJS.mixConf(conf, this.defaultConf);\n    return this;\n};\n\ncircosJS.Core.prototype.removeTracks = function(trackIds) {\n    var id, l, len, ref, store, svg, trackId, type;\n    svg = d3.select(this.conf.container);\n    ref = this.tracks;\n    for (type in ref) {\n        store = ref[type];\n        if (typeof trackIds === 'object') {\n            for (l = 0, len = trackIds.length; l < len; l++) {\n                id = trackIds[l];\n                if (id in store) {\n                    svg.select('.' + id).remove();\n                    delete store[id];\n                }\n            }\n        } else if (typeof trackIds === 'string') {\n            if (trackIds in store) {\n                svg.select('.' + trackIds).remove();\n                delete store[trackIds];\n            }\n        } else if (typeof trackIds === 'undefined') {\n            for (trackId in store) {\n                svg.select('.' + trackId).remove();\n                delete store[trackId];\n            }\n        }\n    }\n    return this;\n};\n\ncircosJS.Core.prototype.layout = function(conf, data) {\n    this._layout = new circosJS.Layout(conf, data);\n    return this;\n};\n\ncircosJS.log = function(level, code, message, data) {\n    var levels;\n    levels = ['Permanent log', 'Error', 'Warning', 'Info'];\n    console.log('CircosJS: ', levels[level] + ' [' + code + '] ', message, data);\n};\n\ncircosJS.mixConf = function(conf, defaultConf) {\n    var key, newConf, value;\n    newConf = {};\n    for (key in defaultConf) {\n        value = defaultConf[key];\n        if (key in conf) {\n            if (Object.prototype.toString.call(value) === '[object Array]') {\n                newConf[key] = conf[key];\n            } else if (typeof value === 'object' && (value != null)) {\n                if ((value != null) && Object.keys(value).length === 0) {\n                    newConf[key] = conf[key];\n                } else {\n                    newConf[key] = circosJS.mixConf(conf[key], value);\n                }\n            } else {\n                newConf[key] = conf[key];\n            }\n        } else {\n            newConf[key] = value;\n        }\n    }\n    return newConf;\n};\n\ncircosJS.Core.prototype.smartBorders = function() {\n    var border, borders, currentBorder, l, layout, len, ref, store, track, trackId, trackType, width;\n    width = this.conf.defaultTrackWidth;\n    layout = {\n        'in': this._layout.conf.innerRadius,\n        out: this._layout.conf.outerRadius\n    };\n    borders = [];\n    ref = this.tracks;\n    for (trackType in ref) {\n        store = ref[trackType];\n        for (trackId in store) {\n            track = store[trackId];\n            if (track.conf.innerRadius) {\n                borders.push({\n                    'in': track.conf.innerRadius,\n                    out: track.conf.outerRadius\n                });\n            }\n        }\n    }\n    borders = borders.sort(function(a, b) {\n        if (a.out > b.out) {\n            1;\n        }\n        if (a.out < b.out) {\n            -1;\n        }\n        return 0;\n    });\n    currentBorder = layout;\n    for (l = 0, len = borders.length; l < len; l++) {\n        border = borders[l];\n        if (border.out < currentBorder['in'] - width) {\n            return {\n                'in': currentBorder['in'] - width,\n                out: currentBorder['in']\n            };\n        }\n        currentBorder = border;\n    }\n    if (currentBorder['in'] > width) {\n        return {\n            'in': currentBorder['in'] - width,\n            out: currentBorder['in']\n        };\n    } else {\n        return {\n            'in': borders[0].out,\n            out: borders[0].out + width\n        };\n    }\n};\n\nif (typeof module !== 'undefined' && module !== null) {\n    module.exports = circosJS;\n}\n\ncircosJS.checkParent = function(key, index, layoutSummary, header) {\n    if (!(key in layoutSummary)) {\n        circosJS.log(1, 'datum', 'unknown parent id', {\n            line: index + 1,\n            value: key,\n            header: header,\n            layoutSummary: layoutSummary\n        });\n        return false;\n    }\n    return true;\n};\n\ncircosJS.checkNumber = function(keys, index) {\n    var header, value;\n    for (header in keys) {\n        value = keys[header];\n        if (isNaN(value)) {\n            circosJS.log(1, 'datum', 'not a number', {\n                line: index + 1,\n                value: value,\n                header: header\n            });\n            return false;\n        }\n    }\n    return true;\n};\n\ncircosJS.parseChordData = function(data, layoutSummary) {\n    var sample;\n    sample = data[0];\n    if ('source_id' in sample && 'source_start' in sample && 'source_end' && 'target_id' in sample && 'target_start' in sample && 'target_end' in sample) {\n        data = data.map(function(datum) {\n            var elts;\n            elts = [datum.source_id, datum.source_start, datum.source_end, datum.target_id, datum.target_start, datum.target_end];\n            if (datum.value != null) {\n                elts.push(datum.value);\n            }\n            return elts;\n        });\n    }\n    data = data.filter(function(datum, index) {\n        return circosJS.checkParent(datum[0], index, layoutSummary, 'source_id');\n    }).filter(function(datum, index) {\n        return circosJS.checkParent(datum[3], index, layoutSummary, 'target_id');\n    }).filter(function(datum, index) {\n        return circosJS.checkNumber({\n            source_start: datum[1],\n            source_end: datum[2],\n            target_start: datum[4],\n            target_end: datum[5],\n            value: datum[6] || 1\n        }, index);\n    }).map(function(datum) {\n        return {\n            source: {\n                id: datum[0],\n                start: Math.max(0, parseFloat(datum[1])),\n                end: Math.min(layoutSummary[datum[0]], parseFloat(datum[2]))\n            },\n            target: {\n                id: datum[3],\n                start: Math.max(0, parseFloat(datum[4])),\n                end: Math.min(layoutSummary[datum[3]], parseFloat(datum[5]))\n            },\n            value: parseFloat(datum[6]),\n            hsp: datum[7]\n        };\n    });\n    return {\n        data: data,\n        meta: {\n            min: d3.min(data, function(d) {\n                return d.value;\n            }),\n            max: d3.max(data, function(d) {\n                return d.value;\n            })\n        }\n    };\n};\n\ncircosJS.Layout = function(conf, data) {\n    var block_nb, gap, k, offset, ref, ref1, size, v;\n    if (data == null) {\n        circosJS.log(2, 'no layout data', '');\n    }\n    this.conf = circosJS.mixConf(conf, JSON.parse(JSON.stringify(this.defaultConf)));\n    this.data = data;\n    this.blocks = {};\n    this.size = 0;\n    offset = 0;\n    ref = this.data;\n    for (k in ref) {\n        v = ref[k];\n        this.blocks[v.id] = {\n            label: v.label,\n            len: v.len,\n            color: v.color,\n            offset: offset\n        };\n        v.offset = offset;\n        offset += v.len;\n    }\n    this.size = offset;\n    gap = this.conf.gap;\n    size = this.size;\n    block_nb = this.data.length;\n    ref1 = this.data;\n    for (k in ref1) {\n        v = ref1[k];\n        this.blocks[v.id].start = v.offset / size * (2 * Math.PI - block_nb * gap) + k * gap;\n        this.blocks[v.id].end = (v.offset + v.len) / size * (2 * Math.PI - block_nb * gap) + k * gap;\n        v.start = v.offset / size * (2 * Math.PI - block_nb * gap) + k * gap;\n        v.end = (v.offset + v.len) / size * (2 * Math.PI - block_nb * gap) + k * gap;\n    }\n    this.getAngle = function(blockId, unit) {\n        var block;\n        block = this.blocks[blockId].start / this._size;\n        if (unit === 'deg') {\n            return block * 360;\n        } else if (unit === 'rad') {\n            return block * 2 * Math.PI;\n        } else {\n            return null;\n        }\n    };\n    this.summary = function() {\n        var d, l, layoutSummary, len, ref2;\n        layoutSummary = {};\n        ref2 = this._data;\n        for (l = 0, len = ref2.length; l < len; l++) {\n            d = ref2[l];\n            layoutSummary[d.id] = d.len;\n        }\n        return layoutSummary;\n    };\n    return this;\n};\n\ncircosJS.Core.prototype.chord = function(id, conf, data) {\n    var track;\n    track = new circosJS.Chord();\n    track.build(this, conf, data);\n    this.tracks.chords[id] = track;\n    return this;\n};\n\ncircosJS.Chord = function() {\n    circosJS.Track.call(this);\n    this.parseData = circosJS.parseChordData;\n    this.applyRules = function(rules, data) {\n        var datum, l, len, results, rule;\n        rules = rules || [];\n        results = [];\n        for (l = 0, len = data.length; l < len; l++) {\n            datum = data[l];\n            results.push((function() {\n                var len1, m, results1;\n                results1 = [];\n                for (m = 0, len1 = rules.length; m < len1; m++) {\n                    rule = rules[m];\n                    if (rule.condition(datum)) {\n                        results1.push(datum[rule.parameter] = rule.value);\n                    } else {\n                        results1.push(void 0);\n                    }\n                }\n                return results1;\n            })());\n        }\n        return results;\n    };\n    this.getSource = (function(_this) {\n        return function(d, layout) {\n            var block, endAngle, result, startAngle;\n            d = d.source;\n            block = layout.blocks[d.id];\n            startAngle = block.start + d.start / block.len * (block.end - block.start);\n            endAngle = block.start + d.end / block.len * (block.end - block.start);\n            result = {\n                radius: layout.conf.innerRadius,\n                startAngle: startAngle,\n                endAngle: endAngle\n            };\n            return result;\n        };\n    })(this);\n    this.getTarget = (function(_this) {\n        return function(d, layout) {\n            var block, endAngle, result, startAngle;\n            d = d.target;\n            block = layout.blocks[d.id];\n            startAngle = block.start + d.start / block.len * (block.end - block.start);\n            endAngle = block.start + d.end / block.len * (block.end - block.start);\n            result = {\n                radius: layout.conf.innerRadius,\n                startAngle: startAngle,\n                endAngle: endAngle\n            };\n            return result;\n        };\n    })(this);\n    this.dimChords = function (parentElement, d, conf, index) {\n        parentElement.selectAll('path').style('opacity', function (p, i) {\n            if (d === p) {\n                return 1;\n            }\n            return 0;\n        });\n    };\n    this.resetChords = function (parentElement,conf) {\n        parentElement.selectAll('path').style('opacity',conf.opacity);\n    };\n    this.renderChords = function(parentElement, name, conf, data, layout, ratio, getSource, getTarget) {\n        var link, track;\n        track = parentElement.append('g').attr('class', conf.colorPalette);\n        link = track\n            .selectAll('.chord')\n            .data(data)\n            .enter()\n            .append('path')\n            .attr('class', 'chord')\n            .attr('d', ribbonV3()\n                .source(function(d) {\n                    return getSource(d, layout);\n                })\n                .target(function(d) {\n                    return getTarget(d, layout);\n                })\n            )\n            .attr('opacity', function(_d) {\n                return conf.opacity;\n            })\n            .attr('id', function(d) {\n                return d.source.id + '_' + d.target.id;\n            })\n            .on('mouseover', (function(_this) {\n                return function(event, d) {\n                    _this.dimChords(track, d, conf);\n                    return _this.dispatch.call('mouseover', event, d);\n                };\n            })(this))\n            .on('mouseout', (function(_this) {\n                return function(event, d) {\n                    _this.resetChords(track, conf);\n                    return _this.dispatch.call('mouseout', event, d);\n                };\n            })(this));\n\n        if (conf.usePalette) {\n            link.attr('class', function(d) {\n                return 'q' + ratio(d.value, conf.cmin, conf.cmax, conf.colorPaletteSize, conf.colorPaletteReverse, conf.logScale) + '-' + conf.colorPaletteSize;\n            });\n        } else {\n            link.attr('fill', function(d) {\n                return d.color || conf.color;\n            });\n        }\n        return link;\n    };\n    this.render = (function(_this) {\n        return function(instance, parentElement, name) {\n            var selection, track;\n            parentElement.select('.' + name).remove();\n            track = parentElement.append('g').attr('class', name).attr('z-index', _this.conf.zIndex);\n            selection = _this.renderChords(track, name, _this.conf, _this.data, instance._layout, _this.ratio, _this.getSource, _this.getTarget);\n            if (_this.conf.tooltipContent != null) {\n                return circosJS.registerTooltip(instance, _this, selection, _this.conf);\n            }\n        };\n    })(this);\n    return this;\n};\n\ncircosJS.Track = function() {\n    this.build = function(instance, conf, data) {\n        this.dispatch = d3.dispatch('mouseover', 'mouseout');\n        this.loadData(data, instance);\n        this.conf = this.processConf(conf, this.defaultConf, this.meta, instance, this);\n        return this.applyRules(conf.rules, this.data);\n    };\n    this.loadData = function(data, instance) {\n        var d, l, layoutSummary, len, ref, result;\n        layoutSummary = {};\n        ref = instance._layout.data;\n        for (l = 0, len = ref.length; l < len; l++) {\n            d = ref[l];\n            layoutSummary[d.id] = d.len;\n        }\n        result = this.parseData(data, layoutSummary);\n        this.data = result.data;\n        return this.meta = result.meta;\n    };\n    this.processConf = function(conf, defaultConf, meta, instance, utils) {\n        var smartBorders;\n        conf = circosJS.mixConf(conf, Object.assign({}, defaultConf));\n        conf = utils.computeMinMax(conf, meta);\n        if (conf.innerRadius === 0 && conf.outerRadius === 0) {\n            smartBorders = instance.smartBorders();\n            conf.innerRadius = smartBorders['in'];\n            conf.outerRadius = smartBorders.out;\n        }\n        return conf;\n    };\n    this.applyRules = function(rules, data) {\n        var datum, i, k, results, rule, v;\n        rules = rules || [];\n        results = [];\n        for (k in data) {\n            v = data[k];\n            results.push((function() {\n                var ref, results1;\n                ref = v.values;\n                results1 = [];\n                for (i in ref) {\n                    datum = ref[i];\n                    results1.push((function() {\n                        var l, len, results2;\n                        results2 = [];\n                        for (l = 0, len = rules.length; l < len; l++) {\n                            rule = rules[l];\n                            if (rule.condition(v.key, datum, i)) {\n                                results2.push(datum[rule.parameter] = rule.value);\n                            } else {\n                                results2.push(void 0);\n                            }\n                        }\n                        return results2;\n                    })());\n                }\n                return results1;\n            })());\n        }\n        return results;\n    };\n    this.computeMinMax = function(conf, meta) {\n        conf.cmin = conf.min === 'smart' ? meta.min : conf.min;\n        conf.cmax = conf.max === 'smart' ? meta.max : conf.max;\n        return conf;\n    };\n    this.ratio = function(value, min, max, scope, reverse, logScale) {\n        var fraction, scaleLogBase, x;\n        scaleLogBase = logScale ? 2.3 : 1;\n        if (min === max || (value === min && !reverse) || (value === max && reverse)) {\n            return 0;\n        }\n        if (value === max || (value === min && reverse)) {\n            return scope - 1;\n        }\n        fraction = (value - min) / (max - min);\n        x = Math.exp(1 / scaleLogBase * Math.log(fraction));\n        if (reverse) {\n            x = 1 - x;\n        }\n        return Math.floor(scope * x);\n    };\n    this.render = (function(_this) {\n        return function(instance, parentElement, name) {\n            var datumContainer, ref, selection, track;\n            parentElement.select('.' + name).remove();\n            track = parentElement.append('g').attr('class', name).attr('z-index', _this.conf.zIndex);\n            datumContainer = _this.renderDatumContainer(instance, track, name, _this.data, _this.conf);\n            if ((ref = _this.conf.axes) != null ? ref.display : void 0) {\n                _this.renderAxes(datumContainer, _this.conf, instance._layout, _this.data);\n            }\n            selection = _this.renderDatum(datumContainer, _this.conf, instance._layout, _this);\n            if (_this.conf.tooltipContent != null) {\n                circosJS.registerTooltip(instance, _this, selection, _this.conf);\n            }\n            selection.on('mouseover', function(d, i, j) {\n                return _this.dispatch.mouseover(d, i, j);\n            });\n            return selection.on('mouseout', function(d, i, j) {\n                return _this.dispatch.mouseout(d, i, j);\n            });\n        };\n    })(this);\n    this.renderBlock = function(parentElement, data, layout, conf) {\n        var block, scope;\n        scope = conf.outerRadius - conf.innerRadius;\n        block = parentElement.selectAll('.block').data(data).enter().append('g').attr('class', 'block').attr('transform', function(d) {\n            return 'rotate(' + layout.blocks[d.key].start * 360 / (2 * Math.PI) + ')';\n        });\n        if (conf.backgrounds) {\n            block.selectAll('.background').data(conf.backgrounds).enter().append('path').attr('class', 'background').attr('fill', function(background) {\n                return background.color;\n            }).attr('opacity', function(background) {\n                return background.opacity || 1;\n            }).attr('d', d3.arc().innerRadius(function(background) {\n                if (conf.direction === 'in') {\n                    return conf.outerRadius - scope * background.start;\n                } else {\n                    return conf.innerRadius + scope * background.start;\n                }\n            }).outerRadius(function(background) {\n                if (conf.direction === 'in') {\n                    return conf.outerRadius - scope * background.end;\n                } else {\n                    return conf.innerRadius + scope * background.end;\n                }\n            }).startAngle(function(d, i, j) {\n                return 0;\n            }).endAngle(function(d, i, j) {\n                return layout.blocks[data[j].key].end - layout.blocks[data[j].key].start;\n            }));\n        }\n        return block;\n    };\n    this.renderAxes = function(parentElement, conf, layout, data) {\n        var axes, axis, x;\n        if (conf.axes.minor.spacingType === 'pixel') {\n            axes = (function() {\n                var l, ref, ref1, ref2, results;\n                results = [];\n                for (x = l = ref = conf.innerRadius, ref1 = conf.outerRadius, ref2 = conf.axes.minor.spacing; ref2 > 0 ? l <= ref1 : l >= ref1; x = l += ref2) {\n                    results.push(x);\n                }\n                return results;\n            })();\n        }\n        axis = d3.arc().innerRadius(function(d) {\n            return d;\n        }).outerRadius(function(d) {\n            return d;\n        }).startAngle(0).endAngle(function(d, i, j) {\n            var block;\n            block = layout.blocks[data[j].key];\n            return block.end - block.start;\n        });\n        console.log('axis', axis);\n        return parentElement.selectAll('.axis').data(axes).enter().append('path').attr('opacity', conf.opacity).attr('class', 'axis').attr('d', axis).attr('stroke-width', function(d, i) {\n            if (i % conf.axes.major.spacing === 0) {\n                return conf.axes.major.thickness;\n            } else {\n                return conf.axes.minor.thickness;\n            }\n        }).attr('stroke', function(d, i) {\n            if (i % conf.axes.major.spacing === 0) {\n                return conf.axes.major.color;\n            } else {\n                return conf.axes.minor.color;\n            }\n        });\n    };\n    this.theta = function(position, block) {\n        return position / block.len * (block.end - block.start);\n    };\n    this.x = (function(_this) {\n        return function(d, layout, conf) {\n            var angle, height, r;\n            height = _this.ratio(d.value, conf.cmin, conf.cmax, conf.outerRadius - conf.innerRadius, false, conf.logscale);\n            if (conf.direction === 'in') {\n                r = conf.outerRadius - height;\n            } else {\n                r = conf.innerRadius + height;\n            }\n            angle = _this.theta(d.position, layout.blocks[d.block_id]) - Math.PI / 2;\n            return r * Math.cos(angle);\n        };\n    })(this);\n    this.y = (function(_this) {\n        return function(d, layout, conf) {\n            var angle, height, r;\n            height = _this.ratio(d.value, conf.cmin, conf.cmax, conf.outerRadius - conf.innerRadius, false, conf.logscale);\n            if (conf.direction === 'in') {\n                r = conf.outerRadius - height;\n            } else {\n                r = conf.innerRadius + height;\n            }\n            angle = _this.theta(d.position, layout.blocks[d.block_id]) - Math.PI / 2;\n            return r * Math.sin(angle);\n        };\n    })(this);\n    this.ratio = function(value, min, max, scope, reverse, logScale) {\n        var fraction, scaleLogBase, x;\n        scaleLogBase = logScale ? 2.3 : 1;\n        if (min === max || (value === min && !reverse) || (value === max && reverse)) {\n            return 0;\n        }\n        if (value === max || (value === min && reverse)) {\n            return scope - 1;\n        }\n        fraction = (value - min) / (max - min);\n        x = Math.exp(1 / scaleLogBase * Math.log(fraction));\n        if (reverse) {\n            x = 1 - x;\n        }\n        return Math.floor(scope * x);\n    };\n    return this;\n};\n\ncircosJS.renderLayout = function(d3, parentElement, instance) {\n    var block, conf, entry, layout;\n    conf = instance._layout.conf;\n    parentElement.select('.cs-layout').remove();\n    layout = parentElement.append('g').attr('class', 'cs-layout').attr('z-index', conf.zIndex).on('click', conf.onClick);\n    block = layout.selectAll('g').data(instance._layout.data).enter().append('g').attr('class', function(d) {\n        return d.id;\n    }).attr('opacity', conf.opacity);\n    entry = d3.arc().innerRadius(conf.innerRadius).outerRadius(conf.outerRadius).cornerRadius(conf.cornerRadius).startAngle(function(d) {\n        return d.start;\n    }).endAngle(function(d) {\n        return d.end;\n    });\n    block.append('path').attr('d', entry).attr('fill', function(d) {\n        return d.color;\n    }).attr('id', function(d) {\n        return d.id;\n    });\n    if (conf.labels.display) {\n        circosJS.renderLayoutLabels(conf, d3, block);\n    }\n    if (conf.ticks.display) {\n        return circosJS.renderLayoutTicks(conf, layout, d3, instance);\n    }\n};\n\ncircosJS.renderLayoutLabels = function(conf, d3, block) {\n    var label, labelArc, r;\n    r = conf.innerRadius + conf.labels.radialOffset;\n    labelArc = d3.arc().innerRadius(r).outerRadius(r).startAngle(function(d, i) {\n        return d.start;\n    }).endAngle(function(d, i) {\n        return d.end;\n    });\n    block.append('path').attr('fill', 'none').attr('stroke', 'none').attr('d', labelArc).attr('id', function(d) {\n        return 'arc-label' + d.id;\n    });\n    label = block.append('text').attr('font-size', conf.labels.size).attr('text-anchor', 'middle');\n    return label.append('textPath').attr('startOffset', '25%').attr('xlink:href', function(d) {\n        return '#arc-label' + d.id;\n    }).style('fill', conf.labels.color).text(function(d) {\n        var arc_len = d.end - d.start;\n        return d.label.slice(0, Math.floor(21 * arc_len)) + '..';\n    });\n};\n\ncircosJS.renderLayoutTicks = function(conf, layout, d3, instance) {\n    var blockTicks, displayLabel, ticks;\n    blockTicks = function(d) {\n        var k,space;\n        k = (d.end - d.start) / d.len;\n        if ((d.end - d.start) > 1.57) {\n            space = 8;\n        } else if ((d.end - d.start) > 0.785) {\n            space = 4;\n        } else if ((d.end - d.start) > 0.3925) {\n            space = 2;\n        } else if ((d.end - d.start) > 0) {\n            space = 0;\n        }\n        var arr = [];\n        var item = {angle: 0 * k + d.start, label: 0};\n        arr.push(item);\n        var temp_scale = d3.scaleLinear()\n            .domain([1, d.len])\n            .range([d.start, d.end]);\n        var len = temp_scale.ticks(space).length;\n        temp_scale.ticks(space).map(function (v,i) {\n            var init = v * k + d.start;\n            var final = d.len * k +d.start;\n            if ((final - init) > 0.5) {\n            }\n            var item = {\n                angle: v * k + d.start,\n                label: v / conf.ticks.labelDenominator + conf.ticks.labelSuffix\n            };\n            arr.push(item);\n        });\n        arr.splice(len, 1);\n        var item = {\n            angle: (d.len * k + d.start) - 0.006,\n            label: d.len / conf.ticks.labelDenominator + conf.ticks.labelSuffix\n        };\n        arr.push(item);\n        return arr;\n    };\n    displayLabel = function(v, i) {\n        if (conf.ticks.labels === false) {\n            return null;\n        } else if (conf.ticks.labelDisplay0 === false && i === 0) {\n            return null;\n        } else if (i % conf.ticks.labelSpacing) {\n            return null;\n        } else if (i === 0) {\n            return v / conf.ticks.labelDenominator; // added support for 0 without suffix.\n        }\n        else {\n            return v / conf.ticks.labelDenominator + conf.ticks.labelSuffix;\n        }\n    };\n    ticks = layout.append('g').selectAll('g').data(instance._layout.data).enter().append('g').selectAll('g').data(blockTicks).enter().append('g').attr('transform', function(d) {\n        return 'rotate(' + (d.angle * 180 / Math.PI - 90) + ')' + 'translate(' + conf.outerRadius + ',0)';\n    });\n    ticks.append('line').attr('x1', 0).attr('y1', 1).attr('x2', function(d, i) {\n        return conf.ticks.size.major;\n    }).attr('y2', 1).style('stroke', conf.ticks.color);\n    return ticks.append('text').attr('x', 8).attr('dy', '.35em').attr('transform', function(d) {\n        if (d.angle > Math.PI) {\n            return 'rotate(180)translate(-16)';\n        } else {\n            return null;\n        }\n    }).attr('text-anchor', function(d) {\n        if (d.angle > Math.PI) {\n            return 'end';\n        } else {\n            return null;\n        }\n    }).attr('font-size', conf.ticks.labelSize).style('fill', conf.ticks.labelColor).text(function(d) {\n        return d.label;\n    });\n};\n\ncircosJS.Core.prototype.render = function(ids, removeTracks) {\n    var name, ref, ref1, renderAll, svg, track, trackStore, trackType, tracks, translated;\n    if (typeof ids === 'undefined') {\n        renderAll = true;\n        ids = [];\n    }\n    if (removeTracks) {\n        ref = this.tracks;\n        for (trackType in ref) {\n            trackStore = ref[trackType];\n            for (name in trackStore) {\n                track = trackStore[name];\n                svg.select('.' + name).remove();\n            }\n        }\n    }\n    svg = d3.select(this.conf.container);\n    translated = svg.select('.all');\n    if (translated.empty()) {\n        translated = svg.append('svg')\n              .attr('width', this.conf.width)\n              .attr('height', this.conf.height)\n\n        translated = translated.append('g').attr('class', 'all').attr('transform', 'translate(' + parseInt(this.conf.width / 2) + ',' + parseInt(this.conf.height / 2) + ')');\n    }\n    ref1 = this.tracks;\n    for (trackType in ref1) {\n        trackStore = ref1[trackType];\n        for (name in trackStore) {\n            track = trackStore[name];\n            if (renderAll || indexOf.call(ids, name) >= 0) {\n                track.render(this, translated, name);\n            }\n        }\n    }\n    if (renderAll || indexOf.call(ids, 'layout') >= 0) {\n        circosJS.renderLayout(d3, translated, this);\n    }\n\n    // tracks = svg.selectAll('.all > g').nodes();\n    // svg.selectAll('.all > g').remove();\n\n    // tracks.sort(function(a, b) {\n    //     if (parseInt(a.getAttribute('z-index')) < parseInt(b.getAttribute('z-index'))) {\n    //         return -1;\n    //     } else if (parseInt(a.getAttribute('z-index')) > parseInt(b.getAttribute('z-index'))) {\n    //         return 1;\n    //     } else {\n    //         return 0;\n    //     }\n    // });\n\n    // svg.select('.all').selectAll('g').data(tracks).enter().append(function(d) {\n    //     return d;\n    // });\n    // return this;\n};\n\ncircosJS.Core.prototype.defaultConf = {\n    width: 700,\n    height: 700,\n    container: 'circos',\n    defaultTrackWidth: 10\n};\n\ncircosJS.Layout.prototype.defaultConf = {\n    innerRadius: 250,\n    outerRadius: 300,\n    cornerRadius: 5,\n    gap: 0.04,\n    opacity: 1,\n    labels: {\n        position: 'center',\n        display: true,\n        size: 14,\n        color: '#000',\n        radialOffset: 20\n    },\n    ticks: {\n        display: true,\n        color: 'grey',\n        spacing: 10000000,\n        labels: true,\n        labelSpacing: 10,\n        labelSuffix: 'Mb',\n        labelDenominator: 1000000,\n        labelDisplay0: true,\n        labelSize: 10,\n        labelColor: '#000',\n        labelFont: 'default',\n        majorSpacing: 5,\n        size: {\n            minor: 2,\n            major: 5\n        }\n    },\n    onClick: null,\n    onMouseOver: null,\n    zIndex: 100\n};\n\ncircosJS.axes = {\n    display: false,\n    minor: {\n        spacing: 5,\n        spacingType: 'pixel',\n        color: '#d3d3d3',\n        thickness: 2\n    },\n    major: {\n        spacing: 5,\n        color: '#000000',\n        thickness: 2\n    }\n};\n\ncircosJS.Chord.prototype.defaultConf = {\n    colorPaletteSize: 9,\n    colorPalette: 'PuBuGn',\n    usePalette: true,\n    colorPaletteReverse: false,\n    color: '#fd6a62',\n    opacity: 0.7,\n    min: 'smart',\n    max: 'smart',\n    logScale: false,\n    rules: [],\n    backgrounds: [],\n    zIndex: 1,\n    tooltipContent: null\n};\n\ncircosJS.registerTooltip = function(instance, track, element, trackParams) {\n    track.tip = d3.tip().direction('s').offset([20, 0]).html(trackParams.tooltipContent);\n    element.call(track.tip);\n    track.dispatch.on('mouseover', function(d, i, j) {\n        return track.tip.attr('class', 'd3-tip appear').show(d);\n    });\n    return track.dispatch.on('mouseout', function(d, i, j) {\n        track.tip.attr('class', 'd3-tip').show(d);\n        return track.tip.hide();\n    });\n};\n","/*! jQuery UI - v1.13.3 - 2024-04-26\n* https://jqueryui.com\n* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js\n* Copyright OpenJS Foundation and other contributors; Licensed MIT */\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.ui = $.ui || {};\n\nvar version = $.ui.version = \"1.13.3\";\n\n\n/*!\n * jQuery UI Widget 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: https://api.jqueryui.com/jQuery.widget/\n//>>demos: https://jqueryui.com/widget/\n\n\nvar widgetUuid = 0;\nvar widgetHasOwnProperty = Array.prototype.hasOwnProperty;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\n\t\t\t// Only trigger remove when necessary to save time\n\t\t\tevents = $._data( elem, \"events\" );\n\t\t\tif ( events && events.remove ) {\n\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( Array.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this || !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof instance[ options ] !== \"function\" ||\n\t\t\t\t\t\toptions.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction bindRemoveEvent() {\n\t\t\tvar nodesToBind = [];\n\n\t\t\toptions.element.each( function( _, element ) {\n\t\t\t\tvar isTracked = $.map( that.classesElementLookup, function( elements ) {\n\t\t\t\t\treturn elements;\n\t\t\t\t} )\n\t\t\t\t\t.some( function( elements ) {\n\t\t\t\t\t\treturn elements.is( element );\n\t\t\t\t\t} );\n\n\t\t\t\tif ( !isTracked ) {\n\t\t\t\t\tnodesToBind.push( element );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthat._on( $( nodesToBind ), {\n\t\t\t\tremove: \"_untrackClassesElement\"\n\t\t\t} );\n\t\t}\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tbindRemoveEvent();\n\t\t\t\t\tcurrent = $( $.uniqueSort( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\n\t\tthis._off( $( event.target ) );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( typeof callback === \"function\" &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t} else if ( options === true ) {\n\t\t\toptions = {};\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nvar widget = $.widget;\n\n\n/*!\n * jQuery UI Position 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n * https://api.jqueryui.com/position/\n */\n\n//>>label: Position\n//>>group: Core\n//>>description: Positions elements relative to other elements.\n//>>docs: https://api.jqueryui.com/position/\n//>>demos: https://jqueryui.com/position/\n\n\n( function() {\nvar cachedScrollbarWidth,\n\tmax = Math.max,\n\tabs = Math.abs,\n\trhorizontal = /left|center|right/,\n\trvertical = /top|center|bottom/,\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\trposition = /^\\w+/,\n\trpercent = /%$/,\n\t_position = $.fn.position;\n\nfunction getOffsets( offsets, width, height ) {\n\treturn [\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\n\t];\n}\n\nfunction parseCss( element, property ) {\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction getDimensions( elem ) {\n\tvar raw = elem[ 0 ];\n\tif ( raw.nodeType === 9 ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: 0, left: 0 }\n\t\t};\n\t}\n\tif ( isWindow( raw ) ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t};\n\t}\n\tif ( raw.preventDefault ) {\n\t\treturn {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t};\n\t}\n\treturn {\n\t\twidth: elem.outerWidth(),\n\t\theight: elem.outerHeight(),\n\t\toffset: elem.offset()\n\t};\n}\n\n$.position = {\n\tscrollbarWidth: function() {\n\t\tif ( cachedScrollbarWidth !== undefined ) {\n\t\t\treturn cachedScrollbarWidth;\n\t\t}\n\t\tvar w1, w2,\n\t\t\tdiv = $( \"<div style=\" +\n\t\t\t\t\"'display:block;position:absolute;width:200px;height:200px;overflow:hidden;'>\" +\n\t\t\t\t\"<div style='height:300px;width:auto;'></div></div>\" ),\n\t\t\tinnerDiv = div.children()[ 0 ];\n\n\t\t$( \"body\" ).append( div );\n\t\tw1 = innerDiv.offsetWidth;\n\t\tdiv.css( \"overflow\", \"scroll\" );\n\n\t\tw2 = innerDiv.offsetWidth;\n\n\t\tif ( w1 === w2 ) {\n\t\t\tw2 = div[ 0 ].clientWidth;\n\t\t}\n\n\t\tdiv.remove();\n\n\t\treturn ( cachedScrollbarWidth = w1 - w2 );\n\t},\n\tgetScrollInfo: function( within ) {\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-x\" ),\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-y\" ),\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[ 0 ].scrollWidth ),\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[ 0 ].scrollHeight );\n\t\treturn {\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t};\n\t},\n\tgetWithinInfo: function( element ) {\n\t\tvar withinElement = $( element || window ),\n\t\t\tisElemWindow = isWindow( withinElement[ 0 ] ),\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,\n\t\t\thasOffset = !isElemWindow && !isDocument;\n\t\treturn {\n\t\t\telement: withinElement,\n\t\t\tisWindow: isElemWindow,\n\t\t\tisDocument: isDocument,\n\t\t\toffset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },\n\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\tscrollTop: withinElement.scrollTop(),\n\t\t\twidth: withinElement.outerWidth(),\n\t\t\theight: withinElement.outerHeight()\n\t\t};\n\t}\n};\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// Make a copy, we don't want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\n\n\t\t// Make sure string options are treated as CSS selectors\n\t\ttarget = typeof options.of === \"string\" ?\n\t\t\t$( document ).find( options.of ) :\n\t\t\t$( options.of ),\n\n\t\twithin = $.position.getWithinInfo( options.within ),\n\t\tscrollInfo = $.position.getScrollInfo( within ),\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\n\t\toffsets = {};\n\n\tdimensions = getDimensions( target );\n\tif ( target[ 0 ].preventDefault ) {\n\n\t\t// Force left top to allow flipping\n\t\toptions.at = \"left top\";\n\t}\n\ttargetWidth = dimensions.width;\n\ttargetHeight = dimensions.height;\n\ttargetOffset = dimensions.offset;\n\n\t// Clone to reuse original targetOffset later\n\tbasePosition = $.extend( {}, targetOffset );\n\n\t// Force my and at to have valid horizontal and vertical positions\n\t// if a value is missing or invalid, it will be converted to center\n\t$.each( [ \"my\", \"at\" ], function() {\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\n\t\t\thorizontalOffset,\n\t\t\tverticalOffset;\n\n\t\tif ( pos.length === 1 ) {\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\n\t\t\t\tpos.concat( [ \"center\" ] ) :\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\n\t\t\t\t\t[ \"center\", \"center\" ];\n\t\t}\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\n\n\t\t// Calculate offsets\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\n\t\toffsets[ this ] = [\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\n\t\t];\n\n\t\t// Reduce to just the positions without the offsets\n\t\toptions[ this ] = [\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\n\t\t];\n\t} );\n\n\t// Normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\tif ( options.at[ 0 ] === \"right\" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[ 0 ] === \"center\" ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[ 1 ] === \"bottom\" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[ 1 ] === \"center\" ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\n\tbasePosition.left += atOffset[ 0 ];\n\tbasePosition.top += atOffset[ 1 ];\n\n\treturn this.each( function() {\n\t\tvar collisionPosition, using,\n\t\t\telem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) +\n\t\t\t\tscrollInfo.width,\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) +\n\t\t\t\tscrollInfo.height,\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\n\n\t\tif ( options.my[ 0 ] === \"right\" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\tposition.left += myOffset[ 0 ];\n\t\tposition.top += myOffset[ 1 ];\n\n\t\tcollisionPosition = {\n\t\t\tmarginLeft: marginLeft,\n\t\t\tmarginTop: marginTop\n\t\t};\n\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at,\n\t\t\t\t\twithin: within,\n\t\t\t\t\telem: elem\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tif ( options.using ) {\n\n\t\t\t// Adds feedback as second argument to using callback, if present\n\t\t\tusing = function( props ) {\n\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\tright = left + targetWidth - elemWidth,\n\t\t\t\t\ttop = targetOffset.top - position.top,\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\n\t\t\t\t\tfeedback = {\n\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\n\t\t\t\t\t};\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\n\t\t\t\t\tfeedback.horizontal = \"center\";\n\t\t\t\t}\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\n\t\t\t\t\tfeedback.vertical = \"middle\";\n\t\t\t\t}\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\n\t\t\t\t\tfeedback.important = \"horizontal\";\n\t\t\t\t} else {\n\t\t\t\t\tfeedback.important = \"vertical\";\n\t\t\t\t}\n\t\t\t\toptions.using.call( this, props, feedback );\n\t\t\t};\n\t\t}\n\n\t\telem.offset( $.extend( position, { using: using } ) );\n\t} );\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\touterWidth = within.width,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\tnewOverRight;\n\n\t\t\t// Element is wider than within\n\t\t\tif ( data.collisionWidth > outerWidth ) {\n\n\t\t\t\t// Element is initially over the left side of within\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.left += overLeft - newOverRight;\n\n\t\t\t\t// Element is initially over right side of within\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\n\t\t\t\t\tposition.left = withinOffset;\n\n\t\t\t\t// Element is initially over both left and right sides of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overLeft > overRight ) {\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far left -> align with left edge\n\t\t\t} else if ( overLeft > 0 ) {\n\t\t\t\tposition.left += overLeft;\n\n\t\t\t// Too far right -> align with right edge\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tposition.left -= overRight;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\touterHeight = data.within.height,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = withinOffset - collisionPosTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\tnewOverBottom;\n\n\t\t\t// Element is taller than within\n\t\t\tif ( data.collisionHeight > outerHeight ) {\n\n\t\t\t\t// Element is initially over the top of within\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.top += overTop - newOverBottom;\n\n\t\t\t\t// Element is initially over bottom of within\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\n\t\t\t\t\tposition.top = withinOffset;\n\n\t\t\t\t// Element is initially over both top and bottom of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overTop > overBottom ) {\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far up -> align with top\n\t\t\t} else if ( overTop > 0 ) {\n\t\t\t\tposition.top += overTop;\n\n\t\t\t// Too far down -> align with bottom edge\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tposition.top -= overBottom;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\n\t\t\t}\n\t\t}\n\t},\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\touterWidth = within.width,\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\n\t\t\t\t\t\t-data.targetWidth :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 0 ],\n\t\t\t\tnewOverRight,\n\t\t\t\tnewOverLeft;\n\n\t\t\tif ( overLeft < 0 ) {\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -\n\t\t\t\t\touterWidth - withinOffset;\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +\n\t\t\t\t\tatOffset + offset - offsetLeft;\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\n\t\t\t\touterHeight = within.height,\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = collisionPosTop - offsetTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\n\t\t\t\tmyOffset = top ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\t-data.targetHeight :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 1 ],\n\t\t\t\tnewOverTop,\n\t\t\t\tnewOverBottom;\n\t\t\tif ( overTop < 0 ) {\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -\n\t\t\t\t\touterHeight - withinOffset;\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +\n\t\t\t\t\toffset - offsetTop;\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tflipfit: {\n\t\tleft: function() {\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\n\t\t},\n\t\ttop: function() {\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\n\t\t}\n\t}\n};\n\n} )();\n\nvar position = $.ui.position;\n\n\n/*!\n * jQuery UI :data 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :data Selector\n//>>group: Core\n//>>description: Selects elements which have data stored under the specified key.\n//>>docs: https://api.jqueryui.com/data-selector/\n\n\nvar data = $.extend( $.expr.pseudos, {\n\tdata: $.expr.createPseudo ?\n\t\t$.expr.createPseudo( function( dataName ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn !!$.data( elem, dataName );\n\t\t\t};\n\t\t} ) :\n\n\t\t// Support: jQuery <1.8\n\t\tfunction( elem, i, match ) {\n\t\t\treturn !!$.data( elem, match[ 3 ] );\n\t\t}\n} );\n\n/*!\n * jQuery UI Disable Selection 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: disableSelection\n//>>group: Core\n//>>description: Disable selection of text content within the set of matched elements.\n//>>docs: https://api.jqueryui.com/disableSelection/\n\n// This file is deprecated\n\nvar disableSelection = $.fn.extend( {\n\tdisableSelection: ( function() {\n\t\tvar eventType = \"onselectstart\" in document.createElement( \"div\" ) ?\n\t\t\t\"selectstart\" :\n\t\t\t\"mousedown\";\n\n\t\treturn function() {\n\t\t\treturn this.on( eventType + \".ui-disableSelection\", function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tenableSelection: function() {\n\t\treturn this.off( \".ui-disableSelection\" );\n\t}\n} );\n\n\n\n// Create a local jQuery because jQuery Color relies on it and the\n// global may not exist with AMD and a custom build (#10199).\n// This module is a noop if used as a regular AMD module.\n// eslint-disable-next-line no-unused-vars\nvar jQuery = $;\n\n\n/*!\n * jQuery Color Animations v2.2.0\n * https://github.com/jquery/jquery-color\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n * Date: Sun May 10 09:02:36 2020 +0200\n */\n\n\n\n\tvar stepHooks = \"backgroundColor borderBottomColor borderLeftColor borderRightColor \" +\n\t\t\"borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor\",\n\n\tclass2type = {},\n\ttoString = class2type.toString,\n\n\t// plusequals test for += 100 -= 100\n\trplusequals = /^([\\-+])=\\s*(\\d+\\.?\\d*)/,\n\n\t// a set of RE's that can match strings and generate color tuples.\n\tstringParsers = [ {\n\t\t\tre: /rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ],\n\t\t\t\t\texecResult[ 3 ],\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ] * 2.55,\n\t\t\t\t\texecResult[ 2 ] * 2.55,\n\t\t\t\t\texecResult[ 3 ] * 2.55,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// this regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ], 16 ),\n\t\t\t\t\texecResult[ 4 ] ?\n\t\t\t\t\t\t( parseInt( execResult[ 4 ], 16 ) / 255 ).toFixed( 2 ) :\n\t\t\t\t\t\t1\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// this regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ] + execResult[ 3 ], 16 ),\n\t\t\t\t\texecResult[ 4 ] ?\n\t\t\t\t\t\t( parseInt( execResult[ 4 ] + execResult[ 4 ], 16 ) / 255 )\n\t\t\t\t\t\t\t.toFixed( 2 ) :\n\t\t\t\t\t\t1\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tspace: \"hsla\",\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ] / 100,\n\t\t\t\t\texecResult[ 3 ] / 100,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t} ],\n\n\t// jQuery.Color( )\n\tcolor = jQuery.Color = function( color, green, blue, alpha ) {\n\t\treturn new jQuery.Color.fn.parse( color, green, blue, alpha );\n\t},\n\tspaces = {\n\t\trgba: {\n\t\t\tprops: {\n\t\t\t\tred: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tgreen: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tblue: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\thsla: {\n\t\t\tprops: {\n\t\t\t\thue: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"degrees\"\n\t\t\t\t},\n\t\t\t\tsaturation: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t},\n\t\t\t\tlightness: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tpropTypes = {\n\t\t\"byte\": {\n\t\t\tfloor: true,\n\t\t\tmax: 255\n\t\t},\n\t\t\"percent\": {\n\t\t\tmax: 1\n\t\t},\n\t\t\"degrees\": {\n\t\t\tmod: 360,\n\t\t\tfloor: true\n\t\t}\n\t},\n\tsupport = color.support = {},\n\n\t// element for support tests\n\tsupportElem = jQuery( \"<p>\" )[ 0 ],\n\n\t// colors = jQuery.Color.names\n\tcolors,\n\n\t// local aliases of functions called often\n\teach = jQuery.each;\n\n// determine rgba support immediately\nsupportElem.style.cssText = \"background-color:rgba(1,1,1,.5)\";\nsupport.rgba = supportElem.style.backgroundColor.indexOf( \"rgba\" ) > -1;\n\n// define cache name and alpha properties\n// for rgba and hsla spaces\neach( spaces, function( spaceName, space ) {\n\tspace.cache = \"_\" + spaceName;\n\tspace.props.alpha = {\n\t\tidx: 3,\n\t\ttype: \"percent\",\n\t\tdef: 1\n\t};\n} );\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction getType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction clamp( value, prop, allowEmpty ) {\n\tvar type = propTypes[ prop.type ] || {};\n\n\tif ( value == null ) {\n\t\treturn ( allowEmpty || !prop.def ) ? null : prop.def;\n\t}\n\n\t// ~~ is an short way of doing floor for positive numbers\n\tvalue = type.floor ? ~~value : parseFloat( value );\n\n\t// IE will pass in empty strings as value for alpha,\n\t// which will hit this case\n\tif ( isNaN( value ) ) {\n\t\treturn prop.def;\n\t}\n\n\tif ( type.mod ) {\n\n\t\t// we add mod before modding to make sure that negatives values\n\t\t// get converted properly: -10 -> 350\n\t\treturn ( value + type.mod ) % type.mod;\n\t}\n\n\t// for now all property types without mod have min and max\n\treturn Math.min( type.max, Math.max( 0, value ) );\n}\n\nfunction stringParse( string ) {\n\tvar inst = color(),\n\t\trgba = inst._rgba = [];\n\n\tstring = string.toLowerCase();\n\n\teach( stringParsers, function( _i, parser ) {\n\t\tvar parsed,\n\t\t\tmatch = parser.re.exec( string ),\n\t\t\tvalues = match && parser.parse( match ),\n\t\t\tspaceName = parser.space || \"rgba\";\n\n\t\tif ( values ) {\n\t\t\tparsed = inst[ spaceName ]( values );\n\n\t\t\t// if this was an rgba parse the assignment might happen twice\n\t\t\t// oh well....\n\t\t\tinst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];\n\t\t\trgba = inst._rgba = parsed._rgba;\n\n\t\t\t// exit each( stringParsers ) here because we matched\n\t\t\treturn false;\n\t\t}\n\t} );\n\n\t// Found a stringParser that handled it\n\tif ( rgba.length ) {\n\n\t\t// if this came from a parsed string, force \"transparent\" when alpha is 0\n\t\t// chrome, (and maybe others) return \"transparent\" as rgba(0,0,0,0)\n\t\tif ( rgba.join() === \"0,0,0,0\" ) {\n\t\t\tjQuery.extend( rgba, colors.transparent );\n\t\t}\n\t\treturn inst;\n\t}\n\n\t// named colors\n\treturn colors[ string ];\n}\n\ncolor.fn = jQuery.extend( color.prototype, {\n\tparse: function( red, green, blue, alpha ) {\n\t\tif ( red === undefined ) {\n\t\t\tthis._rgba = [ null, null, null, null ];\n\t\t\treturn this;\n\t\t}\n\t\tif ( red.jquery || red.nodeType ) {\n\t\t\tred = jQuery( red ).css( green );\n\t\t\tgreen = undefined;\n\t\t}\n\n\t\tvar inst = this,\n\t\t\ttype = getType( red ),\n\t\t\trgba = this._rgba = [];\n\n\t\t// more than 1 argument specified - assume ( red, green, blue, alpha )\n\t\tif ( green !== undefined ) {\n\t\t\tred = [ red, green, blue, alpha ];\n\t\t\ttype = \"array\";\n\t\t}\n\n\t\tif ( type === \"string\" ) {\n\t\t\treturn this.parse( stringParse( red ) || colors._default );\n\t\t}\n\n\t\tif ( type === \"array\" ) {\n\t\t\teach( spaces.rgba.props, function( _key, prop ) {\n\t\t\t\trgba[ prop.idx ] = clamp( red[ prop.idx ], prop );\n\t\t\t} );\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( type === \"object\" ) {\n\t\t\tif ( red instanceof color ) {\n\t\t\t\teach( spaces, function( _spaceName, space ) {\n\t\t\t\t\tif ( red[ space.cache ] ) {\n\t\t\t\t\t\tinst[ space.cache ] = red[ space.cache ].slice();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\teach( spaces, function( _spaceName, space ) {\n\t\t\t\t\tvar cache = space.cache;\n\t\t\t\t\teach( space.props, function( key, prop ) {\n\n\t\t\t\t\t\t// if the cache doesn't exist, and we know how to convert\n\t\t\t\t\t\tif ( !inst[ cache ] && space.to ) {\n\n\t\t\t\t\t\t\t// if the value was null, we don't need to copy it\n\t\t\t\t\t\t\t// if the key was alpha, we don't need to copy it either\n\t\t\t\t\t\t\tif ( key === \"alpha\" || red[ key ] == null ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinst[ cache ] = space.to( inst._rgba );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// this is the only case where we allow nulls for ALL properties.\n\t\t\t\t\t\t// call clamp with alwaysAllowEmpty\n\t\t\t\t\t\tinst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );\n\t\t\t\t\t} );\n\n\t\t\t\t\t// everything defined but alpha?\n\t\t\t\t\tif ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {\n\n\t\t\t\t\t\t// use the default of 1\n\t\t\t\t\t\tif ( inst[ cache ][ 3 ] == null ) {\n\t\t\t\t\t\t\tinst[ cache ][ 3 ] = 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( space.from ) {\n\t\t\t\t\t\t\tinst._rgba = space.from( inst[ cache ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t},\n\tis: function( compare ) {\n\t\tvar is = color( compare ),\n\t\t\tsame = true,\n\t\t\tinst = this;\n\n\t\teach( spaces, function( _, space ) {\n\t\t\tvar localCache,\n\t\t\t\tisCache = is[ space.cache ];\n\t\t\tif ( isCache ) {\n\t\t\t\tlocalCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];\n\t\t\t\teach( space.props, function( _, prop ) {\n\t\t\t\t\tif ( isCache[ prop.idx ] != null ) {\n\t\t\t\t\t\tsame = ( isCache[ prop.idx ] === localCache[ prop.idx ] );\n\t\t\t\t\t\treturn same;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn same;\n\t\t} );\n\t\treturn same;\n\t},\n\t_space: function() {\n\t\tvar used = [],\n\t\t\tinst = this;\n\t\teach( spaces, function( spaceName, space ) {\n\t\t\tif ( inst[ space.cache ] ) {\n\t\t\t\tused.push( spaceName );\n\t\t\t}\n\t\t} );\n\t\treturn used.pop();\n\t},\n\ttransition: function( other, distance ) {\n\t\tvar end = color( other ),\n\t\t\tspaceName = end._space(),\n\t\t\tspace = spaces[ spaceName ],\n\t\t\tstartColor = this.alpha() === 0 ? color( \"transparent\" ) : this,\n\t\t\tstart = startColor[ space.cache ] || space.to( startColor._rgba ),\n\t\t\tresult = start.slice();\n\n\t\tend = end[ space.cache ];\n\t\teach( space.props, function( _key, prop ) {\n\t\t\tvar index = prop.idx,\n\t\t\t\tstartValue = start[ index ],\n\t\t\t\tendValue = end[ index ],\n\t\t\t\ttype = propTypes[ prop.type ] || {};\n\n\t\t\t// if null, don't override start value\n\t\t\tif ( endValue === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// if null - use end\n\t\t\tif ( startValue === null ) {\n\t\t\t\tresult[ index ] = endValue;\n\t\t\t} else {\n\t\t\t\tif ( type.mod ) {\n\t\t\t\t\tif ( endValue - startValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue += type.mod;\n\t\t\t\t\t} else if ( startValue - endValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue -= type.mod;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );\n\t\t\t}\n\t\t} );\n\t\treturn this[ spaceName ]( result );\n\t},\n\tblend: function( opaque ) {\n\n\t\t// if we are already opaque - return ourself\n\t\tif ( this._rgba[ 3 ] === 1 ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar rgb = this._rgba.slice(),\n\t\t\ta = rgb.pop(),\n\t\t\tblend = color( opaque )._rgba;\n\n\t\treturn color( jQuery.map( rgb, function( v, i ) {\n\t\t\treturn ( 1 - a ) * blend[ i ] + a * v;\n\t\t} ) );\n\t},\n\ttoRgbaString: function() {\n\t\tvar prefix = \"rgba(\",\n\t\t\trgba = jQuery.map( this._rgba, function( v, i ) {\n\t\t\t\tif ( v != null ) {\n\t\t\t\t\treturn v;\n\t\t\t\t}\n\t\t\t\treturn i > 2 ? 1 : 0;\n\t\t\t} );\n\n\t\tif ( rgba[ 3 ] === 1 ) {\n\t\t\trgba.pop();\n\t\t\tprefix = \"rgb(\";\n\t\t}\n\n\t\treturn prefix + rgba.join() + \")\";\n\t},\n\ttoHslaString: function() {\n\t\tvar prefix = \"hsla(\",\n\t\t\thsla = jQuery.map( this.hsla(), function( v, i ) {\n\t\t\t\tif ( v == null ) {\n\t\t\t\t\tv = i > 2 ? 1 : 0;\n\t\t\t\t}\n\n\t\t\t\t// catch 1 and 2\n\t\t\t\tif ( i && i < 3 ) {\n\t\t\t\t\tv = Math.round( v * 100 ) + \"%\";\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t} );\n\n\t\tif ( hsla[ 3 ] === 1 ) {\n\t\t\thsla.pop();\n\t\t\tprefix = \"hsl(\";\n\t\t}\n\t\treturn prefix + hsla.join() + \")\";\n\t},\n\ttoHexString: function( includeAlpha ) {\n\t\tvar rgba = this._rgba.slice(),\n\t\t\talpha = rgba.pop();\n\n\t\tif ( includeAlpha ) {\n\t\t\trgba.push( ~~( alpha * 255 ) );\n\t\t}\n\n\t\treturn \"#\" + jQuery.map( rgba, function( v ) {\n\n\t\t\t// default to 0 when nulls exist\n\t\t\tv = ( v || 0 ).toString( 16 );\n\t\t\treturn v.length === 1 ? \"0\" + v : v;\n\t\t} ).join( \"\" );\n\t},\n\ttoString: function() {\n\t\treturn this._rgba[ 3 ] === 0 ? \"transparent\" : this.toRgbaString();\n\t}\n} );\ncolor.fn.parse.prototype = color.fn;\n\n// hsla conversions adapted from:\n// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021\n\nfunction hue2rgb( p, q, h ) {\n\th = ( h + 1 ) % 1;\n\tif ( h * 6 < 1 ) {\n\t\treturn p + ( q - p ) * h * 6;\n\t}\n\tif ( h * 2 < 1 ) {\n\t\treturn q;\n\t}\n\tif ( h * 3 < 2 ) {\n\t\treturn p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;\n\t}\n\treturn p;\n}\n\nspaces.hsla.to = function( rgba ) {\n\tif ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {\n\t\treturn [ null, null, null, rgba[ 3 ] ];\n\t}\n\tvar r = rgba[ 0 ] / 255,\n\t\tg = rgba[ 1 ] / 255,\n\t\tb = rgba[ 2 ] / 255,\n\t\ta = rgba[ 3 ],\n\t\tmax = Math.max( r, g, b ),\n\t\tmin = Math.min( r, g, b ),\n\t\tdiff = max - min,\n\t\tadd = max + min,\n\t\tl = add * 0.5,\n\t\th, s;\n\n\tif ( min === max ) {\n\t\th = 0;\n\t} else if ( r === max ) {\n\t\th = ( 60 * ( g - b ) / diff ) + 360;\n\t} else if ( g === max ) {\n\t\th = ( 60 * ( b - r ) / diff ) + 120;\n\t} else {\n\t\th = ( 60 * ( r - g ) / diff ) + 240;\n\t}\n\n\t// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%\n\t// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)\n\tif ( diff === 0 ) {\n\t\ts = 0;\n\t} else if ( l <= 0.5 ) {\n\t\ts = diff / add;\n\t} else {\n\t\ts = diff / ( 2 - add );\n\t}\n\treturn [ Math.round( h ) % 360, s, l, a == null ? 1 : a ];\n};\n\nspaces.hsla.from = function( hsla ) {\n\tif ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {\n\t\treturn [ null, null, null, hsla[ 3 ] ];\n\t}\n\tvar h = hsla[ 0 ] / 360,\n\t\ts = hsla[ 1 ],\n\t\tl = hsla[ 2 ],\n\t\ta = hsla[ 3 ],\n\t\tq = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,\n\t\tp = 2 * l - q;\n\n\treturn [\n\t\tMath.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),\n\t\ta\n\t];\n};\n\n\neach( spaces, function( spaceName, space ) {\n\tvar props = space.props,\n\t\tcache = space.cache,\n\t\tto = space.to,\n\t\tfrom = space.from;\n\n\t// makes rgba() and hsla()\n\tcolor.fn[ spaceName ] = function( value ) {\n\n\t\t// generate a cache for this space if it doesn't exist\n\t\tif ( to && !this[ cache ] ) {\n\t\t\tthis[ cache ] = to( this._rgba );\n\t\t}\n\t\tif ( value === undefined ) {\n\t\t\treturn this[ cache ].slice();\n\t\t}\n\n\t\tvar ret,\n\t\t\ttype = getType( value ),\n\t\t\tarr = ( type === \"array\" || type === \"object\" ) ? value : arguments,\n\t\t\tlocal = this[ cache ].slice();\n\n\t\teach( props, function( key, prop ) {\n\t\t\tvar val = arr[ type === \"object\" ? key : prop.idx ];\n\t\t\tif ( val == null ) {\n\t\t\t\tval = local[ prop.idx ];\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = clamp( val, prop );\n\t\t} );\n\n\t\tif ( from ) {\n\t\t\tret = color( from( local ) );\n\t\t\tret[ cache ] = local;\n\t\t\treturn ret;\n\t\t} else {\n\t\t\treturn color( local );\n\t\t}\n\t};\n\n\t// makes red() green() blue() alpha() hue() saturation() lightness()\n\teach( props, function( key, prop ) {\n\n\t\t// alpha is included in more than one space\n\t\tif ( color.fn[ key ] ) {\n\t\t\treturn;\n\t\t}\n\t\tcolor.fn[ key ] = function( value ) {\n\t\t\tvar local, cur, match, fn,\n\t\t\t\tvtype = getType( value );\n\n\t\t\tif ( key === \"alpha\" ) {\n\t\t\t\tfn = this._hsla ? \"hsla\" : \"rgba\";\n\t\t\t} else {\n\t\t\t\tfn = spaceName;\n\t\t\t}\n\t\t\tlocal = this[ fn ]();\n\t\t\tcur = local[ prop.idx ];\n\n\t\t\tif ( vtype === \"undefined\" ) {\n\t\t\t\treturn cur;\n\t\t\t}\n\n\t\t\tif ( vtype === \"function\" ) {\n\t\t\t\tvalue = value.call( this, cur );\n\t\t\t\tvtype = getType( value );\n\t\t\t}\n\t\t\tif ( value == null && prop.empty ) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif ( vtype === \"string\" ) {\n\t\t\t\tmatch = rplusequals.exec( value );\n\t\t\t\tif ( match ) {\n\t\t\t\t\tvalue = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === \"+\" ? 1 : -1 );\n\t\t\t\t}\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = value;\n\t\t\treturn this[ fn ]( local );\n\t\t};\n\t} );\n} );\n\n// add cssHook and .fx.step function for each named hook.\n// accept a space separated string of properties\ncolor.hook = function( hook ) {\n\tvar hooks = hook.split( \" \" );\n\teach( hooks, function( _i, hook ) {\n\t\tjQuery.cssHooks[ hook ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar parsed, curElem,\n\t\t\t\t\tbackgroundColor = \"\";\n\n\t\t\t\tif ( value !== \"transparent\" && ( getType( value ) !== \"string\" || ( parsed = stringParse( value ) ) ) ) {\n\t\t\t\t\tvalue = color( parsed || value );\n\t\t\t\t\tif ( !support.rgba && value._rgba[ 3 ] !== 1 ) {\n\t\t\t\t\t\tcurElem = hook === \"backgroundColor\" ? elem.parentNode : elem;\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t( backgroundColor === \"\" || backgroundColor === \"transparent\" ) &&\n\t\t\t\t\t\t\tcurElem && curElem.style\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tbackgroundColor = jQuery.css( curElem, \"backgroundColor\" );\n\t\t\t\t\t\t\t\tcurElem = curElem.parentNode;\n\t\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvalue = value.blend( backgroundColor && backgroundColor !== \"transparent\" ?\n\t\t\t\t\t\t\tbackgroundColor :\n\t\t\t\t\t\t\t\"_default\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = value.toRgbaString();\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\telem.style[ hook ] = value;\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// wrapped to prevent IE from throwing errors on \"invalid\" values like 'auto' or 'inherit'\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tjQuery.fx.step[ hook ] = function( fx ) {\n\t\t\tif ( !fx.colorInit ) {\n\t\t\t\tfx.start = color( fx.elem, hook );\n\t\t\t\tfx.end = color( fx.end );\n\t\t\t\tfx.colorInit = true;\n\t\t\t}\n\t\t\tjQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );\n\t\t};\n\t} );\n\n};\n\ncolor.hook( stepHooks );\n\njQuery.cssHooks.borderColor = {\n\texpand: function( value ) {\n\t\tvar expanded = {};\n\n\t\teach( [ \"Top\", \"Right\", \"Bottom\", \"Left\" ], function( _i, part ) {\n\t\t\texpanded[ \"border\" + part + \"Color\" ] = value;\n\t\t} );\n\t\treturn expanded;\n\t}\n};\n\n// Basic color names only.\n// Usage of any of the other color names requires adding yourself or including\n// jquery.color.svg-names.js.\ncolors = jQuery.Color.names = {\n\n\t// 4.1. Basic color keywords\n\taqua: \"#00ffff\",\n\tblack: \"#000000\",\n\tblue: \"#0000ff\",\n\tfuchsia: \"#ff00ff\",\n\tgray: \"#808080\",\n\tgreen: \"#008000\",\n\tlime: \"#00ff00\",\n\tmaroon: \"#800000\",\n\tnavy: \"#000080\",\n\tolive: \"#808000\",\n\tpurple: \"#800080\",\n\tred: \"#ff0000\",\n\tsilver: \"#c0c0c0\",\n\tteal: \"#008080\",\n\twhite: \"#ffffff\",\n\tyellow: \"#ffff00\",\n\n\t// 4.2.3. \"transparent\" color keyword\n\ttransparent: [ null, null, null, 0 ],\n\n\t_default: \"#ffffff\"\n};\n\n\n/*!\n * jQuery UI Effects 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Effects Core\n//>>group: Effects\n/* eslint-disable max-len */\n//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.\n/* eslint-enable max-len */\n//>>docs: https://api.jqueryui.com/category/effects-core/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar dataSpace = \"ui-effects-\",\n\tdataSpaceStyle = \"ui-effects-style\",\n\tdataSpaceAnimated = \"ui-effects-animated\";\n\n$.effects = {\n\teffect: {}\n};\n\n/******************************************************************************/\n/****************************** CLASS ANIMATIONS ******************************/\n/******************************************************************************/\n( function() {\n\nvar classAnimationActions = [ \"add\", \"remove\", \"toggle\" ],\n\tshorthandStyles = {\n\t\tborder: 1,\n\t\tborderBottom: 1,\n\t\tborderColor: 1,\n\t\tborderLeft: 1,\n\t\tborderRight: 1,\n\t\tborderTop: 1,\n\t\tborderWidth: 1,\n\t\tmargin: 1,\n\t\tpadding: 1\n\t};\n\n$.each(\n\t[ \"borderLeftStyle\", \"borderRightStyle\", \"borderBottomStyle\", \"borderTopStyle\" ],\n\tfunction( _, prop ) {\n\t\t$.fx.step[ prop ] = function( fx ) {\n\t\t\tif ( fx.end !== \"none\" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {\n\t\t\t\tjQuery.style( fx.elem, prop, fx.end );\n\t\t\t\tfx.setAttr = true;\n\t\t\t}\n\t\t};\n\t}\n);\n\nfunction camelCase( string ) {\n\treturn string.replace( /-([\\da-z])/gi, function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t} );\n}\n\nfunction getElementStyles( elem ) {\n\tvar key, len,\n\t\tstyle = elem.ownerDocument.defaultView ?\n\t\t\telem.ownerDocument.defaultView.getComputedStyle( elem, null ) :\n\t\t\telem.currentStyle,\n\t\tstyles = {};\n\n\tif ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {\n\t\tlen = style.length;\n\t\twhile ( len-- ) {\n\t\t\tkey = style[ len ];\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ camelCase( key ) ] = style[ key ];\n\t\t\t}\n\t\t}\n\n\t// Support: Opera, IE <9\n\t} else {\n\t\tfor ( key in style ) {\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ key ] = style[ key ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn styles;\n}\n\nfunction styleDifference( oldStyle, newStyle ) {\n\tvar diff = {},\n\t\tname, value;\n\n\tfor ( name in newStyle ) {\n\t\tvalue = newStyle[ name ];\n\t\tif ( oldStyle[ name ] !== value ) {\n\t\t\tif ( !shorthandStyles[ name ] ) {\n\t\t\t\tif ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {\n\t\t\t\t\tdiff[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn diff;\n}\n\n// Support: jQuery <1.8\nif ( !$.fn.addBack ) {\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n$.effects.animateClass = function( value, duration, easing, callback ) {\n\tvar o = $.speed( duration, easing, callback );\n\n\treturn this.queue( function() {\n\t\tvar animated = $( this ),\n\t\t\tbaseClass = animated.attr( \"class\" ) || \"\",\n\t\t\tapplyClassChange,\n\t\t\tallAnimations = o.children ? animated.find( \"*\" ).addBack() : animated;\n\n\t\t// Map the animated objects to store the original styles.\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar el = $( this );\n\t\t\treturn {\n\t\t\t\tel: el,\n\t\t\t\tstart: getElementStyles( this )\n\t\t\t};\n\t\t} );\n\n\t\t// Apply class change\n\t\tapplyClassChange = function() {\n\t\t\t$.each( classAnimationActions, function( i, action ) {\n\t\t\t\tif ( value[ action ] ) {\n\t\t\t\t\tanimated[ action + \"Class\" ]( value[ action ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t\tapplyClassChange();\n\n\t\t// Map all animated objects again - calculate new styles and diff\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tthis.end = getElementStyles( this.el[ 0 ] );\n\t\t\tthis.diff = styleDifference( this.start, this.end );\n\t\t\treturn this;\n\t\t} );\n\n\t\t// Apply original class\n\t\tanimated.attr( \"class\", baseClass );\n\n\t\t// Map all animated objects again - this time collecting a promise\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar styleInfo = this,\n\t\t\t\tdfd = $.Deferred(),\n\t\t\t\topts = $.extend( {}, o, {\n\t\t\t\t\tqueue: false,\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\tdfd.resolve( styleInfo );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\tthis.el.animate( this.diff, opts );\n\t\t\treturn dfd.promise();\n\t\t} );\n\n\t\t// Once all animations have completed:\n\t\t$.when.apply( $, allAnimations.get() ).done( function() {\n\n\t\t\t// Set the final class\n\t\t\tapplyClassChange();\n\n\t\t\t// For each animated element,\n\t\t\t// clear all css properties that were animated\n\t\t\t$.each( arguments, function() {\n\t\t\t\tvar el = this.el;\n\t\t\t\t$.each( this.diff, function( key ) {\n\t\t\t\t\tel.css( key, \"\" );\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\t// This is guarnteed to be there if you use jQuery.speed()\n\t\t\t// it also handles dequeuing the next anim...\n\t\t\to.complete.call( animated[ 0 ] );\n\t\t} );\n\t} );\n};\n\n$.fn.extend( {\n\taddClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn speed ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ add: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.addClass ),\n\n\tremoveClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn arguments.length > 1 ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ remove: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.removeClass ),\n\n\ttoggleClass: ( function( orig ) {\n\t\treturn function( classNames, force, speed, easing, callback ) {\n\t\t\tif ( typeof force === \"boolean\" || force === undefined ) {\n\t\t\t\tif ( !speed ) {\n\n\t\t\t\t\t// Without speed parameter\n\t\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t\t( force ? { add: classNames } : { remove: classNames } ),\n\t\t\t\t\t\tspeed, easing, callback );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Without force parameter\n\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t{ toggle: classNames }, force, speed, easing );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggleClass ),\n\n\tswitchClass: function( remove, add, speed, easing, callback ) {\n\t\treturn $.effects.animateClass.call( this, {\n\t\t\tadd: add,\n\t\t\tremove: remove\n\t\t}, speed, easing, callback );\n\t}\n} );\n\n} )();\n\n/******************************************************************************/\n/*********************************** EFFECTS **********************************/\n/******************************************************************************/\n\n( function() {\n\nif ( $.expr && $.expr.pseudos && $.expr.pseudos.animated ) {\n\t$.expr.pseudos.animated = ( function( orig ) {\n\t\treturn function( elem ) {\n\t\t\treturn !!$( elem ).data( dataSpaceAnimated ) || orig( elem );\n\t\t};\n\t} )( $.expr.pseudos.animated );\n}\n\nif ( $.uiBackCompat !== false ) {\n\t$.extend( $.effects, {\n\n\t\t// Saves a set of properties in a data storage\n\t\tsave: function( element, set ) {\n\t\t\tvar i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\telement.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Restores a set of previously saved properties from a data storage\n\t\trestore: function( element, set ) {\n\t\t\tvar val, i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\tval = element.data( dataSpace + set[ i ] );\n\t\t\t\t\telement.css( set[ i ], val );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tsetMode: function( el, mode ) {\n\t\t\tif ( mode === \"toggle\" ) {\n\t\t\t\tmode = el.is( \":hidden\" ) ? \"show\" : \"hide\";\n\t\t\t}\n\t\t\treturn mode;\n\t\t},\n\n\t\t// Wraps the element around a wrapper that copies position properties\n\t\tcreateWrapper: function( element ) {\n\n\t\t\t// If the element is already wrapped, return it\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\treturn element.parent();\n\t\t\t}\n\n\t\t\t// Wrap the element\n\t\t\tvar props = {\n\t\t\t\t\twidth: element.outerWidth( true ),\n\t\t\t\t\theight: element.outerHeight( true ),\n\t\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t\t},\n\t\t\t\twrapper = $( \"<div></div>\" )\n\t\t\t\t\t.addClass( \"ui-effects-wrapper\" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tfontSize: \"100%\",\n\t\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tpadding: 0\n\t\t\t\t\t} ),\n\n\t\t\t\t// Store the size in case width/height are defined in % - Fixes #5245\n\t\t\t\tsize = {\n\t\t\t\t\twidth: element.width(),\n\t\t\t\t\theight: element.height()\n\t\t\t\t},\n\t\t\t\tactive = document.activeElement;\n\n\t\t\t// Support: Firefox\n\t\t\t// Firefox incorrectly exposes anonymous content\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=561664\n\t\t\ttry {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tactive.id;\n\t\t\t} catch ( e ) {\n\t\t\t\tactive = document.body;\n\t\t\t}\n\n\t\t\telement.wrap( wrapper );\n\n\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t// Hotfix for jQuery 1.4 since some change in wrap() seems to actually\n\t\t\t// lose the reference to the wrapped element\n\t\t\twrapper = element.parent();\n\n\t\t\t// Transfer positioning properties to the wrapper\n\t\t\tif ( element.css( \"position\" ) === \"static\" ) {\n\t\t\t\twrapper.css( { position: \"relative\" } );\n\t\t\t\telement.css( { position: \"relative\" } );\n\t\t\t} else {\n\t\t\t\t$.extend( props, {\n\t\t\t\t\tposition: element.css( \"position\" ),\n\t\t\t\t\tzIndex: element.css( \"z-index\" )\n\t\t\t\t} );\n\t\t\t\t$.each( [ \"top\", \"left\", \"bottom\", \"right\" ], function( i, pos ) {\n\t\t\t\t\tprops[ pos ] = element.css( pos );\n\t\t\t\t\tif ( isNaN( parseInt( props[ pos ], 10 ) ) ) {\n\t\t\t\t\t\tprops[ pos ] = \"auto\";\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\telement.css( {\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: \"auto\",\n\t\t\t\t\tbottom: \"auto\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\telement.css( size );\n\n\t\t\treturn wrapper.css( props ).show();\n\t\t},\n\n\t\tremoveWrapper: function( element ) {\n\t\t\tvar active = document.activeElement;\n\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\telement.parent().replaceWith( element );\n\n\t\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn element;\n\t\t}\n\t} );\n}\n\n$.extend( $.effects, {\n\tversion: \"1.13.3\",\n\n\tdefine: function( name, mode, effect ) {\n\t\tif ( !effect ) {\n\t\t\teffect = mode;\n\t\t\tmode = \"effect\";\n\t\t}\n\n\t\t$.effects.effect[ name ] = effect;\n\t\t$.effects.effect[ name ].mode = mode;\n\n\t\treturn effect;\n\t},\n\n\tscaledDimensions: function( element, percent, direction ) {\n\t\tif ( percent === 0 ) {\n\t\t\treturn {\n\t\t\t\theight: 0,\n\t\t\t\twidth: 0,\n\t\t\t\touterHeight: 0,\n\t\t\t\touterWidth: 0\n\t\t\t};\n\t\t}\n\n\t\tvar x = direction !== \"horizontal\" ? ( ( percent || 100 ) / 100 ) : 1,\n\t\t\ty = direction !== \"vertical\" ? ( ( percent || 100 ) / 100 ) : 1;\n\n\t\treturn {\n\t\t\theight: element.height() * y,\n\t\t\twidth: element.width() * x,\n\t\t\touterHeight: element.outerHeight() * y,\n\t\t\touterWidth: element.outerWidth() * x\n\t\t};\n\n\t},\n\n\tclipToBox: function( animation ) {\n\t\treturn {\n\t\t\twidth: animation.clip.right - animation.clip.left,\n\t\t\theight: animation.clip.bottom - animation.clip.top,\n\t\t\tleft: animation.clip.left,\n\t\t\ttop: animation.clip.top\n\t\t};\n\t},\n\n\t// Injects recently queued functions to be first in line (after \"inprogress\")\n\tunshift: function( element, queueLength, count ) {\n\t\tvar queue = element.queue();\n\n\t\tif ( queueLength > 1 ) {\n\t\t\tqueue.splice.apply( queue,\n\t\t\t\t[ 1, 0 ].concat( queue.splice( queueLength, count ) ) );\n\t\t}\n\t\telement.dequeue();\n\t},\n\n\tsaveStyle: function( element ) {\n\t\telement.data( dataSpaceStyle, element[ 0 ].style.cssText );\n\t},\n\n\trestoreStyle: function( element ) {\n\t\telement[ 0 ].style.cssText = element.data( dataSpaceStyle ) || \"\";\n\t\telement.removeData( dataSpaceStyle );\n\t},\n\n\tmode: function( element, mode ) {\n\t\tvar hidden = element.is( \":hidden\" );\n\n\t\tif ( mode === \"toggle\" ) {\n\t\t\tmode = hidden ? \"show\" : \"hide\";\n\t\t}\n\t\tif ( hidden ? mode === \"hide\" : mode === \"show\" ) {\n\t\t\tmode = \"none\";\n\t\t}\n\t\treturn mode;\n\t},\n\n\t// Translates a [top,left] array into a baseline value\n\tgetBaseline: function( origin, original ) {\n\t\tvar y, x;\n\n\t\tswitch ( origin[ 0 ] ) {\n\t\tcase \"top\":\n\t\t\ty = 0;\n\t\t\tbreak;\n\t\tcase \"middle\":\n\t\t\ty = 0.5;\n\t\t\tbreak;\n\t\tcase \"bottom\":\n\t\t\ty = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ty = origin[ 0 ] / original.height;\n\t\t}\n\n\t\tswitch ( origin[ 1 ] ) {\n\t\tcase \"left\":\n\t\t\tx = 0;\n\t\t\tbreak;\n\t\tcase \"center\":\n\t\t\tx = 0.5;\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tx = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tx = origin[ 1 ] / original.width;\n\t\t}\n\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t},\n\n\t// Creates a placeholder element so that the original element can be made absolute\n\tcreatePlaceholder: function( element ) {\n\t\tvar placeholder,\n\t\t\tcssPosition = element.css( \"position\" ),\n\t\t\tposition = element.position();\n\n\t\t// Lock in margins first to account for form elements, which\n\t\t// will change margin if you explicitly set height\n\t\t// see: https://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380\n\t\t// Support: Safari\n\t\telement.css( {\n\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\tmarginRight: element.css( \"marginRight\" )\n\t\t} )\n\t\t.outerWidth( element.outerWidth() )\n\t\t.outerHeight( element.outerHeight() );\n\n\t\tif ( /^(static|relative)/.test( cssPosition ) ) {\n\t\t\tcssPosition = \"absolute\";\n\n\t\t\tplaceholder = $( \"<\" + element[ 0 ].nodeName + \">\" ).insertAfter( element ).css( {\n\n\t\t\t\t// Convert inline to inline block to account for inline elements\n\t\t\t\t// that turn to inline block based on content (like img)\n\t\t\t\tdisplay: /^(inline|ruby)/.test( element.css( \"display\" ) ) ?\n\t\t\t\t\t\"inline-block\" :\n\t\t\t\t\t\"block\",\n\t\t\t\tvisibility: \"hidden\",\n\n\t\t\t\t// Margins need to be set to account for margin collapse\n\t\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\t\tmarginRight: element.css( \"marginRight\" ),\n\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t} )\n\t\t\t.outerWidth( element.outerWidth() )\n\t\t\t.outerHeight( element.outerHeight() )\n\t\t\t.addClass( \"ui-effects-placeholder\" );\n\n\t\t\telement.data( dataSpace + \"placeholder\", placeholder );\n\t\t}\n\n\t\telement.css( {\n\t\t\tposition: cssPosition,\n\t\t\tleft: position.left,\n\t\t\ttop: position.top\n\t\t} );\n\n\t\treturn placeholder;\n\t},\n\n\tremovePlaceholder: function( element ) {\n\t\tvar dataKey = dataSpace + \"placeholder\",\n\t\t\t\tplaceholder = element.data( dataKey );\n\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.remove();\n\t\t\telement.removeData( dataKey );\n\t\t}\n\t},\n\n\t// Removes a placeholder if it exists and restores\n\t// properties that were modified during placeholder creation\n\tcleanUp: function( element ) {\n\t\t$.effects.restoreStyle( element );\n\t\t$.effects.removePlaceholder( element );\n\t},\n\n\tsetTransition: function( element, list, factor, value ) {\n\t\tvalue = value || {};\n\t\t$.each( list, function( i, x ) {\n\t\t\tvar unit = element.cssUnit( x );\n\t\t\tif ( unit[ 0 ] > 0 ) {\n\t\t\t\tvalue[ x ] = unit[ 0 ] * factor + unit[ 1 ];\n\t\t\t}\n\t\t} );\n\t\treturn value;\n\t}\n} );\n\n// Return an effect options object for the given parameters:\nfunction _normalizeArguments( effect, options, speed, callback ) {\n\n\t// Allow passing all options as the first parameter\n\tif ( $.isPlainObject( effect ) ) {\n\t\toptions = effect;\n\t\teffect = effect.effect;\n\t}\n\n\t// Convert to an object\n\teffect = { effect: effect };\n\n\t// Catch (effect, null, ...)\n\tif ( options == null ) {\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, callback)\n\tif ( typeof options === \"function\" ) {\n\t\tcallback = options;\n\t\tspeed = null;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, speed, ?)\n\tif ( typeof options === \"number\" || $.fx.speeds[ options ] ) {\n\t\tcallback = speed;\n\t\tspeed = options;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, options, callback)\n\tif ( typeof speed === \"function\" ) {\n\t\tcallback = speed;\n\t\tspeed = null;\n\t}\n\n\t// Add options to effect\n\tif ( options ) {\n\t\t$.extend( effect, options );\n\t}\n\n\tspeed = speed || options.duration;\n\teffect.duration = $.fx.off ? 0 :\n\t\ttypeof speed === \"number\" ? speed :\n\t\tspeed in $.fx.speeds ? $.fx.speeds[ speed ] :\n\t\t$.fx.speeds._default;\n\n\teffect.complete = callback || options.complete;\n\n\treturn effect;\n}\n\nfunction standardAnimationOption( option ) {\n\n\t// Valid standard speeds (nothing, number, named speed)\n\tif ( !option || typeof option === \"number\" || $.fx.speeds[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Invalid strings - treat as \"normal\" speed\n\tif ( typeof option === \"string\" && !$.effects.effect[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Complete callback\n\tif ( typeof option === \"function\" ) {\n\t\treturn true;\n\t}\n\n\t// Options hash (but not naming an effect)\n\tif ( typeof option === \"object\" && !option.effect ) {\n\t\treturn true;\n\t}\n\n\t// Didn't match any standard API\n\treturn false;\n}\n\n$.fn.extend( {\n\teffect: function( /* effect, options, speed, callback */ ) {\n\t\tvar args = _normalizeArguments.apply( this, arguments ),\n\t\t\teffectMethod = $.effects.effect[ args.effect ],\n\t\t\tdefaultMode = effectMethod.mode,\n\t\t\tqueue = args.queue,\n\t\t\tqueueName = queue || \"fx\",\n\t\t\tcomplete = args.complete,\n\t\t\tmode = args.mode,\n\t\t\tmodes = [],\n\t\t\tprefilter = function( next ) {\n\t\t\t\tvar el = $( this ),\n\t\t\t\t\tnormalizedMode = $.effects.mode( el, mode ) || defaultMode;\n\n\t\t\t\t// Sentinel for duck-punching the :animated pseudo-selector\n\t\t\t\tel.data( dataSpaceAnimated, true );\n\n\t\t\t\t// Save effect mode for later use,\n\t\t\t\t// we can't just call $.effects.mode again later,\n\t\t\t\t// as the .show() below destroys the initial state\n\t\t\t\tmodes.push( normalizedMode );\n\n\t\t\t\t// See $.uiBackCompat inside of run() for removal of defaultMode in 1.14\n\t\t\t\tif ( defaultMode && ( normalizedMode === \"show\" ||\n\t\t\t\t\t\t( normalizedMode === defaultMode && normalizedMode === \"hide\" ) ) ) {\n\t\t\t\t\tel.show();\n\t\t\t\t}\n\n\t\t\t\tif ( !defaultMode || normalizedMode !== \"none\" ) {\n\t\t\t\t\t$.effects.saveStyle( el );\n\t\t\t\t}\n\n\t\t\t\tif ( typeof next === \"function\" ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( $.fx.off || !effectMethod ) {\n\n\t\t\t// Delegate to the original method (e.g., .show()) if possible\n\t\t\tif ( mode ) {\n\t\t\t\treturn this[ mode ]( args.duration, complete );\n\t\t\t} else {\n\t\t\t\treturn this.each( function() {\n\t\t\t\t\tif ( complete ) {\n\t\t\t\t\t\tcomplete.call( this );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\tfunction run( next ) {\n\t\t\tvar elem = $( this );\n\n\t\t\tfunction cleanup() {\n\t\t\t\telem.removeData( dataSpaceAnimated );\n\n\t\t\t\t$.effects.cleanUp( elem );\n\n\t\t\t\tif ( args.mode === \"hide\" ) {\n\t\t\t\t\telem.hide();\n\t\t\t\t}\n\n\t\t\t\tdone();\n\t\t\t}\n\n\t\t\tfunction done() {\n\t\t\t\tif ( typeof complete === \"function\" ) {\n\t\t\t\t\tcomplete.call( elem[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\tif ( typeof next === \"function\" ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mode option on a per element basis,\n\t\t\t// as toggle can be either show or hide depending on element state\n\t\t\targs.mode = modes.shift();\n\n\t\t\tif ( $.uiBackCompat !== false && !defaultMode ) {\n\t\t\t\tif ( elem.is( \":hidden\" ) ? mode === \"hide\" : mode === \"show\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, done );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( args.mode === \"none\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, cleanup );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Run prefilter on all elements first to ensure that\n\t\t// any showing or hiding happens before placeholder creation,\n\t\t// which ensures that any layout changes are correctly captured.\n\t\treturn queue === false ?\n\t\t\tthis.each( prefilter ).each( run ) :\n\t\t\tthis.queue( queueName, prefilter ).queue( queueName, run );\n\t},\n\n\tshow: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"show\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.show ),\n\n\thide: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"hide\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.hide ),\n\n\ttoggle: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) || typeof option === \"boolean\" ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"toggle\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggle ),\n\n\tcssUnit: function( key ) {\n\t\tvar style = this.css( key ),\n\t\t\tval = [];\n\n\t\t$.each( [ \"em\", \"px\", \"%\", \"pt\" ], function( i, unit ) {\n\t\t\tif ( style.indexOf( unit ) > 0 ) {\n\t\t\t\tval = [ parseFloat( style ), unit ];\n\t\t\t}\n\t\t} );\n\t\treturn val;\n\t},\n\n\tcssClip: function( clipObj ) {\n\t\tif ( clipObj ) {\n\t\t\treturn this.css( \"clip\", \"rect(\" + clipObj.top + \"px \" + clipObj.right + \"px \" +\n\t\t\t\tclipObj.bottom + \"px \" + clipObj.left + \"px)\" );\n\t\t}\n\t\treturn parseClip( this.css( \"clip\" ), this );\n\t},\n\n\ttransfer: function( options, done ) {\n\t\tvar element = $( this ),\n\t\t\ttarget = $( options.to ),\n\t\t\ttargetFixed = target.css( \"position\" ) === \"fixed\",\n\t\t\tbody = $( \"body\" ),\n\t\t\tfixTop = targetFixed ? body.scrollTop() : 0,\n\t\t\tfixLeft = targetFixed ? body.scrollLeft() : 0,\n\t\t\tendPosition = target.offset(),\n\t\t\tanimation = {\n\t\t\t\ttop: endPosition.top - fixTop,\n\t\t\t\tleft: endPosition.left - fixLeft,\n\t\t\t\theight: target.innerHeight(),\n\t\t\t\twidth: target.innerWidth()\n\t\t\t},\n\t\t\tstartPosition = element.offset(),\n\t\t\ttransfer = $( \"<div class='ui-effects-transfer'></div>\" );\n\n\t\ttransfer\n\t\t\t.appendTo( \"body\" )\n\t\t\t.addClass( options.className )\n\t\t\t.css( {\n\t\t\t\ttop: startPosition.top - fixTop,\n\t\t\t\tleft: startPosition.left - fixLeft,\n\t\t\t\theight: element.innerHeight(),\n\t\t\t\twidth: element.innerWidth(),\n\t\t\t\tposition: targetFixed ? \"fixed\" : \"absolute\"\n\t\t\t} )\n\t\t\t.animate( animation, options.duration, options.easing, function() {\n\t\t\t\ttransfer.remove();\n\t\t\t\tif ( typeof done === \"function\" ) {\n\t\t\t\t\tdone();\n\t\t\t\t}\n\t\t\t} );\n\t}\n} );\n\nfunction parseClip( str, element ) {\n\t\tvar outerWidth = element.outerWidth(),\n\t\t\touterHeight = element.outerHeight(),\n\t\t\tclipRegex = /^rect\\((-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto)\\)$/,\n\t\t\tvalues = clipRegex.exec( str ) || [ \"\", 0, outerWidth, outerHeight, 0 ];\n\n\t\treturn {\n\t\t\ttop: parseFloat( values[ 1 ] ) || 0,\n\t\t\tright: values[ 2 ] === \"auto\" ? outerWidth : parseFloat( values[ 2 ] ),\n\t\t\tbottom: values[ 3 ] === \"auto\" ? outerHeight : parseFloat( values[ 3 ] ),\n\t\t\tleft: parseFloat( values[ 4 ] ) || 0\n\t\t};\n}\n\n$.fx.step.clip = function( fx ) {\n\tif ( !fx.clipInit ) {\n\t\tfx.start = $( fx.elem ).cssClip();\n\t\tif ( typeof fx.end === \"string\" ) {\n\t\t\tfx.end = parseClip( fx.end, fx.elem );\n\t\t}\n\t\tfx.clipInit = true;\n\t}\n\n\t$( fx.elem ).cssClip( {\n\t\ttop: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top,\n\t\tright: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right,\n\t\tbottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom,\n\t\tleft: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left\n\t} );\n};\n\n} )();\n\n/******************************************************************************/\n/*********************************** EASING ***********************************/\n/******************************************************************************/\n\n( function() {\n\n// Based on easing equations from Robert Penner (http://robertpenner.com/easing)\n\nvar baseEasings = {};\n\n$.each( [ \"Quad\", \"Cubic\", \"Quart\", \"Quint\", \"Expo\" ], function( i, name ) {\n\tbaseEasings[ name ] = function( p ) {\n\t\treturn Math.pow( p, i + 2 );\n\t};\n} );\n\n$.extend( baseEasings, {\n\tSine: function( p ) {\n\t\treturn 1 - Math.cos( p * Math.PI / 2 );\n\t},\n\tCirc: function( p ) {\n\t\treturn 1 - Math.sqrt( 1 - p * p );\n\t},\n\tElastic: function( p ) {\n\t\treturn p === 0 || p === 1 ? p :\n\t\t\t-Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 );\n\t},\n\tBack: function( p ) {\n\t\treturn p * p * ( 3 * p - 2 );\n\t},\n\tBounce: function( p ) {\n\t\tvar pow2,\n\t\t\tbounce = 4;\n\n\t\twhile ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}\n\t\treturn 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );\n\t}\n} );\n\n$.each( baseEasings, function( name, easeIn ) {\n\t$.easing[ \"easeIn\" + name ] = easeIn;\n\t$.easing[ \"easeOut\" + name ] = function( p ) {\n\t\treturn 1 - easeIn( 1 - p );\n\t};\n\t$.easing[ \"easeInOut\" + name ] = function( p ) {\n\t\treturn p < 0.5 ?\n\t\t\teaseIn( p * 2 ) / 2 :\n\t\t\t1 - easeIn( p * -2 + 2 ) / 2;\n\t};\n} );\n\n} )();\n\nvar effect = $.effects;\n\n\n/*!\n * jQuery UI Effects Blind 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Blind Effect\n//>>group: Effects\n//>>description: Blinds the element.\n//>>docs: https://api.jqueryui.com/blind-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectBlind = $.effects.define( \"blind\", \"hide\", function( options, done ) {\n\tvar map = {\n\t\t\tup: [ \"bottom\", \"top\" ],\n\t\t\tvertical: [ \"bottom\", \"top\" ],\n\t\t\tdown: [ \"top\", \"bottom\" ],\n\t\t\tleft: [ \"right\", \"left\" ],\n\t\t\thorizontal: [ \"right\", \"left\" ],\n\t\t\tright: [ \"left\", \"right\" ]\n\t\t},\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"up\",\n\t\tstart = element.cssClip(),\n\t\tanimate = { clip: $.extend( {}, start ) },\n\t\tplaceholder = $.effects.createPlaceholder( element );\n\n\tanimate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ];\n\n\tif ( options.mode === \"show\" ) {\n\t\telement.cssClip( animate.clip );\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.css( $.effects.clipToBox( animate ) );\n\t\t}\n\n\t\tanimate.clip = start;\n\t}\n\n\tif ( placeholder ) {\n\t\tplaceholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing );\n\t}\n\n\telement.animate( animate, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Bounce 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Bounce Effect\n//>>group: Effects\n//>>description: Bounces an element horizontally or vertically n times.\n//>>docs: https://api.jqueryui.com/bounce-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectBounce = $.effects.define( \"bounce\", function( options, done ) {\n\tvar upAnim, downAnim, refValue,\n\t\telement = $( this ),\n\n\t\t// Defaults:\n\t\tmode = options.mode,\n\t\thide = mode === \"hide\",\n\t\tshow = mode === \"show\",\n\t\tdirection = options.direction || \"up\",\n\t\tdistance = options.distance,\n\t\ttimes = options.times || 5,\n\n\t\t// Number of internal animations\n\t\tanims = times * 2 + ( show || hide ? 1 : 0 ),\n\t\tspeed = options.duration / anims,\n\t\teasing = options.easing,\n\n\t\t// Utility:\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ),\n\t\ti = 0,\n\n\t\tqueuelen = element.queue().length;\n\n\t$.effects.createPlaceholder( element );\n\n\trefValue = element.css( ref );\n\n\t// Default distance for the BIGGEST bounce is the outer Distance / 3\n\tif ( !distance ) {\n\t\tdistance = element[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]() / 3;\n\t}\n\n\tif ( show ) {\n\t\tdownAnim = { opacity: 1 };\n\t\tdownAnim[ ref ] = refValue;\n\n\t\t// If we are showing, force opacity 0 and set the initial position\n\t\t// then do the \"first\" animation\n\t\telement\n\t\t\t.css( \"opacity\", 0 )\n\t\t\t.css( ref, motion ? -distance * 2 : distance * 2 )\n\t\t\t.animate( downAnim, speed, easing );\n\t}\n\n\t// Start at the smallest distance if we are hiding\n\tif ( hide ) {\n\t\tdistance = distance / Math.pow( 2, times - 1 );\n\t}\n\n\tdownAnim = {};\n\tdownAnim[ ref ] = refValue;\n\n\t// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here\n\tfor ( ; i < times; i++ ) {\n\t\tupAnim = {};\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\n\n\t\telement\n\t\t\t.animate( upAnim, speed, easing )\n\t\t\t.animate( downAnim, speed, easing );\n\n\t\tdistance = hide ? distance * 2 : distance / 2;\n\t}\n\n\t// Last Bounce when Hiding\n\tif ( hide ) {\n\t\tupAnim = { opacity: 0 };\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\n\n\t\telement.animate( upAnim, speed, easing );\n\t}\n\n\telement.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Clip 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Clip Effect\n//>>group: Effects\n//>>description: Clips the element on and off like an old TV.\n//>>docs: https://api.jqueryui.com/clip-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectClip = $.effects.define( \"clip\", \"hide\", function( options, done ) {\n\tvar start,\n\t\tanimate = {},\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"vertical\",\n\t\tboth = direction === \"both\",\n\t\thorizontal = both || direction === \"horizontal\",\n\t\tvertical = both || direction === \"vertical\";\n\n\tstart = element.cssClip();\n\tanimate.clip = {\n\t\ttop: vertical ? ( start.bottom - start.top ) / 2 : start.top,\n\t\tright: horizontal ? ( start.right - start.left ) / 2 : start.right,\n\t\tbottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom,\n\t\tleft: horizontal ? ( start.right - start.left ) / 2 : start.left\n\t};\n\n\t$.effects.createPlaceholder( element );\n\n\tif ( options.mode === \"show\" ) {\n\t\telement.cssClip( animate.clip );\n\t\tanimate.clip = start;\n\t}\n\n\telement.animate( animate, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n\n} );\n\n\n/*!\n * jQuery UI Effects Drop 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Drop Effect\n//>>group: Effects\n//>>description: Moves an element in one direction and hides it at the same time.\n//>>docs: https://api.jqueryui.com/drop-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectDrop = $.effects.define( \"drop\", \"hide\", function( options, done ) {\n\n\tvar distance,\n\t\telement = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\tdirection = options.direction || \"left\",\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ) ? \"-=\" : \"+=\",\n\t\toppositeMotion = ( motion === \"+=\" ) ? \"-=\" : \"+=\",\n\t\tanimation = {\n\t\t\topacity: 0\n\t\t};\n\n\t$.effects.createPlaceholder( element );\n\n\tdistance = options.distance ||\n\t\telement[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true ) / 2;\n\n\tanimation[ ref ] = motion + distance;\n\n\tif ( show ) {\n\t\telement.css( animation );\n\n\t\tanimation[ ref ] = oppositeMotion + distance;\n\t\tanimation.opacity = 1;\n\t}\n\n\t// Animate\n\telement.animate( animation, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Explode 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Explode Effect\n//>>group: Effects\n/* eslint-disable max-len */\n//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness.\n/* eslint-enable max-len */\n//>>docs: https://api.jqueryui.com/explode-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectExplode = $.effects.define( \"explode\", \"hide\", function( options, done ) {\n\n\tvar i, j, left, top, mx, my,\n\t\trows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3,\n\t\tcells = rows,\n\t\telement = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\n\t\t// Show and then visibility:hidden the element before calculating offset\n\t\toffset = element.show().css( \"visibility\", \"hidden\" ).offset(),\n\n\t\t// Width and height of a piece\n\t\twidth = Math.ceil( element.outerWidth() / cells ),\n\t\theight = Math.ceil( element.outerHeight() / rows ),\n\t\tpieces = [];\n\n\t// Children animate complete:\n\tfunction childComplete() {\n\t\tpieces.push( this );\n\t\tif ( pieces.length === rows * cells ) {\n\t\t\tanimComplete();\n\t\t}\n\t}\n\n\t// Clone the element for each row and cell.\n\tfor ( i = 0; i < rows; i++ ) { // ===>\n\t\ttop = offset.top + i * height;\n\t\tmy = i - ( rows - 1 ) / 2;\n\n\t\tfor ( j = 0; j < cells; j++ ) { // |||\n\t\t\tleft = offset.left + j * width;\n\t\t\tmx = j - ( cells - 1 ) / 2;\n\n\t\t\t// Create a clone of the now hidden main element that will be absolute positioned\n\t\t\t// within a wrapper div off the -left and -top equal to size of our pieces\n\t\t\telement\n\t\t\t\t.clone()\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.wrap( \"<div></div>\" )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tvisibility: \"visible\",\n\t\t\t\t\tleft: -j * width,\n\t\t\t\t\ttop: -i * height\n\t\t\t\t} )\n\n\t\t\t\t// Select the wrapper - make it overflow: hidden and absolute positioned based on\n\t\t\t\t// where the original was located +left and +top equal to the size of pieces\n\t\t\t\t.parent()\n\t\t\t\t\t.addClass( \"ui-effects-explode\" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\theight: height,\n\t\t\t\t\t\tleft: left + ( show ? mx * width : 0 ),\n\t\t\t\t\t\ttop: top + ( show ? my * height : 0 ),\n\t\t\t\t\t\topacity: show ? 0 : 1\n\t\t\t\t\t} )\n\t\t\t\t\t.animate( {\n\t\t\t\t\t\tleft: left + ( show ? 0 : mx * width ),\n\t\t\t\t\t\ttop: top + ( show ? 0 : my * height ),\n\t\t\t\t\t\topacity: show ? 1 : 0\n\t\t\t\t\t}, options.duration || 500, options.easing, childComplete );\n\t\t}\n\t}\n\n\tfunction animComplete() {\n\t\telement.css( {\n\t\t\tvisibility: \"visible\"\n\t\t} );\n\t\t$( pieces ).remove();\n\t\tdone();\n\t}\n} );\n\n\n/*!\n * jQuery UI Effects Fade 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Fade Effect\n//>>group: Effects\n//>>description: Fades the element.\n//>>docs: https://api.jqueryui.com/fade-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectFade = $.effects.define( \"fade\", \"toggle\", function( options, done ) {\n\tvar show = options.mode === \"show\";\n\n\t$( this )\n\t\t.css( \"opacity\", show ? 0 : 1 )\n\t\t.animate( {\n\t\t\topacity: show ? 1 : 0\n\t\t}, {\n\t\t\tqueue: false,\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tcomplete: done\n\t\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Fold 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Fold Effect\n//>>group: Effects\n//>>description: Folds an element first horizontally and then vertically.\n//>>docs: https://api.jqueryui.com/fold-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectFold = $.effects.define( \"fold\", \"hide\", function( options, done ) {\n\n\t// Create element\n\tvar element = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\thide = mode === \"hide\",\n\t\tsize = options.size || 15,\n\t\tpercent = /([0-9]+)%/.exec( size ),\n\t\thorizFirst = !!options.horizFirst,\n\t\tref = horizFirst ? [ \"right\", \"bottom\" ] : [ \"bottom\", \"right\" ],\n\t\tduration = options.duration / 2,\n\n\t\tplaceholder = $.effects.createPlaceholder( element ),\n\n\t\tstart = element.cssClip(),\n\t\tanimation1 = { clip: $.extend( {}, start ) },\n\t\tanimation2 = { clip: $.extend( {}, start ) },\n\n\t\tdistance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ],\n\n\t\tqueuelen = element.queue().length;\n\n\tif ( percent ) {\n\t\tsize = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];\n\t}\n\tanimation1.clip[ ref[ 0 ] ] = size;\n\tanimation2.clip[ ref[ 0 ] ] = size;\n\tanimation2.clip[ ref[ 1 ] ] = 0;\n\n\tif ( show ) {\n\t\telement.cssClip( animation2.clip );\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.css( $.effects.clipToBox( animation2 ) );\n\t\t}\n\n\t\tanimation2.clip = start;\n\t}\n\n\t// Animate\n\telement\n\t\t.queue( function( next ) {\n\t\t\tif ( placeholder ) {\n\t\t\t\tplaceholder\n\t\t\t\t\t.animate( $.effects.clipToBox( animation1 ), duration, options.easing )\n\t\t\t\t\t.animate( $.effects.clipToBox( animation2 ), duration, options.easing );\n\t\t\t}\n\n\t\t\tnext();\n\t\t} )\n\t\t.animate( animation1, duration, options.easing )\n\t\t.animate( animation2, duration, options.easing )\n\t\t.queue( done );\n\n\t$.effects.unshift( element, queuelen, 4 );\n} );\n\n\n/*!\n * jQuery UI Effects Highlight 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Highlight Effect\n//>>group: Effects\n//>>description: Highlights the background of an element in a defined color for a custom duration.\n//>>docs: https://api.jqueryui.com/highlight-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectHighlight = $.effects.define( \"highlight\", \"show\", function( options, done ) {\n\tvar element = $( this ),\n\t\tanimation = {\n\t\t\tbackgroundColor: element.css( \"backgroundColor\" )\n\t\t};\n\n\tif ( options.mode === \"hide\" ) {\n\t\tanimation.opacity = 0;\n\t}\n\n\t$.effects.saveStyle( element );\n\n\telement\n\t\t.css( {\n\t\t\tbackgroundImage: \"none\",\n\t\t\tbackgroundColor: options.color || \"#ffff99\"\n\t\t} )\n\t\t.animate( animation, {\n\t\t\tqueue: false,\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tcomplete: done\n\t\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Size 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Size Effect\n//>>group: Effects\n//>>description: Resize an element to a specified width and height.\n//>>docs: https://api.jqueryui.com/size-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectSize = $.effects.define( \"size\", function( options, done ) {\n\n\t// Create element\n\tvar baseline, factor, temp,\n\t\telement = $( this ),\n\n\t\t// Copy for children\n\t\tcProps = [ \"fontSize\" ],\n\t\tvProps = [ \"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\" ],\n\t\thProps = [ \"borderLeftWidth\", \"borderRightWidth\", \"paddingLeft\", \"paddingRight\" ],\n\n\t\t// Set options\n\t\tmode = options.mode,\n\t\trestore = mode !== \"effect\",\n\t\tscale = options.scale || \"both\",\n\t\torigin = options.origin || [ \"middle\", \"center\" ],\n\t\tposition = element.css( \"position\" ),\n\t\tpos = element.position(),\n\t\toriginal = $.effects.scaledDimensions( element ),\n\t\tfrom = options.from || original,\n\t\tto = options.to || $.effects.scaledDimensions( element, 0 );\n\n\t$.effects.createPlaceholder( element );\n\n\tif ( mode === \"show\" ) {\n\t\ttemp = from;\n\t\tfrom = to;\n\t\tto = temp;\n\t}\n\n\t// Set scaling factor\n\tfactor = {\n\t\tfrom: {\n\t\t\ty: from.height / original.height,\n\t\t\tx: from.width / original.width\n\t\t},\n\t\tto: {\n\t\t\ty: to.height / original.height,\n\t\t\tx: to.width / original.width\n\t\t}\n\t};\n\n\t// Scale the css box\n\tif ( scale === \"box\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, vProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, vProps, factor.to.y, to );\n\t\t}\n\n\t\t// Horizontal props scaling\n\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\tfrom = $.effects.setTransition( element, hProps, factor.from.x, from );\n\t\t\tto = $.effects.setTransition( element, hProps, factor.to.x, to );\n\t\t}\n\t}\n\n\t// Scale the content\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, cProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, cProps, factor.to.y, to );\n\t\t}\n\t}\n\n\t// Adjust the position properties based on the provided origin points\n\tif ( origin ) {\n\t\tbaseline = $.effects.getBaseline( origin, original );\n\t\tfrom.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top;\n\t\tfrom.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left;\n\t\tto.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top;\n\t\tto.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left;\n\t}\n\tdelete from.outerHeight;\n\tdelete from.outerWidth;\n\telement.css( from );\n\n\t// Animate the children if desired\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\tvProps = vProps.concat( [ \"marginTop\", \"marginBottom\" ] ).concat( cProps );\n\t\thProps = hProps.concat( [ \"marginLeft\", \"marginRight\" ] );\n\n\t\t// Only animate children with width attributes specified\n\t\t// TODO: is this right? should we include anything with css width specified as well\n\t\telement.find( \"*[width]\" ).each( function() {\n\t\t\tvar child = $( this ),\n\t\t\t\tchildOriginal = $.effects.scaledDimensions( child ),\n\t\t\t\tchildFrom = {\n\t\t\t\t\theight: childOriginal.height * factor.from.y,\n\t\t\t\t\twidth: childOriginal.width * factor.from.x,\n\t\t\t\t\touterHeight: childOriginal.outerHeight * factor.from.y,\n\t\t\t\t\touterWidth: childOriginal.outerWidth * factor.from.x\n\t\t\t\t},\n\t\t\t\tchildTo = {\n\t\t\t\t\theight: childOriginal.height * factor.to.y,\n\t\t\t\t\twidth: childOriginal.width * factor.to.x,\n\t\t\t\t\touterHeight: childOriginal.height * factor.to.y,\n\t\t\t\t\touterWidth: childOriginal.width * factor.to.x\n\t\t\t\t};\n\n\t\t\t// Vertical props scaling\n\t\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, vProps, factor.to.y, childTo );\n\t\t\t}\n\n\t\t\t// Horizontal props scaling\n\t\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, hProps, factor.to.x, childTo );\n\t\t\t}\n\n\t\t\tif ( restore ) {\n\t\t\t\t$.effects.saveStyle( child );\n\t\t\t}\n\n\t\t\t// Animate children\n\t\t\tchild.css( childFrom );\n\t\t\tchild.animate( childTo, options.duration, options.easing, function() {\n\n\t\t\t\t// Restore children\n\t\t\t\tif ( restore ) {\n\t\t\t\t\t$.effects.restoreStyle( child );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Animate\n\telement.animate( to, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: function() {\n\n\t\t\tvar offset = element.offset();\n\n\t\t\tif ( to.opacity === 0 ) {\n\t\t\t\telement.css( \"opacity\", from.opacity );\n\t\t\t}\n\n\t\t\tif ( !restore ) {\n\t\t\t\telement\n\t\t\t\t\t.css( \"position\", position === \"static\" ? \"relative\" : position )\n\t\t\t\t\t.offset( offset );\n\n\t\t\t\t// Need to save style here so that automatic style restoration\n\t\t\t\t// doesn't restore to the original styles from before the animation.\n\t\t\t\t$.effects.saveStyle( element );\n\t\t\t}\n\n\t\t\tdone();\n\t\t}\n\t} );\n\n} );\n\n\n/*!\n * jQuery UI Effects Scale 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Scale Effect\n//>>group: Effects\n//>>description: Grows or shrinks an element and its content.\n//>>docs: https://api.jqueryui.com/scale-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectScale = $.effects.define( \"scale\", function( options, done ) {\n\n\t// Create element\n\tvar el = $( this ),\n\t\tmode = options.mode,\n\t\tpercent = parseInt( options.percent, 10 ) ||\n\t\t\t( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== \"effect\" ? 0 : 100 ) ),\n\n\t\tnewOptions = $.extend( true, {\n\t\t\tfrom: $.effects.scaledDimensions( el ),\n\t\t\tto: $.effects.scaledDimensions( el, percent, options.direction || \"both\" ),\n\t\t\torigin: options.origin || [ \"middle\", \"center\" ]\n\t\t}, options );\n\n\t// Fade option to support puff\n\tif ( options.fade ) {\n\t\tnewOptions.from.opacity = 1;\n\t\tnewOptions.to.opacity = 0;\n\t}\n\n\t$.effects.effect.size.call( this, newOptions, done );\n} );\n\n\n/*!\n * jQuery UI Effects Puff 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Puff Effect\n//>>group: Effects\n//>>description: Creates a puff effect by scaling the element up and hiding it at the same time.\n//>>docs: https://api.jqueryui.com/puff-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectPuff = $.effects.define( \"puff\", \"hide\", function( options, done ) {\n\tvar newOptions = $.extend( true, {}, options, {\n\t\tfade: true,\n\t\tpercent: parseInt( options.percent, 10 ) || 150\n\t} );\n\n\t$.effects.effect.scale.call( this, newOptions, done );\n} );\n\n\n/*!\n * jQuery UI Effects Pulsate 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Pulsate Effect\n//>>group: Effects\n//>>description: Pulsates an element n times by changing the opacity to zero and back.\n//>>docs: https://api.jqueryui.com/pulsate-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectPulsate = $.effects.define( \"pulsate\", \"show\", function( options, done ) {\n\tvar element = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\thide = mode === \"hide\",\n\t\tshowhide = show || hide,\n\n\t\t// Showing or hiding leaves off the \"last\" animation\n\t\tanims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),\n\t\tduration = options.duration / anims,\n\t\tanimateTo = 0,\n\t\ti = 1,\n\t\tqueuelen = element.queue().length;\n\n\tif ( show || !element.is( \":visible\" ) ) {\n\t\telement.css( \"opacity\", 0 ).show();\n\t\tanimateTo = 1;\n\t}\n\n\t// Anims - 1 opacity \"toggles\"\n\tfor ( ; i < anims; i++ ) {\n\t\telement.animate( { opacity: animateTo }, duration, options.easing );\n\t\tanimateTo = 1 - animateTo;\n\t}\n\n\telement.animate( { opacity: animateTo }, duration, options.easing );\n\n\telement.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Shake 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Shake Effect\n//>>group: Effects\n//>>description: Shakes an element horizontally or vertically n times.\n//>>docs: https://api.jqueryui.com/shake-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectShake = $.effects.define( \"shake\", function( options, done ) {\n\n\tvar i = 1,\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"left\",\n\t\tdistance = options.distance || 20,\n\t\ttimes = options.times || 3,\n\t\tanims = times * 2 + 1,\n\t\tspeed = Math.round( options.duration / anims ),\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tpositiveMotion = ( direction === \"up\" || direction === \"left\" ),\n\t\tanimation = {},\n\t\tanimation1 = {},\n\t\tanimation2 = {},\n\n\t\tqueuelen = element.queue().length;\n\n\t$.effects.createPlaceholder( element );\n\n\t// Animation\n\tanimation[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance;\n\tanimation1[ ref ] = ( positiveMotion ? \"+=\" : \"-=\" ) + distance * 2;\n\tanimation2[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance * 2;\n\n\t// Animate\n\telement.animate( animation, speed, options.easing );\n\n\t// Shakes\n\tfor ( ; i < times; i++ ) {\n\t\telement\n\t\t\t.animate( animation1, speed, options.easing )\n\t\t\t.animate( animation2, speed, options.easing );\n\t}\n\n\telement\n\t\t.animate( animation1, speed, options.easing )\n\t\t.animate( animation, speed / 2, options.easing )\n\t\t.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Slide 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Slide Effect\n//>>group: Effects\n//>>description: Slides an element in and out of the viewport.\n//>>docs: https://api.jqueryui.com/slide-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectSlide = $.effects.define( \"slide\", \"show\", function( options, done ) {\n\tvar startClip, startRef,\n\t\telement = $( this ),\n\t\tmap = {\n\t\t\tup: [ \"bottom\", \"top\" ],\n\t\t\tdown: [ \"top\", \"bottom\" ],\n\t\t\tleft: [ \"right\", \"left\" ],\n\t\t\tright: [ \"left\", \"right\" ]\n\t\t},\n\t\tmode = options.mode,\n\t\tdirection = options.direction || \"left\",\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tpositiveMotion = ( direction === \"up\" || direction === \"left\" ),\n\t\tdistance = options.distance ||\n\t\t\telement[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true ),\n\t\tanimation = {};\n\n\t$.effects.createPlaceholder( element );\n\n\tstartClip = element.cssClip();\n\tstartRef = element.position()[ ref ];\n\n\t// Define hide animation\n\tanimation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef;\n\tanimation.clip = element.cssClip();\n\tanimation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ];\n\n\t// Reverse the animation if we're showing\n\tif ( mode === \"show\" ) {\n\t\telement.cssClip( animation.clip );\n\t\telement.css( ref, animation[ ref ] );\n\t\tanimation.clip = startClip;\n\t\tanimation[ ref ] = startRef;\n\t}\n\n\t// Actually animate\n\telement.animate( animation, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Transfer 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Transfer Effect\n//>>group: Effects\n//>>description: Displays a transfer effect from one element to another.\n//>>docs: https://api.jqueryui.com/transfer-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effect;\nif ( $.uiBackCompat !== false ) {\n\teffect = $.effects.define( \"transfer\", function( options, done ) {\n\t\t$( this ).transfer( options, done );\n\t} );\n}\nvar effectsEffectTransfer = effect;\n\n\n/*!\n * jQuery UI Focusable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :focusable Selector\n//>>group: Core\n//>>description: Selects elements which can be focused.\n//>>docs: https://api.jqueryui.com/focusable-selector/\n\n\n// Selectors\n$.ui.focusable = function( element, hasTabindex ) {\n\tvar map, mapName, img, focusableIfVisible, fieldset,\n\t\tnodeName = element.nodeName.toLowerCase();\n\n\tif ( \"area\" === nodeName ) {\n\t\tmap = element.parentNode;\n\t\tmapName = map.name;\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\n\t\t\treturn false;\n\t\t}\n\t\timg = $( \"img[usemap='#\" + mapName + \"']\" );\n\t\treturn img.length > 0 && img.is( \":visible\" );\n\t}\n\n\tif ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {\n\t\tfocusableIfVisible = !element.disabled;\n\n\t\tif ( focusableIfVisible ) {\n\n\t\t\t// Form controls within a disabled fieldset are disabled.\n\t\t\t// However, controls within the fieldset's legend do not get disabled.\n\t\t\t// Since controls generally aren't placed inside legends, we skip\n\t\t\t// this portion of the check.\n\t\t\tfieldset = $( element ).closest( \"fieldset\" )[ 0 ];\n\t\t\tif ( fieldset ) {\n\t\t\t\tfocusableIfVisible = !fieldset.disabled;\n\t\t\t}\n\t\t}\n\t} else if ( \"a\" === nodeName ) {\n\t\tfocusableIfVisible = element.href || hasTabindex;\n\t} else {\n\t\tfocusableIfVisible = hasTabindex;\n\t}\n\n\treturn focusableIfVisible && $( element ).is( \":visible\" ) && visible( $( element ) );\n};\n\n// Support: IE 8 only\n// IE 8 doesn't resolve inherit to visible/hidden for computed values\nfunction visible( element ) {\n\tvar visibility = element.css( \"visibility\" );\n\twhile ( visibility === \"inherit\" ) {\n\t\telement = element.parent();\n\t\tvisibility = element.css( \"visibility\" );\n\t}\n\treturn visibility === \"visible\";\n}\n\n$.extend( $.expr.pseudos, {\n\tfocusable: function( element ) {\n\t\treturn $.ui.focusable( element, $.attr( element, \"tabindex\" ) != null );\n\t}\n} );\n\nvar focusable = $.ui.focusable;\n\n\n\n// Support: IE8 Only\n// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop\n// with a string, so we need to find the proper form.\nvar form = $.fn._form = function() {\n\treturn typeof this[ 0 ].form === \"string\" ? this.closest( \"form\" ) : $( this[ 0 ].form );\n};\n\n\n/*!\n * jQuery UI Form Reset Mixin 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Form Reset Mixin\n//>>group: Core\n//>>description: Refresh input widgets when their form is reset\n//>>docs: https://api.jqueryui.com/form-reset-mixin/\n\n\nvar formResetMixin = $.ui.formResetMixin = {\n\t_formResetHandler: function() {\n\t\tvar form = $( this );\n\n\t\t// Wait for the form reset to actually happen before refreshing\n\t\tsetTimeout( function() {\n\t\t\tvar instances = form.data( \"ui-form-reset-instances\" );\n\t\t\t$.each( instances, function() {\n\t\t\t\tthis.refresh();\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_bindFormResetHandler: function() {\n\t\tthis.form = this.element._form();\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" ) || [];\n\t\tif ( !instances.length ) {\n\n\t\t\t// We don't use _on() here because we use a single event handler per form\n\t\t\tthis.form.on( \"reset.ui-form-reset\", this._formResetHandler );\n\t\t}\n\t\tinstances.push( this );\n\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t},\n\n\t_unbindFormResetHandler: function() {\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" );\n\t\tinstances.splice( $.inArray( this, instances ), 1 );\n\t\tif ( instances.length ) {\n\t\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t\t} else {\n\t\t\tthis.form\n\t\t\t\t.removeData( \"ui-form-reset-instances\" )\n\t\t\t\t.off( \"reset.ui-form-reset\" );\n\t\t}\n\t}\n};\n\n\n/*!\n * jQuery UI Support for jQuery core 1.8.x and newer 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n */\n\n//>>label: jQuery 1.8+ Support\n//>>group: Core\n//>>description: Support version 1.8.x and newer of jQuery core\n\n\n// Support: jQuery 1.9.x or older\n// $.expr[ \":\" ] is deprecated.\nif ( !$.expr.pseudos ) {\n\t$.expr.pseudos = $.expr[ \":\" ];\n}\n\n// Support: jQuery 1.11.x or older\n// $.unique has been renamed to $.uniqueSort\nif ( !$.uniqueSort ) {\n\t$.uniqueSort = $.unique;\n}\n\n// Support: jQuery 2.2.x or older.\n// This method has been defined in jQuery 3.0.0.\n// Code from https://github.com/jquery/jquery/blob/e539bac79e666bba95bba86d690b4e609dca2286/src/selector/escapeSelector.js\nif ( !$.escapeSelector ) {\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tvar fcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t};\n\n\t$.escapeSelector = function( sel ) {\n\t\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n\t};\n}\n\n// Support: jQuery 3.4.x or older\n// These methods have been defined in jQuery 3.5.0.\nif ( !$.fn.even || !$.fn.odd ) {\n\t$.fn.extend( {\n\t\teven: function() {\n\t\t\treturn this.filter( function( i ) {\n\t\t\t\treturn i % 2 === 0;\n\t\t\t} );\n\t\t},\n\t\todd: function() {\n\t\t\treturn this.filter( function( i ) {\n\t\t\t\treturn i % 2 === 1;\n\t\t\t} );\n\t\t}\n\t} );\n}\n\n;\n/*!\n * jQuery UI Keycode 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: https://api.jqueryui.com/jQuery.ui.keyCode/\n\n\nvar keycode = $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n\n/*!\n * jQuery UI Labels 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: labels\n//>>group: Core\n//>>description: Find all the labels associated with a given input\n//>>docs: https://api.jqueryui.com/labels/\n\n\nvar labels = $.fn.labels = function() {\n\tvar ancestor, selector, id, labels, ancestors;\n\n\tif ( !this.length ) {\n\t\treturn this.pushStack( [] );\n\t}\n\n\t// Check control.labels first\n\tif ( this[ 0 ].labels && this[ 0 ].labels.length ) {\n\t\treturn this.pushStack( this[ 0 ].labels );\n\t}\n\n\t// Support: IE <= 11, FF <= 37, Android <= 2.3 only\n\t// Above browsers do not support control.labels. Everything below is to support them\n\t// as well as document fragments. control.labels does not work on document fragments\n\tlabels = this.eq( 0 ).parents( \"label\" );\n\n\t// Look for the label based on the id\n\tid = this.attr( \"id\" );\n\tif ( id ) {\n\n\t\t// We don't search against the document in case the element\n\t\t// is disconnected from the DOM\n\t\tancestor = this.eq( 0 ).parents().last();\n\n\t\t// Get a full set of top level ancestors\n\t\tancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );\n\n\t\t// Create a selector for the label based on the id\n\t\tselector = \"label[for='\" + $.escapeSelector( id ) + \"']\";\n\n\t\tlabels = labels.add( ancestors.find( selector ).addBack( selector ) );\n\n\t}\n\n\t// Return whatever we have found for labels\n\treturn this.pushStack( labels );\n};\n\n\n/*!\n * jQuery UI Scroll Parent 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: https://api.jqueryui.com/scrollParent/\n\n\nvar scrollParent = $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( \"position\" ),\n\t\texcludeStaticParent = position === \"absolute\",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\n\t\t\t\tparent.css( \"overflow-x\" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === \"fixed\" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n\n/*!\n * jQuery UI Tabbable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :tabbable Selector\n//>>group: Core\n//>>description: Selects elements which can be tabbed to.\n//>>docs: https://api.jqueryui.com/tabbable-selector/\n\n\nvar tabbable = $.extend( $.expr.pseudos, {\n\ttabbable: function( element ) {\n\t\tvar tabIndex = $.attr( element, \"tabindex\" ),\n\t\t\thasTabindex = tabIndex != null;\n\t\treturn ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );\n\t}\n} );\n\n\n/*!\n * jQuery UI Unique ID 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: uniqueId\n//>>group: Core\n//>>description: Functions to generate and remove uniqueId's\n//>>docs: https://api.jqueryui.com/uniqueId/\n\n\nvar uniqueId = $.fn.extend( {\n\tuniqueId: ( function() {\n\t\tvar uuid = 0;\n\n\t\treturn function() {\n\t\t\treturn this.each( function() {\n\t\t\t\tif ( !this.id ) {\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tremoveUniqueId: function() {\n\t\treturn this.each( function() {\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\n\t\t\t\t$( this ).removeAttr( \"id\" );\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\n/*!\n * jQuery UI Accordion 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Accordion\n//>>group: Widgets\n/* eslint-disable max-len */\n//>>description: Displays collapsible content panels for presenting information in a limited amount of space.\n/* eslint-enable max-len */\n//>>docs: https://api.jqueryui.com/accordion/\n//>>demos: https://jqueryui.com/accordion/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/accordion.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar widgetsAccordion = $.widget( \"ui.accordion\", {\n\tversion: \"1.13.3\",\n\toptions: {\n\t\tactive: 0,\n\t\tanimate: {},\n\t\tclasses: {\n\t\t\t\"ui-accordion-header\": \"ui-corner-top\",\n\t\t\t\"ui-accordion-header-collapsed\": \"ui-corner-all\",\n\t\t\t\"ui-accordion-content\": \"ui-corner-bottom\"\n\t\t},\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theader: function( elem ) {\n\t\t\treturn elem.find( \"> li > :first-child\" ).add( elem.find( \"> :not(li)\" ).even() );\n\t\t},\n\t\theightStyle: \"auto\",\n\t\ticons: {\n\t\t\tactiveHeader: \"ui-icon-triangle-1-s\",\n\t\t\theader: \"ui-icon-triangle-1-e\"\n\t\t},\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null\n\t},\n\n\thideProps: {\n\t\tborderTopWidth: \"hide\",\n\t\tborderBottomWidth: \"hide\",\n\t\tpaddingTop: \"hide\",\n\t\tpaddingBottom: \"hide\",\n\t\theight: \"hide\"\n\t},\n\n\tshowProps: {\n\t\tborderTopWidth: \"show\",\n\t\tborderBottomWidth: \"show\",\n\t\tpaddingTop: \"show\",\n\t\tpaddingBottom: \"show\",\n\t\theight: \"show\"\n\t},\n\n\t_create: function() {\n\t\tvar options = this.options;\n\n\t\tthis.prevShow = this.prevHide = $();\n\t\tthis._addClass( \"ui-accordion\", \"ui-widget ui-helper-reset\" );\n\t\tthis.element.attr( \"role\", \"tablist\" );\n\n\t\t// Don't allow collapsible: false and active: false / null\n\t\tif ( !options.collapsible && ( options.active === false || options.active == null ) ) {\n\t\t\toptions.active = 0;\n\t\t}\n\n\t\tthis._processPanels();\n\n\t\t// handle negative values\n\t\tif ( options.active < 0 ) {\n\t\t\toptions.active += this.headers.length;\n\t\t}\n\t\tthis._refresh();\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\theader: this.active,\n\t\t\tpanel: !this.active.length ? $() : this.active.next()\n\t\t};\n\t},\n\n\t_createIcons: function() {\n\t\tvar icon, children,\n\t\t\ticons = this.options.icons;\n\n\t\tif ( icons ) {\n\t\t\ticon = $( \"<span>\" );\n\t\t\tthis._addClass( icon, \"ui-accordion-header-icon\", \"ui-icon \" + icons.header );\n\t\t\ticon.prependTo( this.headers );\n\t\t\tchildren = this.active.children( \".ui-accordion-header-icon\" );\n\t\t\tthis._removeClass( children, icons.header )\n\t\t\t\t._addClass( children, null, icons.activeHeader )\n\t\t\t\t._addClass( this.headers, \"ui-accordion-icons\" );\n\t\t}\n\t},\n\n\t_destroyIcons: function() {\n\t\tthis._removeClass( this.headers, \"ui-accordion-icons\" );\n\t\tthis.headers.children( \".ui-accordion-header-icon\" ).remove();\n\t},\n\n\t_destroy: function() {\n\t\tvar contents;\n\n\t\t// Clean up main element\n\t\tthis.element.removeAttr( \"role\" );\n\n\t\t// Clean up headers\n\t\tthis.headers\n\t\t\t.removeAttr( \"role aria-expanded aria-selected aria-controls tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis._destroyIcons();\n\n\t\t// Clean up content panels\n\t\tcontents = this.headers.next()\n\t\t\t.css( \"display\", \"\" )\n\t\t\t.removeAttr( \"role aria-hidden aria-labelledby\" )\n\t\t\t.removeUniqueId();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tcontents.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tif ( this.options.event ) {\n\t\t\t\tthis._off( this.headers, this.options.event );\n\t\t\t}\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\t// Setting collapsible: false while collapsed; open first panel\n\t\tif ( key === \"collapsible\" && !value && this.options.active === false ) {\n\t\t\tthis._activate( 0 );\n\t\t}\n\n\t\tif ( key === \"icons\" ) {\n\t\t\tthis._destroyIcons();\n\t\t\tif ( value ) {\n\t\t\t\tthis._createIcons();\n\t\t\t}\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", value );\n\n\t\t// Support: IE8 Only\n\t\t// #5332 / #6059 - opacity doesn't cascade to positioned elements in IE\n\t\t// so we need to add the disabled class to the headers and panels\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t\tthis._toggleClass( this.headers.add( this.headers.next() ), null, \"ui-state-disabled\",\n\t\t\t!!value );\n\t},\n\n\t_keydown: function( event ) {\n\t\tif ( event.altKey || event.ctrlKey ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar keyCode = $.ui.keyCode,\n\t\t\tlength = this.headers.length,\n\t\t\tcurrentIndex = this.headers.index( event.target ),\n\t\t\ttoFocus = false;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.RIGHT:\n\t\tcase keyCode.DOWN:\n\t\t\ttoFocus = this.headers[ ( currentIndex + 1 ) % length ];\n\t\t\tbreak;\n\t\tcase keyCode.LEFT:\n\t\tcase keyCode.UP:\n\t\t\ttoFocus = this.headers[ ( currentIndex - 1 + length ) % length ];\n\t\t\tbreak;\n\t\tcase keyCode.SPACE:\n\t\tcase keyCode.ENTER:\n\t\t\tthis._eventHandler( event );\n\t\t\tbreak;\n\t\tcase keyCode.HOME:\n\t\t\ttoFocus = this.headers[ 0 ];\n\t\t\tbreak;\n\t\tcase keyCode.END:\n\t\t\ttoFocus = this.headers[ length - 1 ];\n\t\t\tbreak;\n\t\t}\n\n\t\tif ( toFocus ) {\n\t\t\t$( event.target ).attr( \"tabIndex\", -1 );\n\t\t\t$( toFocus ).attr( \"tabIndex\", 0 );\n\t\t\t$( toFocus ).trigger( \"focus\" );\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_panelKeyDown: function( event ) {\n\t\tif ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {\n\t\t\t$( event.currentTarget ).prev().trigger( \"focus\" );\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options;\n\t\tthis._processPanels();\n\n\t\t// Was collapsed or no panel\n\t\tif ( ( options.active === false && options.collapsible === true ) ||\n\t\t\t\t!this.headers.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\n\t\t// active false only when collapsible is true\n\t\t} else if ( options.active === false ) {\n\t\t\tthis._activate( 0 );\n\n\t\t// was active, but active panel is gone\n\t\t} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\n\t\t\t// all remaining panel are disabled\n\t\t\tif ( this.headers.length === this.headers.find( \".ui-state-disabled\" ).length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\n\t\t\t// activate previous panel\n\t\t\t} else {\n\t\t\t\tthis._activate( Math.max( 0, options.active - 1 ) );\n\t\t\t}\n\n\t\t// was active, active panel still exists\n\t\t} else {\n\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.headers.index( this.active );\n\t\t}\n\n\t\tthis._destroyIcons();\n\n\t\tthis._refresh();\n\t},\n\n\t_processPanels: function() {\n\t\tvar prevHeaders = this.headers,\n\t\t\tprevPanels = this.panels;\n\n\t\tif ( typeof this.options.header === \"function\" ) {\n\t\t\tthis.headers = this.options.header( this.element );\n\t\t} else {\n\t\t\tthis.headers = this.element.find( this.options.header );\n\t\t}\n\t\tthis._addClass( this.headers, \"ui-accordion-header ui-accordion-header-collapsed\",\n\t\t\t\"ui-state-default\" );\n\n\t\tthis.panels = this.headers.next().filter( \":not(.ui-accordion-content-active)\" ).hide();\n\t\tthis._addClass( this.panels, \"ui-accordion-content\", \"ui-helper-reset ui-widget-content\" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevPanels ) {\n\t\t\tthis._off( prevHeaders.not( this.headers ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t_refresh: function() {\n\t\tvar maxHeight,\n\t\t\toptions = this.options,\n\t\t\theightStyle = options.heightStyle,\n\t\t\tparent = this.element.parent();\n\n\t\tthis.active = this._findActive( options.active );\n\t\tthis._addClass( this.active, \"ui-accordion-header-active\", \"ui-state-active\" )\n\t\t\t._removeClass( this.active, \"ui-accordion-header-collapsed\" );\n\t\tthis._addClass( this.active.next(), \"ui-accordion-content-active\" );\n\t\tthis.active.next().show();\n\n\t\tthis.headers\n\t\t\t.attr( \"role\", \"tab\" )\n\t\t\t.each( function() {\n\t\t\t\tvar header = $( this ),\n\t\t\t\t\theaderId = header.uniqueId().attr( \"id\" ),\n\t\t\t\t\tpanel = header.next(),\n\t\t\t\t\tpanelId = panel.uniqueId().attr( \"id\" );\n\t\t\t\theader.attr( \"aria-controls\", panelId );\n\t\t\t\tpanel.attr( \"aria-labelledby\", headerId );\n\t\t\t} )\n\t\t\t.next()\n\t\t\t\t.attr( \"role\", \"tabpanel\" );\n\n\t\tthis.headers\n\t\t\t.not( this.active )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"false\",\n\t\t\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\t\ttabIndex: -1\n\t\t\t\t} )\n\t\t\t\t.next()\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t\t\t} )\n\t\t\t\t\t.hide();\n\n\t\t// Make sure at least one header is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.headers.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active.attr( {\n\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\ttabIndex: 0\n\t\t\t} )\n\t\t\t\t.next()\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t\t} );\n\t\t}\n\n\t\tthis._createIcons();\n\n\t\tthis._setupEvents( options.event );\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tthis.element.siblings( \":visible\" ).each( function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.headers.each( function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.headers.next()\n\t\t\t\t.each( function() {\n\t\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t\t} )\n\t\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.headers.next()\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar isVisible = $( this ).is( \":visible\" );\n\t\t\t\t\tif ( !isVisible ) {\n\t\t\t\t\t\t$( this ).show();\n\t\t\t\t\t}\n\t\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).css( \"height\", \"\" ).height() );\n\t\t\t\t\tif ( !isVisible ) {\n\t\t\t\t\t\t$( this ).hide();\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t\t.height( maxHeight );\n\t\t}\n\t},\n\n\t_activate: function( index ) {\n\t\tvar active = this._findActive( index )[ 0 ];\n\n\t\t// Trying to activate the already active panel\n\t\tif ( active === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Trying to collapse, simulate a click on the currently active header\n\t\tactive = active || this.active[ 0 ];\n\n\t\tthis._eventHandler( {\n\t\t\ttarget: active,\n\t\t\tcurrentTarget: active,\n\t\t\tpreventDefault: $.noop\n\t\t} );\n\t},\n\n\t_findActive: function( selector ) {\n\t\treturn typeof selector === \"number\" ? this.headers.eq( selector ) : $();\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {\n\t\t\tkeydown: \"_keydown\"\n\t\t};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( \" \" ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t} );\n\t\t}\n\n\t\tthis._off( this.headers.add( this.headers.next() ) );\n\t\tthis._on( this.headers, events );\n\t\tthis._on( this.headers.next(), { keydown: \"_panelKeyDown\" } );\n\t\tthis._hoverable( this.headers );\n\t\tthis._focusable( this.headers );\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar activeChildren, clickedChildren,\n\t\t\toptions = this.options,\n\t\t\tactive = this.active,\n\t\t\tclicked = $( event.currentTarget ),\n\t\t\tclickedIsActive = clicked[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : clicked.next(),\n\t\t\ttoHide = active.next(),\n\t\t\teventData = {\n\t\t\t\toldHeader: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewHeader: collapsing ? $() : clicked,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif (\n\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.headers.index( clicked );\n\n\t\t// When the call to ._toggle() comes after the class changes\n\t\t// it causes a very odd bug in IE 8 (see #6720)\n\t\tthis.active = clickedIsActive ? $() : clicked;\n\t\tthis._toggle( eventData );\n\n\t\t// Switch classes\n\t\t// corner classes on the previously active header stay after the animation\n\t\tthis._removeClass( active, \"ui-accordion-header-active\", \"ui-state-active\" );\n\t\tif ( options.icons ) {\n\t\t\tactiveChildren = active.children( \".ui-accordion-header-icon\" );\n\t\t\tthis._removeClass( activeChildren, null, options.icons.activeHeader )\n\t\t\t\t._addClass( activeChildren, null, options.icons.header );\n\t\t}\n\n\t\tif ( !clickedIsActive ) {\n\t\t\tthis._removeClass( clicked, \"ui-accordion-header-collapsed\" )\n\t\t\t\t._addClass( clicked, \"ui-accordion-header-active\", \"ui-state-active\" );\n\t\t\tif ( options.icons ) {\n\t\t\t\tclickedChildren = clicked.children( \".ui-accordion-header-icon\" );\n\t\t\t\tthis._removeClass( clickedChildren, null, options.icons.header )\n\t\t\t\t\t._addClass( clickedChildren, null, options.icons.activeHeader );\n\t\t\t}\n\n\t\t\tthis._addClass( clicked.next(), \"ui-accordion-content-active\" );\n\t\t}\n\t},\n\n\t_toggle: function( data ) {\n\t\tvar toShow = data.newPanel,\n\t\t\ttoHide = this.prevShow.length ? this.prevShow : data.oldPanel;\n\n\t\t// Handle activating a panel during the animation for another activation\n\t\tthis.prevShow.add( this.prevHide ).stop( true, true );\n\t\tthis.prevShow = toShow;\n\t\tthis.prevHide = toHide;\n\n\t\tif ( this.options.animate ) {\n\t\t\tthis._animate( toShow, toHide, data );\n\t\t} else {\n\t\t\ttoHide.hide();\n\t\t\ttoShow.show();\n\t\t\tthis._toggleComplete( data );\n\t\t}\n\n\t\ttoHide.attr( {\n\t\t\t\"aria-hidden\": \"true\"\n\t\t} );\n\t\ttoHide.prev().attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t} );\n\n\t\t// if we're switching panels, remove the old header from the tab order\n\t\t// if we're opening from collapsed state, remove the previous header from the tab order\n\t\t// if we're collapsing, then keep the collapsing header in the tab order\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\ttoHide.prev().attr( {\n\t\t\t\t\"tabIndex\": -1,\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t} );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.headers.filter( function() {\n\t\t\t\treturn parseInt( $( this ).attr( \"tabIndex\" ), 10 ) === 0;\n\t\t\t} )\n\t\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow\n\t\t\t.attr( \"aria-hidden\", \"false\" )\n\t\t\t.prev()\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t} );\n\t},\n\n\t_animate: function( toShow, toHide, data ) {\n\t\tvar total, easing, duration,\n\t\t\tthat = this,\n\t\t\tadjust = 0,\n\t\t\tboxSizing = toShow.css( \"box-sizing\" ),\n\t\t\tdown = toShow.length &&\n\t\t\t\t( !toHide.length || ( toShow.index() < toHide.index() ) ),\n\t\t\tanimate = this.options.animate || {},\n\t\t\toptions = down && animate.down || animate,\n\t\t\tcomplete = function() {\n\t\t\t\tthat._toggleComplete( data );\n\t\t\t};\n\n\t\tif ( typeof options === \"number\" ) {\n\t\t\tduration = options;\n\t\t}\n\t\tif ( typeof options === \"string\" ) {\n\t\t\teasing = options;\n\t\t}\n\n\t\t// fall back from options to animation in case of partial down settings\n\t\teasing = easing || options.easing || animate.easing;\n\t\tduration = duration || options.duration || animate.duration;\n\n\t\tif ( !toHide.length ) {\n\t\t\treturn toShow.animate( this.showProps, duration, easing, complete );\n\t\t}\n\t\tif ( !toShow.length ) {\n\t\t\treturn toHide.animate( this.hideProps, duration, easing, complete );\n\t\t}\n\n\t\ttotal = toShow.show().outerHeight();\n\t\ttoHide.animate( this.hideProps, {\n\t\t\tduration: duration,\n\t\t\teasing: easing,\n\t\t\tstep: function( now, fx ) {\n\t\t\t\tfx.now = Math.round( now );\n\t\t\t}\n\t\t} );\n\t\ttoShow\n\t\t\t.hide()\n\t\t\t.animate( this.showProps, {\n\t\t\t\tduration: duration,\n\t\t\t\teasing: easing,\n\t\t\t\tcomplete: complete,\n\t\t\t\tstep: function( now, fx ) {\n\t\t\t\t\tfx.now = Math.round( now );\n\t\t\t\t\tif ( fx.prop !== \"height\" ) {\n\t\t\t\t\t\tif ( boxSizing === \"content-box\" ) {\n\t\t\t\t\t\t\tadjust += fx.now;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( that.options.heightStyle !== \"content\" ) {\n\t\t\t\t\t\tfx.now = Math.round( total - toHide.outerHeight() - adjust );\n\t\t\t\t\t\tadjust = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t},\n\n\t_toggleComplete: function( data ) {\n\t\tvar toHide = data.oldPanel,\n\t\t\tprev = toHide.prev();\n\n\t\tthis._removeClass( toHide, \"ui-accordion-content-active\" );\n\t\tthis._removeClass( prev, \"ui-accordion-header-active\" )\n\t\t\t._addClass( prev, \"ui-accordion-header-collapsed\" );\n\n\t\t// Work around for rendering bug in IE (#5421)\n\t\tif ( toHide.length ) {\n\t\t\ttoHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;\n\t\t}\n\t\tthis._trigger( \"activate\", null, data );\n\t}\n} );\n\n\n\nvar safeActiveElement = $.ui.safeActiveElement = function( document ) {\n\tvar activeElement;\n\n\t// Support: IE 9 only\n\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\n\ttry {\n\t\tactiveElement = document.activeElement;\n\t} catch ( error ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE may return null instead of an element\n\t// Interestingly, this only seems to occur when NOT in an iframe\n\tif ( !activeElement ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 11 only\n\t// IE11 returns a seemingly empty object in some cases when accessing\n\t// document.activeElement from an <iframe>\n\tif ( !activeElement.nodeName ) {\n\t\tactiveElement = document.body;\n\t}\n\n\treturn activeElement;\n};\n\n\n/*!\n * jQuery UI Menu 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Menu\n//>>group: Widgets\n//>>description: Creates nestable menus.\n//>>docs: https://api.jqueryui.com/menu/\n//>>demos: https://jqueryui.com/menu/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/menu.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar widgetsMenu = $.widget( \"ui.menu\", {\n\tversion: \"1.13.3\",\n\tdefaultElement: \"<ul>\",\n\tdelay: 300,\n\toptions: {\n\t\ticons: {\n\t\t\tsubmenu: \"ui-icon-caret-1-e\"\n\t\t},\n\t\titems: \"> *\",\n\t\tmenus: \"ul\",\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"right top\"\n\t\t},\n\t\trole: \"menu\",\n\n\t\t// Callbacks\n\t\tblur: null,\n\t\tfocus: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tthis.activeMenu = this.element;\n\n\t\t// Flag used to prevent firing of the click handler\n\t\t// as the event bubbles up through nested menus\n\t\tthis.mouseHandled = false;\n\t\tthis.lastMousePosition = { x: null, y: null };\n\t\tthis.element\n\t\t\t.uniqueId()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\ttabIndex: 0\n\t\t\t} );\n\n\t\tthis._addClass( \"ui-menu\", \"ui-widget ui-widget-content\" );\n\t\tthis._on( {\n\n\t\t\t// Prevent focus from sticking to links inside menu after clicking\n\t\t\t// them (focus should always stay on UL during navigation).\n\t\t\t\"mousedown .ui-menu-item\": function( event ) {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tthis._activateItem( event );\n\t\t\t},\n\t\t\t\"click .ui-menu-item\": function( event ) {\n\t\t\t\tvar target = $( event.target );\n\t\t\t\tvar active = $( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\t\t\t\tif ( !this.mouseHandled && target.not( \".ui-state-disabled\" ).length ) {\n\t\t\t\t\tthis.select( event );\n\n\t\t\t\t\t// Only set the mouseHandled flag if the event will bubble, see #9469.\n\t\t\t\t\tif ( !event.isPropagationStopped() ) {\n\t\t\t\t\t\tthis.mouseHandled = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Open submenu on click\n\t\t\t\t\tif ( target.has( \".ui-menu\" ).length ) {\n\t\t\t\t\t\tthis.expand( event );\n\t\t\t\t\t} else if ( !this.element.is( \":focus\" ) &&\n\t\t\t\t\t\t\tactive.closest( \".ui-menu\" ).length ) {\n\n\t\t\t\t\t\t// Redirect focus to the menu\n\t\t\t\t\t\tthis.element.trigger( \"focus\", [ true ] );\n\n\t\t\t\t\t\t// If the active item is on the top level, let it stay active.\n\t\t\t\t\t\t// Otherwise, blur the active item since it is no longer visible.\n\t\t\t\t\t\tif ( this.active && this.active.parents( \".ui-menu\" ).length === 1 ) {\n\t\t\t\t\t\t\tclearTimeout( this.timer );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"mouseenter .ui-menu-item\": \"_activateItem\",\n\t\t\t\"mousemove .ui-menu-item\": \"_activateItem\",\n\t\t\tmouseleave: \"collapseAll\",\n\t\t\t\"mouseleave .ui-menu\": \"collapseAll\",\n\t\t\tfocus: function( event, keepActiveItem ) {\n\n\t\t\t\t// If there's already an active item, keep it active\n\t\t\t\t// If not, activate the first item\n\t\t\t\tvar item = this.active || this._menuItems().first();\n\n\t\t\t\tif ( !keepActiveItem ) {\n\t\t\t\t\tthis.focus( event, item );\n\t\t\t\t}\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tthis._delay( function() {\n\t\t\t\t\tvar notContained = !$.contains(\n\t\t\t\t\t\tthis.element[ 0 ],\n\t\t\t\t\t\t$.ui.safeActiveElement( this.document[ 0 ] )\n\t\t\t\t\t);\n\t\t\t\t\tif ( notContained ) {\n\t\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tkeydown: \"_keydown\"\n\t\t} );\n\n\t\tthis.refresh();\n\n\t\t// Clicks outside of a menu collapse any open menus\n\t\tthis._on( this.document, {\n\t\t\tclick: function( event ) {\n\t\t\t\tif ( this._closeOnDocumentClick( event ) ) {\n\t\t\t\t\tthis.collapseAll( event, true );\n\t\t\t\t}\n\n\t\t\t\t// Reset the mouseHandled flag\n\t\t\t\tthis.mouseHandled = false;\n\t\t\t}\n\t\t} );\n\t},\n\n\t_activateItem: function( event ) {\n\n\t\t// Ignore mouse events while typeahead is active, see #10458.\n\t\t// Prevents focusing the wrong item when typeahead causes a scroll while the mouse\n\t\t// is over an item in the menu\n\t\tif ( this.previousFilter ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the mouse didn't actually move, but the page was scrolled, ignore the event (#9356)\n\t\tif ( event.clientX === this.lastMousePosition.x &&\n\t\t\t\tevent.clientY === this.lastMousePosition.y ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.lastMousePosition = {\n\t\t\tx: event.clientX,\n\t\t\ty: event.clientY\n\t\t};\n\n\t\tvar actualTarget = $( event.target ).closest( \".ui-menu-item\" ),\n\t\t\ttarget = $( event.currentTarget );\n\n\t\t// Ignore bubbled events on parent items, see #11641\n\t\tif ( actualTarget[ 0 ] !== target[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the item is already active, there's nothing to do\n\t\tif ( target.is( \".ui-state-active\" ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove ui-state-active class from siblings of the newly focused menu item\n\t\t// to avoid a jump caused by adjacent elements both having a class with a border\n\t\tthis._removeClass( target.siblings().children( \".ui-state-active\" ),\n\t\t\tnull, \"ui-state-active\" );\n\t\tthis.focus( event, target );\n\t},\n\n\t_destroy: function() {\n\t\tvar items = this.element.find( \".ui-menu-item\" )\n\t\t\t\t.removeAttr( \"role aria-disabled\" ),\n\t\t\tsubmenus = items.children( \".ui-menu-item-wrapper\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.removeAttr( \"tabIndex role aria-haspopup\" );\n\n\t\t// Destroy (sub)menus\n\t\tthis.element\n\t\t\t.removeAttr( \"aria-activedescendant\" )\n\t\t\t.find( \".ui-menu\" ).addBack()\n\t\t\t\t.removeAttr( \"role aria-labelledby aria-expanded aria-hidden aria-disabled \" +\n\t\t\t\t\t\"tabIndex\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.show();\n\n\t\tsubmenus.children().each( function() {\n\t\t\tvar elem = $( this );\n\t\t\tif ( elem.data( \"ui-menu-submenu-caret\" ) ) {\n\t\t\t\telem.remove();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar match, prev, character, skip,\n\t\t\tpreventDefault = true;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\tthis.previousPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\tthis.nextPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tthis._move( \"first\", \"first\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tthis._move( \"last\", \"last\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\t\tthis.previous( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tthis.next( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.RIGHT:\n\t\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\t\tthis.expand( event );\n\t\t\t}\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ENTER:\n\t\tcase $.ui.keyCode.SPACE:\n\t\t\tthis._activate( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tpreventDefault = false;\n\t\t\tprev = this.previousFilter || \"\";\n\t\t\tskip = false;\n\n\t\t\t// Support number pad values\n\t\t\tcharacter = event.keyCode >= 96 && event.keyCode <= 105 ?\n\t\t\t\t( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode );\n\n\t\t\tclearTimeout( this.filterTimer );\n\n\t\t\tif ( character === prev ) {\n\t\t\t\tskip = true;\n\t\t\t} else {\n\t\t\t\tcharacter = prev + character;\n\t\t\t}\n\n\t\t\tmatch = this._filterMenuItems( character );\n\t\t\tmatch = skip && match.index( this.active.next() ) !== -1 ?\n\t\t\t\tthis.active.nextAll( \".ui-menu-item\" ) :\n\t\t\t\tmatch;\n\n\t\t\t// If no matches on the current filter, reset to the last character pressed\n\t\t\t// to move down the menu to the first item that starts with that character\n\t\t\tif ( !match.length ) {\n\t\t\t\tcharacter = String.fromCharCode( event.keyCode );\n\t\t\t\tmatch = this._filterMenuItems( character );\n\t\t\t}\n\n\t\t\tif ( match.length ) {\n\t\t\t\tthis.focus( event, match );\n\t\t\t\tthis.previousFilter = character;\n\t\t\t\tthis.filterTimer = this._delay( function() {\n\t\t\t\t\tdelete this.previousFilter;\n\t\t\t\t}, 1000 );\n\t\t\t} else {\n\t\t\t\tdelete this.previousFilter;\n\t\t\t}\n\t\t}\n\n\t\tif ( preventDefault ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_activate: function( event ) {\n\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\tif ( this.active.children( \"[aria-haspopup='true']\" ).length ) {\n\t\t\t\tthis.expand( event );\n\t\t\t} else {\n\t\t\t\tthis.select( event );\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar menus, items, newSubmenus, newItems, newWrappers,\n\t\t\tthat = this,\n\t\t\ticon = this.options.icons.submenu,\n\t\t\tsubmenus = this.element.find( this.options.menus );\n\n\t\tthis._toggleClass( \"ui-menu-icons\", null, !!this.element.find( \".ui-icon\" ).length );\n\n\t\t// Initialize nested menus\n\t\tnewSubmenus = submenus.filter( \":not(.ui-menu)\" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t} )\n\t\t\t.each( function() {\n\t\t\t\tvar menu = $( this ),\n\t\t\t\t\titem = menu.prev(),\n\t\t\t\t\tsubmenuCaret = $( \"<span>\" ).data( \"ui-menu-submenu-caret\", true );\n\n\t\t\t\tthat._addClass( submenuCaret, \"ui-menu-icon\", \"ui-icon \" + icon );\n\t\t\t\titem\n\t\t\t\t\t.attr( \"aria-haspopup\", \"true\" )\n\t\t\t\t\t.prepend( submenuCaret );\n\t\t\t\tmenu.attr( \"aria-labelledby\", item.attr( \"id\" ) );\n\t\t\t} );\n\n\t\tthis._addClass( newSubmenus, \"ui-menu\", \"ui-widget ui-widget-content ui-front\" );\n\n\t\tmenus = submenus.add( this.element );\n\t\titems = menus.find( this.options.items );\n\n\t\t// Initialize menu-items containing spaces and/or dashes only as dividers\n\t\titems.not( \".ui-menu-item\" ).each( function() {\n\t\t\tvar item = $( this );\n\t\t\tif ( that._isDivider( item ) ) {\n\t\t\t\tthat._addClass( item, \"ui-menu-divider\", \"ui-widget-content\" );\n\t\t\t}\n\t\t} );\n\n\t\t// Don't refresh list items that are already adapted\n\t\tnewItems = items.not( \".ui-menu-item, .ui-menu-divider\" );\n\t\tnewWrappers = newItems.children()\n\t\t\t.not( \".ui-menu\" )\n\t\t\t\t.uniqueId()\n\t\t\t\t.attr( {\n\t\t\t\t\ttabIndex: -1,\n\t\t\t\t\trole: this._itemRole()\n\t\t\t\t} );\n\t\tthis._addClass( newItems, \"ui-menu-item\" )\n\t\t\t._addClass( newWrappers, \"ui-menu-item-wrapper\" );\n\n\t\t// Add aria-disabled attribute to any disabled menu item\n\t\titems.filter( \".ui-state-disabled\" ).attr( \"aria-disabled\", \"true\" );\n\n\t\t// If the active item has been removed, blur the menu\n\t\tif ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\t\t\tthis.blur();\n\t\t}\n\t},\n\n\t_itemRole: function() {\n\t\treturn {\n\t\t\tmenu: \"menuitem\",\n\t\t\tlistbox: \"option\"\n\t\t}[ this.options.role ];\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tvar icons = this.element.find( \".ui-menu-icon\" );\n\t\t\tthis._removeClass( icons, null, this.options.icons.submenu )\n\t\t\t\t._addClass( icons, null, value.submenu );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", String( value ) );\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\tfocus: function( event, item ) {\n\t\tvar nested, focused, activeParent;\n\t\tthis.blur( event, event && event.type === \"focus\" );\n\n\t\tthis._scrollIntoView( item );\n\n\t\tthis.active = item.first();\n\n\t\tfocused = this.active.children( \".ui-menu-item-wrapper\" );\n\t\tthis._addClass( focused, null, \"ui-state-active\" );\n\n\t\t// Only update aria-activedescendant if there's a role\n\t\t// otherwise we assume focus is managed elsewhere\n\t\tif ( this.options.role ) {\n\t\t\tthis.element.attr( \"aria-activedescendant\", focused.attr( \"id\" ) );\n\t\t}\n\n\t\t// Highlight active parent menu item, if any\n\t\tactiveParent = this.active\n\t\t\t.parent()\n\t\t\t\t.closest( \".ui-menu-item\" )\n\t\t\t\t\t.children( \".ui-menu-item-wrapper\" );\n\t\tthis._addClass( activeParent, null, \"ui-state-active\" );\n\n\t\tif ( event && event.type === \"keydown\" ) {\n\t\t\tthis._close();\n\t\t} else {\n\t\t\tthis.timer = this._delay( function() {\n\t\t\t\tthis._close();\n\t\t\t}, this.delay );\n\t\t}\n\n\t\tnested = item.children( \".ui-menu\" );\n\t\tif ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {\n\t\t\tthis._startOpening( nested );\n\t\t}\n\t\tthis.activeMenu = item.parent();\n\n\t\tthis._trigger( \"focus\", event, { item: item } );\n\t},\n\n\t_scrollIntoView: function( item ) {\n\t\tvar borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;\n\t\tif ( this._hasScroll() ) {\n\t\t\tborderTop = parseFloat( $.css( this.activeMenu[ 0 ], \"borderTopWidth\" ) ) || 0;\n\t\t\tpaddingTop = parseFloat( $.css( this.activeMenu[ 0 ], \"paddingTop\" ) ) || 0;\n\t\t\toffset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;\n\t\t\tscroll = this.activeMenu.scrollTop();\n\t\t\telementHeight = this.activeMenu.height();\n\t\t\titemHeight = item.outerHeight();\n\n\t\t\tif ( offset < 0 ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset );\n\t\t\t} else if ( offset + itemHeight > elementHeight ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );\n\t\t\t}\n\t\t}\n\t},\n\n\tblur: function( event, fromFocus ) {\n\t\tif ( !fromFocus ) {\n\t\t\tclearTimeout( this.timer );\n\t\t}\n\n\t\tif ( !this.active ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._removeClass( this.active.children( \".ui-menu-item-wrapper\" ),\n\t\t\tnull, \"ui-state-active\" );\n\n\t\tthis._trigger( \"blur\", event, { item: this.active } );\n\t\tthis.active = null;\n\t},\n\n\t_startOpening: function( submenu ) {\n\t\tclearTimeout( this.timer );\n\n\t\t// Don't open if already open fixes a Firefox bug that caused a .5 pixel\n\t\t// shift in the submenu position when mousing over the caret icon\n\t\tif ( submenu.attr( \"aria-hidden\" ) !== \"true\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._close();\n\t\t\tthis._open( submenu );\n\t\t}, this.delay );\n\t},\n\n\t_open: function( submenu ) {\n\t\tvar position = $.extend( {\n\t\t\tof: this.active\n\t\t}, this.options.position );\n\n\t\tclearTimeout( this.timer );\n\t\tthis.element.find( \".ui-menu\" ).not( submenu.parents( \".ui-menu\" ) )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" );\n\n\t\tsubmenu\n\t\t\t.show()\n\t\t\t.removeAttr( \"aria-hidden\" )\n\t\t\t.attr( \"aria-expanded\", \"true\" )\n\t\t\t.position( position );\n\t},\n\n\tcollapseAll: function( event, all ) {\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\n\t\t\t// If we were passed an event, look for the submenu that contains the event\n\t\t\tvar currentMenu = all ? this.element :\n\t\t\t\t$( event && event.target ).closest( this.element.find( \".ui-menu\" ) );\n\n\t\t\t// If we found no valid submenu ancestor, use the main menu to close all\n\t\t\t// sub menus anyway\n\t\t\tif ( !currentMenu.length ) {\n\t\t\t\tcurrentMenu = this.element;\n\t\t\t}\n\n\t\t\tthis._close( currentMenu );\n\n\t\t\tthis.blur( event );\n\n\t\t\t// Work around active item staying active after menu is blurred\n\t\t\tthis._removeClass( currentMenu.find( \".ui-state-active\" ), null, \"ui-state-active\" );\n\n\t\t\tthis.activeMenu = currentMenu;\n\t\t}, all ? 0 : this.delay );\n\t},\n\n\t// With no arguments, closes the currently active menu - if nothing is active\n\t// it closes all menus.  If passed an argument, it will search for menus BELOW\n\t_close: function( startMenu ) {\n\t\tif ( !startMenu ) {\n\t\t\tstartMenu = this.active ? this.active.parent() : this.element;\n\t\t}\n\n\t\tstartMenu.find( \".ui-menu\" )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" )\n\t\t\t.attr( \"aria-expanded\", \"false\" );\n\t},\n\n\t_closeOnDocumentClick: function( event ) {\n\t\treturn !$( event.target ).closest( \".ui-menu\" ).length;\n\t},\n\n\t_isDivider: function( item ) {\n\n\t\t// Match hyphen, em dash, en dash\n\t\treturn !/[^\\-\\u2014\\u2013\\s]/.test( item.text() );\n\t},\n\n\tcollapse: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active.parent().closest( \".ui-menu-item\", this.element );\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._close();\n\t\t\tthis.focus( event, newItem );\n\t\t}\n\t},\n\n\texpand: function( event ) {\n\t\tvar newItem = this.active && this._menuItems( this.active.children( \".ui-menu\" ) ).first();\n\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._open( newItem.parent() );\n\n\t\t\t// Delay so Firefox will not hide activedescendant change in expanding submenu from AT\n\t\t\tthis._delay( function() {\n\t\t\t\tthis.focus( event, newItem );\n\t\t\t} );\n\t\t}\n\t},\n\n\tnext: function( event ) {\n\t\tthis._move( \"next\", \"first\", event );\n\t},\n\n\tprevious: function( event ) {\n\t\tthis._move( \"prev\", \"last\", event );\n\t},\n\n\tisFirstItem: function() {\n\t\treturn this.active && !this.active.prevAll( \".ui-menu-item\" ).length;\n\t},\n\n\tisLastItem: function() {\n\t\treturn this.active && !this.active.nextAll( \".ui-menu-item\" ).length;\n\t},\n\n\t_menuItems: function( menu ) {\n\t\treturn ( menu || this.element )\n\t\t\t.find( this.options.items )\n\t\t\t.filter( \".ui-menu-item\" );\n\t},\n\n\t_move: function( direction, filter, event ) {\n\t\tvar next;\n\t\tif ( this.active ) {\n\t\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.last();\n\t\t\t} else {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction + \"All\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.first();\n\t\t\t}\n\t\t}\n\t\tif ( !next || !next.length || !this.active ) {\n\t\t\tnext = this._menuItems( this.activeMenu )[ filter ]();\n\t\t}\n\n\t\tthis.focus( event, next );\n\t},\n\n\tnextPage: function( event ) {\n\t\tvar item, base, height;\n\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isLastItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.innerHeight();\n\n\t\t\t// jQuery 3.2 doesn't include scrollbars in innerHeight, add it back.\n\t\t\tif ( $.fn.jquery.indexOf( \"3.2.\" ) === 0 ) {\n\t\t\t\theight += this.element[ 0 ].offsetHeight - this.element.outerHeight();\n\t\t\t}\n\n\t\t\tthis.active.nextAll( \".ui-menu-item\" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base - height < 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this._menuItems( this.activeMenu )\n\t\t\t\t[ !this.active ? \"first\" : \"last\" ]() );\n\t\t}\n\t},\n\n\tpreviousPage: function( event ) {\n\t\tvar item, base, height;\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isFirstItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.innerHeight();\n\n\t\t\t// jQuery 3.2 doesn't include scrollbars in innerHeight, add it back.\n\t\t\tif ( $.fn.jquery.indexOf( \"3.2.\" ) === 0 ) {\n\t\t\t\theight += this.element[ 0 ].offsetHeight - this.element.outerHeight();\n\t\t\t}\n\n\t\t\tthis.active.prevAll( \".ui-menu-item\" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base + height > 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this._menuItems( this.activeMenu ).first() );\n\t\t}\n\t},\n\n\t_hasScroll: function() {\n\t\treturn this.element.outerHeight() < this.element.prop( \"scrollHeight\" );\n\t},\n\n\tselect: function( event ) {\n\n\t\t// TODO: It should never be possible to not have an active item at this\n\t\t// point, but the tests don't trigger mouseenter before click.\n\t\tthis.active = this.active || $( event.target ).closest( \".ui-menu-item\" );\n\t\tvar ui = { item: this.active };\n\t\tif ( !this.active.has( \".ui-menu\" ).length ) {\n\t\t\tthis.collapseAll( event, true );\n\t\t}\n\t\tthis._trigger( \"select\", event, ui );\n\t},\n\n\t_filterMenuItems: function( character ) {\n\t\tvar escapedCharacter = character.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" ),\n\t\t\tregex = new RegExp( \"^\" + escapedCharacter, \"i\" );\n\n\t\treturn this.activeMenu\n\t\t\t.find( this.options.items )\n\n\t\t\t\t// Only match on items, not dividers or other content (#10571)\n\t\t\t\t.filter( \".ui-menu-item\" )\n\t\t\t\t\t.filter( function() {\n\t\t\t\t\t\treturn regex.test(\n\t\t\t\t\t\t\tString.prototype.trim.call(\n\t\t\t\t\t\t\t\t$( this ).children( \".ui-menu-item-wrapper\" ).text() ) );\n\t\t\t\t\t} );\n\t}\n} );\n\n\n/*!\n * jQuery UI Autocomplete 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Autocomplete\n//>>group: Widgets\n//>>description: Lists suggested words as the user is typing.\n//>>docs: https://api.jqueryui.com/autocomplete/\n//>>demos: https://jqueryui.com/autocomplete/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/autocomplete.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.autocomplete\", {\n\tversion: \"1.13.3\",\n\tdefaultElement: \"<input>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tautoFocus: false,\n\t\tdelay: 300,\n\t\tminLength: 1,\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\tsource: null,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresponse: null,\n\t\tsearch: null,\n\t\tselect: null\n\t},\n\n\trequestIndex: 0,\n\tpending: 0,\n\tliveRegionTimer: null,\n\n\t_create: function() {\n\n\t\t// Some browsers only repeat keydown events, not keypress events,\n\t\t// so we use the suppressKeyPress flag to determine if we've already\n\t\t// handled the keydown event. #7269\n\t\t// Unfortunately the code for & in keypress is the same as the up arrow,\n\t\t// so we use the suppressKeyPressRepeat flag to avoid handling keypress\n\t\t// events when we know the keydown event was used to modify the\n\t\t// search term. #7799\n\t\tvar suppressKeyPress, suppressKeyPressRepeat, suppressInput,\n\t\t\tnodeName = this.element[ 0 ].nodeName.toLowerCase(),\n\t\t\tisTextarea = nodeName === \"textarea\",\n\t\t\tisInput = nodeName === \"input\";\n\n\t\t// Textareas are always multi-line\n\t\t// Inputs are always single-line, even if inside a contentEditable element\n\t\t// IE also treats inputs as contentEditable\n\t\t// All other element types are determined by whether or not they're contentEditable\n\t\tthis.isMultiLine = isTextarea || !isInput && this._isContentEditable( this.element );\n\n\t\tthis.valueMethod = this.element[ isTextarea || isInput ? \"val\" : \"text\" ];\n\t\tthis.isNewMenu = true;\n\n\t\tthis._addClass( \"ui-autocomplete-input\" );\n\t\tthis.element.attr( \"autocomplete\", \"off\" );\n\n\t\tthis._on( this.element, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.element.prop( \"readOnly\" ) ) {\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tsuppressInput = true;\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsuppressKeyPress = false;\n\t\t\t\tsuppressInput = false;\n\t\t\t\tsuppressKeyPressRepeat = false;\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ENTER:\n\n\t\t\t\t\t// when menu is open and has focus\n\t\t\t\t\tif ( this.menu.active ) {\n\n\t\t\t\t\t\t// #6055 - Opera still allows the keypress to occur\n\t\t\t\t\t\t// which causes forms to submit\n\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.TAB:\n\t\t\t\t\tif ( this.menu.active ) {\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ESCAPE:\n\t\t\t\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\t\t\t\tthis._value( this.term );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.close( event );\n\n\t\t\t\t\t\t// Different browsers have different default behavior for escape\n\t\t\t\t\t\t// Single press can mean undo or clear\n\t\t\t\t\t\t// Double press in IE means clear the whole form\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\n\t\t\t\t\t// search timeout should be triggered before the input value is changed\n\t\t\t\t\tthis._searchTimeout( event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tkeypress: function( event ) {\n\t\t\t\tif ( suppressKeyPress ) {\n\t\t\t\t\tsuppressKeyPress = false;\n\t\t\t\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( suppressKeyPressRepeat ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Replicate some key handlers to allow them to repeat in Firefox and Opera\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tinput: function( event ) {\n\t\t\t\tif ( suppressInput ) {\n\t\t\t\t\tsuppressInput = false;\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._searchTimeout( event );\n\t\t\t},\n\t\t\tfocus: function() {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.previous = this._value();\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tclearTimeout( this.searching );\n\t\t\t\tthis.close( event );\n\t\t\t\tthis._change( event );\n\t\t\t}\n\t\t} );\n\n\t\tthis._initSource();\n\t\tthis.menu = $( \"<ul>\" )\n\t\t\t.appendTo( this._appendTo() )\n\t\t\t.menu( {\n\n\t\t\t\t// disable ARIA support, the live region takes care of that\n\t\t\t\trole: null\n\t\t\t} )\n\t\t\t.hide()\n\n\t\t\t// Support: IE 11 only, Edge <= 14\n\t\t\t// For other browsers, we preventDefault() on the mousedown event\n\t\t\t// to keep the dropdown from taking focus from the input. This doesn't\n\t\t\t// work for IE/Edge, causing problems with selection and scrolling (#9638)\n\t\t\t// Happily, IE and Edge support an \"unselectable\" attribute that\n\t\t\t// prevents an element from receiving focus, exactly what we want here.\n\t\t\t.attr( {\n\t\t\t\t\"unselectable\": \"on\"\n\t\t\t} )\n\t\t\t.menu( \"instance\" );\n\n\t\tthis._addClass( this.menu.element, \"ui-autocomplete\", \"ui-front\" );\n\t\tthis._on( this.menu.element, {\n\t\t\tmousedown: function( event ) {\n\n\t\t\t\t// Prevent moving focus out of the text field\n\t\t\t\tevent.preventDefault();\n\t\t\t},\n\t\t\tmenufocus: function( event, ui ) {\n\t\t\t\tvar label, item;\n\n\t\t\t\t// support: Firefox\n\t\t\t\t// Prevent accidental activation of menu items in Firefox (#7024 #9118)\n\t\t\t\tif ( this.isNewMenu ) {\n\t\t\t\t\tthis.isNewMenu = false;\n\t\t\t\t\tif ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis.menu.blur();\n\n\t\t\t\t\t\tthis.document.one( \"mousemove\", function() {\n\t\t\t\t\t\t\t$( event.target ).trigger( event.originalEvent );\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\titem = ui.item.data( \"ui-autocomplete-item\" );\n\t\t\t\tif ( false !== this._trigger( \"focus\", event, { item: item } ) ) {\n\n\t\t\t\t\t// use value to match what will end up in the input, if it was a key event\n\t\t\t\t\tif ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis._value( item.value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Announce the value in the liveRegion\n\t\t\t\tlabel = ui.item.attr( \"aria-label\" ) || item.value;\n\t\t\t\tif ( label && String.prototype.trim.call( label ).length ) {\n\t\t\t\t\tclearTimeout( this.liveRegionTimer );\n\t\t\t\t\tthis.liveRegionTimer = this._delay( function() {\n\t\t\t\t\t\tthis.liveRegion.html( $( \"<div>\" ).text( label ) );\n\t\t\t\t\t}, 100 );\n\t\t\t\t}\n\t\t\t},\n\t\t\tmenuselect: function( event, ui ) {\n\t\t\t\tvar item = ui.item.data( \"ui-autocomplete-item\" ),\n\t\t\t\t\tprevious = this.previous;\n\n\t\t\t\t// Only trigger when focus was lost (click on menu)\n\t\t\t\tif ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {\n\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\tthis.previous = previous;\n\n\t\t\t\t\t// #6109 - IE triggers two focus events and the second\n\t\t\t\t\t// is asynchronous, so we need to reset the previous\n\t\t\t\t\t// term synchronously and asynchronously :-(\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t\tthis.selectedItem = item;\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tif ( false !== this._trigger( \"select\", event, { item: item } ) ) {\n\t\t\t\t\tthis._value( item.value );\n\t\t\t\t}\n\n\t\t\t\t// reset the term after the select event\n\t\t\t\t// this allows custom select handling to work properly\n\t\t\t\tthis.term = this._value();\n\n\t\t\t\tthis.close( event );\n\t\t\t\tthis.selectedItem = item;\n\t\t\t}\n\t\t} );\n\n\t\tthis.liveRegion = $( \"<div>\", {\n\t\t\trole: \"status\",\n\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\"aria-relevant\": \"additions\"\n\t\t} )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\n\t\tthis._addClass( this.liveRegion, null, \"ui-helper-hidden-accessible\" );\n\n\t\t// Turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tclearTimeout( this.searching );\n\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\tthis.menu.element.remove();\n\t\tthis.liveRegion.remove();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"source\" ) {\n\t\t\tthis._initSource();\n\t\t}\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menu.element.appendTo( this._appendTo() );\n\t\t}\n\t\tif ( key === \"disabled\" && value && this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\t},\n\n\t_isEventTargetInWidget: function( event ) {\n\t\tvar menuElement = this.menu.element[ 0 ];\n\n\t\treturn event.target === this.element[ 0 ] ||\n\t\t\tevent.target === menuElement ||\n\t\t\t$.contains( menuElement, event.target );\n\t},\n\n\t_closeOnClickOutside: function( event ) {\n\t\tif ( !this._isEventTargetInWidget( event ) ) {\n\t\t\tthis.close();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front, dialog\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_initSource: function() {\n\t\tvar array, url,\n\t\t\tthat = this;\n\t\tif ( Array.isArray( this.options.source ) ) {\n\t\t\tarray = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tresponse( $.ui.autocomplete.filter( array, request.term ) );\n\t\t\t};\n\t\t} else if ( typeof this.options.source === \"string\" ) {\n\t\t\turl = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tif ( that.xhr ) {\n\t\t\t\t\tthat.xhr.abort();\n\t\t\t\t}\n\t\t\t\tthat.xhr = $.ajax( {\n\t\t\t\t\turl: url,\n\t\t\t\t\tdata: request,\n\t\t\t\t\tdataType: \"json\",\n\t\t\t\t\tsuccess: function( data ) {\n\t\t\t\t\t\tresponse( data );\n\t\t\t\t\t},\n\t\t\t\t\terror: function() {\n\t\t\t\t\t\tresponse( [] );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t};\n\t\t} else {\n\t\t\tthis.source = this.options.source;\n\t\t}\n\t},\n\n\t_searchTimeout: function( event ) {\n\t\tclearTimeout( this.searching );\n\t\tthis.searching = this._delay( function() {\n\n\t\t\t// Search if the value has changed, or if the user retypes the same value (see #7434)\n\t\t\tvar equalValues = this.term === this._value(),\n\t\t\t\tmenuVisible = this.menu.element.is( \":visible\" ),\n\t\t\t\tmodifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n\n\t\t\tif ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.search( null, event );\n\t\t\t}\n\t\t}, this.options.delay );\n\t},\n\n\tsearch: function( value, event ) {\n\t\tvalue = value != null ? value : this._value();\n\n\t\t// Always save the actual value, not the one passed as an argument\n\t\tthis.term = this._value();\n\n\t\tif ( value.length < this.options.minLength ) {\n\t\t\treturn this.close( event );\n\t\t}\n\n\t\tif ( this._trigger( \"search\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._search( value );\n\t},\n\n\t_search: function( value ) {\n\t\tthis.pending++;\n\t\tthis._addClass( \"ui-autocomplete-loading\" );\n\t\tthis.cancelSearch = false;\n\n\t\tthis.source( { term: value }, this._response() );\n\t},\n\n\t_response: function() {\n\t\tvar index = ++this.requestIndex;\n\n\t\treturn function( content ) {\n\t\t\tif ( index === this.requestIndex ) {\n\t\t\t\tthis.__response( content );\n\t\t\t}\n\n\t\t\tthis.pending--;\n\t\t\tif ( !this.pending ) {\n\t\t\t\tthis._removeClass( \"ui-autocomplete-loading\" );\n\t\t\t}\n\t\t}.bind( this );\n\t},\n\n\t__response: function( content ) {\n\t\tif ( content ) {\n\t\t\tcontent = this._normalize( content );\n\t\t}\n\t\tthis._trigger( \"response\", null, { content: content } );\n\t\tif ( !this.options.disabled && content && content.length && !this.cancelSearch ) {\n\t\t\tthis._suggest( content );\n\t\t\tthis._trigger( \"open\" );\n\t\t} else {\n\n\t\t\t// use ._close() instead of .close() so we don't cancel future searches\n\t\t\tthis._close();\n\t\t}\n\t},\n\n\tclose: function( event ) {\n\t\tthis.cancelSearch = true;\n\t\tthis._close( event );\n\t},\n\n\t_close: function( event ) {\n\n\t\t// Remove the handler that closes the menu on outside clicks\n\t\tthis._off( this.document, \"mousedown\" );\n\n\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.menu.element.hide();\n\t\t\tthis.menu.blur();\n\t\t\tthis.isNewMenu = true;\n\t\t\tthis._trigger( \"close\", event );\n\t\t}\n\t},\n\n\t_change: function( event ) {\n\t\tif ( this.previous !== this._value() ) {\n\t\t\tthis._trigger( \"change\", event, { item: this.selectedItem } );\n\t\t}\n\t},\n\n\t_normalize: function( items ) {\n\n\t\t// assume all items have the right format when the first item is complete\n\t\tif ( items.length && items[ 0 ].label && items[ 0 ].value ) {\n\t\t\treturn items;\n\t\t}\n\t\treturn $.map( items, function( item ) {\n\t\t\tif ( typeof item === \"string\" ) {\n\t\t\t\treturn {\n\t\t\t\t\tlabel: item,\n\t\t\t\t\tvalue: item\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn $.extend( {}, item, {\n\t\t\t\tlabel: item.label || item.value,\n\t\t\t\tvalue: item.value || item.label\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_suggest: function( items ) {\n\t\tvar ul = this.menu.element.empty();\n\t\tthis._renderMenu( ul, items );\n\t\tthis.isNewMenu = true;\n\t\tthis.menu.refresh();\n\n\t\t// Size and position menu\n\t\tul.show();\n\t\tthis._resizeMenu();\n\t\tul.position( $.extend( {\n\t\t\tof: this.element\n\t\t}, this.options.position ) );\n\n\t\tif ( this.options.autoFocus ) {\n\t\t\tthis.menu.next();\n\t\t}\n\n\t\t// Listen for interactions outside of the widget (#6642)\n\t\tthis._on( this.document, {\n\t\t\tmousedown: \"_closeOnClickOutside\"\n\t\t} );\n\t},\n\n\t_resizeMenu: function() {\n\t\tvar ul = this.menu.element;\n\t\tul.outerWidth( Math.max(\n\n\t\t\t// Firefox wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping (#7513)\n\t\t\tul.width( \"\" ).outerWidth() + 1,\n\t\t\tthis.element.outerWidth()\n\t\t) );\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this;\n\t\t$.each( items, function( index, item ) {\n\t\t\tthat._renderItemData( ul, item );\n\t\t} );\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-autocomplete-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\treturn $( \"<li>\" )\n\t\t\t.append( $( \"<div>\" ).text( item.label ) )\n\t\t\t.appendTo( ul );\n\t},\n\n\t_move: function( direction, event ) {\n\t\tif ( !this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.search( null, event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.menu.isFirstItem() && /^previous/.test( direction ) ||\n\t\t\t\tthis.menu.isLastItem() && /^next/.test( direction ) ) {\n\n\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\tthis._value( this.term );\n\t\t\t}\n\n\t\t\tthis.menu.blur();\n\t\t\treturn;\n\t\t}\n\t\tthis.menu[ direction ]( event );\n\t},\n\n\twidget: function() {\n\t\treturn this.menu.element;\n\t},\n\n\t_value: function() {\n\t\treturn this.valueMethod.apply( this.element, arguments );\n\t},\n\n\t_keyEvent: function( keyEvent, event ) {\n\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis._move( keyEvent, event );\n\n\t\t\t// Prevents moving cursor to beginning/end of the text field in some browsers\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t// Support: Chrome <=50\n\t// We should be able to just use this.element.prop( \"isContentEditable\" )\n\t// but hidden elements always report false in Chrome.\n\t// https://code.google.com/p/chromium/issues/detail?id=313082\n\t_isContentEditable: function( element ) {\n\t\tif ( !element.length ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar editable = element.prop( \"contentEditable\" );\n\n\t\tif ( editable === \"inherit\" ) {\n\t\t\treturn this._isContentEditable( element.parent() );\n\t\t}\n\n\t\treturn editable === \"true\";\n\t}\n} );\n\n$.extend( $.ui.autocomplete, {\n\tescapeRegex: function( value ) {\n\t\treturn value.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" );\n\t},\n\tfilter: function( array, term ) {\n\t\tvar matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), \"i\" );\n\t\treturn $.grep( array, function( value ) {\n\t\t\treturn matcher.test( value.label || value.value || value );\n\t\t} );\n\t}\n} );\n\n// Live region extension, adding a `messages` option\n// NOTE: This is an experimental API. We are still investigating\n// a full solution for string manipulation and internationalization.\n$.widget( \"ui.autocomplete\", $.ui.autocomplete, {\n\toptions: {\n\t\tmessages: {\n\t\t\tnoResults: \"No search results.\",\n\t\t\tresults: function( amount ) {\n\t\t\t\treturn amount + ( amount > 1 ? \" results are\" : \" result is\" ) +\n\t\t\t\t\t\" available, use up and down arrow keys to navigate.\";\n\t\t\t}\n\t\t}\n\t},\n\n\t__response: function( content ) {\n\t\tvar message;\n\t\tthis._superApply( arguments );\n\t\tif ( this.options.disabled || this.cancelSearch ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( content && content.length ) {\n\t\t\tmessage = this.options.messages.results( content.length );\n\t\t} else {\n\t\t\tmessage = this.options.messages.noResults;\n\t\t}\n\t\tclearTimeout( this.liveRegionTimer );\n\t\tthis.liveRegionTimer = this._delay( function() {\n\t\t\tthis.liveRegion.html( $( \"<div>\" ).text( message ) );\n\t\t}, 100 );\n\t}\n} );\n\nvar widgetsAutocomplete = $.ui.autocomplete;\n\n\n/*!\n * jQuery UI Controlgroup 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Controlgroup\n//>>group: Widgets\n//>>description: Visually groups form control widgets\n//>>docs: https://api.jqueryui.com/controlgroup/\n//>>demos: https://jqueryui.com/controlgroup/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/controlgroup.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g;\n\nvar widgetsControlgroup = $.widget( \"ui.controlgroup\", {\n\tversion: \"1.13.3\",\n\tdefaultElement: \"<div>\",\n\toptions: {\n\t\tdirection: \"horizontal\",\n\t\tdisabled: null,\n\t\tonlyVisible: true,\n\t\titems: {\n\t\t\t\"button\": \"input[type=button], input[type=submit], input[type=reset], button, a\",\n\t\t\t\"controlgroupLabel\": \".ui-controlgroup-label\",\n\t\t\t\"checkboxradio\": \"input[type='checkbox'], input[type='radio']\",\n\t\t\t\"selectmenu\": \"select\",\n\t\t\t\"spinner\": \".ui-spinner-input\"\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._enhance();\n\t},\n\n\t// To support the enhanced option in jQuery Mobile, we isolate DOM manipulation\n\t_enhance: function() {\n\t\tthis.element.attr( \"role\", \"toolbar\" );\n\t\tthis.refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis._callChildMethod( \"destroy\" );\n\t\tthis.childWidgets.removeData( \"ui-controlgroup-data\" );\n\t\tthis.element.removeAttr( \"role\" );\n\t\tif ( this.options.items.controlgroupLabel ) {\n\t\t\tthis.element\n\t\t\t\t.find( this.options.items.controlgroupLabel )\n\t\t\t\t.find( \".ui-controlgroup-label-contents\" )\n\t\t\t\t.contents().unwrap();\n\t\t}\n\t},\n\n\t_initWidgets: function() {\n\t\tvar that = this,\n\t\t\tchildWidgets = [];\n\n\t\t// First we iterate over each of the items options\n\t\t$.each( this.options.items, function( widget, selector ) {\n\t\t\tvar labels;\n\t\t\tvar options = {};\n\n\t\t\t// Make sure the widget has a selector set\n\t\t\tif ( !selector ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( widget === \"controlgroupLabel\" ) {\n\t\t\t\tlabels = that.element.find( selector );\n\t\t\t\tlabels.each( function() {\n\t\t\t\t\tvar element = $( this );\n\n\t\t\t\t\tif ( element.children( \".ui-controlgroup-label-contents\" ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telement.contents()\n\t\t\t\t\t\t.wrapAll( \"<span class='ui-controlgroup-label-contents'></span>\" );\n\t\t\t\t} );\n\t\t\t\tthat._addClass( labels, null, \"ui-widget ui-widget-content ui-state-default\" );\n\t\t\t\tchildWidgets = childWidgets.concat( labels.get() );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure the widget actually exists\n\t\t\tif ( !$.fn[ widget ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// We assume everything is in the middle to start because we can't determine\n\t\t\t// first / last elements until all enhancments are done.\n\t\t\tif ( that[ \"_\" + widget + \"Options\" ] ) {\n\t\t\t\toptions = that[ \"_\" + widget + \"Options\" ]( \"middle\" );\n\t\t\t} else {\n\t\t\t\toptions = { classes: {} };\n\t\t\t}\n\n\t\t\t// Find instances of this widget inside controlgroup and init them\n\t\t\tthat.element\n\t\t\t\t.find( selector )\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar element = $( this );\n\t\t\t\t\tvar instance = element[ widget ]( \"instance\" );\n\n\t\t\t\t\t// We need to clone the default options for this type of widget to avoid\n\t\t\t\t\t// polluting the variable options which has a wider scope than a single widget.\n\t\t\t\t\tvar instanceOptions = $.widget.extend( {}, options );\n\n\t\t\t\t\t// If the button is the child of a spinner ignore it\n\t\t\t\t\t// TODO: Find a more generic solution\n\t\t\t\t\tif ( widget === \"button\" && element.parent( \".ui-spinner\" ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the widget if it doesn't exist\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\tinstance = element[ widget ]()[ widget ]( \"instance\" );\n\t\t\t\t\t}\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstanceOptions.classes =\n\t\t\t\t\t\t\tthat._resolveClassesValues( instanceOptions.classes, instance );\n\t\t\t\t\t}\n\t\t\t\t\telement[ widget ]( instanceOptions );\n\n\t\t\t\t\t// Store an instance of the controlgroup to be able to reference\n\t\t\t\t\t// from the outermost element for changing options and refresh\n\t\t\t\t\tvar widgetElement = element[ widget ]( \"widget\" );\n\t\t\t\t\t$.data( widgetElement[ 0 ], \"ui-controlgroup-data\",\n\t\t\t\t\t\tinstance ? instance : element[ widget ]( \"instance\" ) );\n\n\t\t\t\t\tchildWidgets.push( widgetElement[ 0 ] );\n\t\t\t\t} );\n\t\t} );\n\n\t\tthis.childWidgets = $( $.uniqueSort( childWidgets ) );\n\t\tthis._addClass( this.childWidgets, \"ui-controlgroup-item\" );\n\t},\n\n\t_callChildMethod: function( method ) {\n\t\tthis.childWidgets.each( function() {\n\t\t\tvar element = $( this ),\n\t\t\t\tdata = element.data( \"ui-controlgroup-data\" );\n\t\t\tif ( data && data[ method ] ) {\n\t\t\t\tdata[ method ]();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_updateCornerClass: function( element, position ) {\n\t\tvar remove = \"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all\";\n\t\tvar add = this._buildSimpleOptions( position, \"label\" ).classes.label;\n\n\t\tthis._removeClass( element, null, remove );\n\t\tthis._addClass( element, null, add );\n\t},\n\n\t_buildSimpleOptions: function( position, key ) {\n\t\tvar direction = this.options.direction === \"vertical\";\n\t\tvar result = {\n\t\t\tclasses: {}\n\t\t};\n\t\tresult.classes[ key ] = {\n\t\t\t\"middle\": \"\",\n\t\t\t\"first\": \"ui-corner-\" + ( direction ? \"top\" : \"left\" ),\n\t\t\t\"last\": \"ui-corner-\" + ( direction ? \"bottom\" : \"right\" ),\n\t\t\t\"only\": \"ui-corner-all\"\n\t\t}[ position ];\n\n\t\treturn result;\n\t},\n\n\t_spinnerOptions: function( position ) {\n\t\tvar options = this._buildSimpleOptions( position, \"ui-spinner\" );\n\n\t\toptions.classes[ \"ui-spinner-up\" ] = \"\";\n\t\toptions.classes[ \"ui-spinner-down\" ] = \"\";\n\n\t\treturn options;\n\t},\n\n\t_buttonOptions: function( position ) {\n\t\treturn this._buildSimpleOptions( position, \"ui-button\" );\n\t},\n\n\t_checkboxradioOptions: function( position ) {\n\t\treturn this._buildSimpleOptions( position, \"ui-checkboxradio-label\" );\n\t},\n\n\t_selectmenuOptions: function( position ) {\n\t\tvar direction = this.options.direction === \"vertical\";\n\t\treturn {\n\t\t\twidth: direction ? \"auto\" : false,\n\t\t\tclasses: {\n\t\t\t\tmiddle: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"\"\n\t\t\t\t},\n\t\t\t\tfirst: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-\" + ( direction ? \"top\" : \"tl\" ),\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-\" + ( direction ? \"top\" : \"left\" )\n\t\t\t\t},\n\t\t\t\tlast: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": direction ? \"\" : \"ui-corner-tr\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-\" + ( direction ? \"bottom\" : \"right\" )\n\t\t\t\t},\n\t\t\t\tonly: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-top\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-all\"\n\t\t\t\t}\n\n\t\t\t}[ position ]\n\t\t};\n\t},\n\n\t_resolveClassesValues: function( classes, instance ) {\n\t\tvar result = {};\n\t\t$.each( classes, function( key ) {\n\t\t\tvar current = instance.options.classes[ key ] || \"\";\n\t\t\tcurrent = String.prototype.trim.call( current.replace( controlgroupCornerRegex, \"\" ) );\n\t\t\tresult[ key ] = ( current + \" \" + classes[ key ] ).replace( /\\s+/g, \" \" );\n\t\t} );\n\t\treturn result;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"direction\" ) {\n\t\t\tthis._removeClass( \"ui-controlgroup-\" + this.options.direction );\n\t\t}\n\n\t\tthis._super( key, value );\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._callChildMethod( value ? \"disable\" : \"enable\" );\n\t\t\treturn;\n\t\t}\n\n\t\tthis.refresh();\n\t},\n\n\trefresh: function() {\n\t\tvar children,\n\t\t\tthat = this;\n\n\t\tthis._addClass( \"ui-controlgroup ui-controlgroup-\" + this.options.direction );\n\n\t\tif ( this.options.direction === \"horizontal\" ) {\n\t\t\tthis._addClass( null, \"ui-helper-clearfix\" );\n\t\t}\n\t\tthis._initWidgets();\n\n\t\tchildren = this.childWidgets;\n\n\t\t// We filter here because we need to track all childWidgets not just the visible ones\n\t\tif ( this.options.onlyVisible ) {\n\t\t\tchildren = children.filter( \":visible\" );\n\t\t}\n\n\t\tif ( children.length ) {\n\n\t\t\t// We do this last because we need to make sure all enhancment is done\n\t\t\t// before determining first and last\n\t\t\t$.each( [ \"first\", \"last\" ], function( index, value ) {\n\t\t\t\tvar instance = children[ value ]().data( \"ui-controlgroup-data\" );\n\n\t\t\t\tif ( instance && that[ \"_\" + instance.widgetName + \"Options\" ] ) {\n\t\t\t\t\tvar options = that[ \"_\" + instance.widgetName + \"Options\" ](\n\t\t\t\t\t\tchildren.length === 1 ? \"only\" : value\n\t\t\t\t\t);\n\t\t\t\t\toptions.classes = that._resolveClassesValues( options.classes, instance );\n\t\t\t\t\tinstance.element[ instance.widgetName ]( options );\n\t\t\t\t} else {\n\t\t\t\t\tthat._updateCornerClass( children[ value ](), value );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Finally call the refresh method on each of the child widgets.\n\t\t\tthis._callChildMethod( \"refresh\" );\n\t\t}\n\t}\n} );\n\n/*!\n * jQuery UI Checkboxradio 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Checkboxradio\n//>>group: Widgets\n//>>description: Enhances a form with multiple themeable checkboxes or radio buttons.\n//>>docs: https://api.jqueryui.com/checkboxradio/\n//>>demos: https://jqueryui.com/checkboxradio/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/button.css\n//>>css.structure: ../../themes/base/checkboxradio.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.checkboxradio\", [ $.ui.formResetMixin, {\n\tversion: \"1.13.3\",\n\toptions: {\n\t\tdisabled: null,\n\t\tlabel: null,\n\t\ticon: true,\n\t\tclasses: {\n\t\t\t\"ui-checkboxradio-label\": \"ui-corner-all\",\n\t\t\t\"ui-checkboxradio-icon\": \"ui-corner-all\"\n\t\t}\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar disabled, labels, labelContents;\n\t\tvar options = this._super() || {};\n\n\t\t// We read the type here, because it makes more sense to throw a element type error first,\n\t\t// rather then the error for lack of a label. Often if its the wrong type, it\n\t\t// won't have a label (e.g. calling on a div, btn, etc)\n\t\tthis._readType();\n\n\t\tlabels = this.element.labels();\n\n\t\t// If there are multiple labels, use the last one\n\t\tthis.label = $( labels[ labels.length - 1 ] );\n\t\tif ( !this.label.length ) {\n\t\t\t$.error( \"No label found for checkboxradio widget\" );\n\t\t}\n\n\t\tthis.originalLabel = \"\";\n\n\t\t// We need to get the label text but this may also need to make sure it does not contain the\n\t\t// input itself.\n\t\t// The label contents could be text, html, or a mix. We wrap all elements\n\t\t// and read the wrapper's `innerHTML` to get a string representation of\n\t\t// the label, without the input as part of it.\n\t\tlabelContents = this.label.contents().not( this.element[ 0 ] );\n\n\t\tif ( labelContents.length ) {\n\t\t\tthis.originalLabel += labelContents\n\t\t\t\t.clone()\n\t\t\t\t.wrapAll( \"<div></div>\" )\n\t\t\t\t.parent()\n\t\t\t\t.html();\n\t\t}\n\n\t\t// Set the label option if we found label text\n\t\tif ( this.originalLabel ) {\n\t\t\toptions.label = this.originalLabel;\n\t\t}\n\n\t\tdisabled = this.element[ 0 ].disabled;\n\t\tif ( disabled != null ) {\n\t\t\toptions.disabled = disabled;\n\t\t}\n\t\treturn options;\n\t},\n\n\t_create: function() {\n\t\tvar checked = this.element[ 0 ].checked;\n\n\t\tthis._bindFormResetHandler();\n\n\t\tif ( this.options.disabled == null ) {\n\t\t\tthis.options.disabled = this.element[ 0 ].disabled;\n\t\t}\n\n\t\tthis._setOption( \"disabled\", this.options.disabled );\n\t\tthis._addClass( \"ui-checkboxradio\", \"ui-helper-hidden-accessible\" );\n\t\tthis._addClass( this.label, \"ui-checkboxradio-label\", \"ui-button ui-widget\" );\n\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tthis._addClass( this.label, \"ui-checkboxradio-radio-label\" );\n\t\t}\n\n\t\tif ( this.options.label && this.options.label !== this.originalLabel ) {\n\t\t\tthis._updateLabel();\n\t\t} else if ( this.originalLabel ) {\n\t\t\tthis.options.label = this.originalLabel;\n\t\t}\n\n\t\tthis._enhance();\n\n\t\tif ( checked ) {\n\t\t\tthis._addClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\" );\n\t\t}\n\n\t\tthis._on( {\n\t\t\tchange: \"_toggleClasses\",\n\t\t\tfocus: function() {\n\t\t\t\tthis._addClass( this.label, null, \"ui-state-focus ui-visual-focus\" );\n\t\t\t},\n\t\t\tblur: function() {\n\t\t\t\tthis._removeClass( this.label, null, \"ui-state-focus ui-visual-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_readType: function() {\n\t\tvar nodeName = this.element[ 0 ].nodeName.toLowerCase();\n\t\tthis.type = this.element[ 0 ].type;\n\t\tif ( nodeName !== \"input\" || !/radio|checkbox/.test( this.type ) ) {\n\t\t\t$.error( \"Can't create checkboxradio on element.nodeName=\" + nodeName +\n\t\t\t\t\" and element.type=\" + this.type );\n\t\t}\n\t},\n\n\t// Support jQuery Mobile enhanced option\n\t_enhance: function() {\n\t\tthis._updateIcon( this.element[ 0 ].checked );\n\t},\n\n\twidget: function() {\n\t\treturn this.label;\n\t},\n\n\t_getRadioGroup: function() {\n\t\tvar group;\n\t\tvar name = this.element[ 0 ].name;\n\t\tvar nameSelector = \"input[name='\" + $.escapeSelector( name ) + \"']\";\n\n\t\tif ( !name ) {\n\t\t\treturn $( [] );\n\t\t}\n\n\t\tif ( this.form.length ) {\n\t\t\tgroup = $( this.form[ 0 ].elements ).filter( nameSelector );\n\t\t} else {\n\n\t\t\t// Not inside a form, check all inputs that also are not inside a form\n\t\t\tgroup = $( nameSelector ).filter( function() {\n\t\t\t\treturn $( this )._form().length === 0;\n\t\t\t} );\n\t\t}\n\n\t\treturn group.not( this.element );\n\t},\n\n\t_toggleClasses: function() {\n\t\tvar checked = this.element[ 0 ].checked;\n\t\tthis._toggleClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\", checked );\n\n\t\tif ( this.options.icon && this.type === \"checkbox\" ) {\n\t\t\tthis._toggleClass( this.icon, null, \"ui-icon-check ui-state-checked\", checked )\n\t\t\t\t._toggleClass( this.icon, null, \"ui-icon-blank\", !checked );\n\t\t}\n\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tthis._getRadioGroup()\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar instance = $( this ).checkboxradio( \"instance\" );\n\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstance._removeClass( instance.label,\n\t\t\t\t\t\t\t\"ui-checkboxradio-checked\", \"ui-state-active\" );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tthis._unbindFormResetHandler();\n\n\t\tif ( this.icon ) {\n\t\t\tthis.icon.remove();\n\t\t\tthis.iconSpace.remove();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\t// We don't allow the value to be set to nothing\n\t\tif ( key === \"label\" && !value ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._toggleClass( this.label, null, \"ui-state-disabled\", value );\n\t\t\tthis.element[ 0 ].disabled = value;\n\n\t\t\t// Don't refresh when setting disabled\n\t\t\treturn;\n\t\t}\n\t\tthis.refresh();\n\t},\n\n\t_updateIcon: function( checked ) {\n\t\tvar toAdd = \"ui-icon ui-icon-background \";\n\n\t\tif ( this.options.icon ) {\n\t\t\tif ( !this.icon ) {\n\t\t\t\tthis.icon = $( \"<span>\" );\n\t\t\t\tthis.iconSpace = $( \"<span> </span>\" );\n\t\t\t\tthis._addClass( this.iconSpace, \"ui-checkboxradio-icon-space\" );\n\t\t\t}\n\n\t\t\tif ( this.type === \"checkbox\" ) {\n\t\t\t\ttoAdd += checked ? \"ui-icon-check ui-state-checked\" : \"ui-icon-blank\";\n\t\t\t\tthis._removeClass( this.icon, null, checked ? \"ui-icon-blank\" : \"ui-icon-check\" );\n\t\t\t} else {\n\t\t\t\ttoAdd += \"ui-icon-blank\";\n\t\t\t}\n\t\t\tthis._addClass( this.icon, \"ui-checkboxradio-icon\", toAdd );\n\t\t\tif ( !checked ) {\n\t\t\t\tthis._removeClass( this.icon, null, \"ui-icon-check ui-state-checked\" );\n\t\t\t}\n\t\t\tthis.icon.prependTo( this.label ).after( this.iconSpace );\n\t\t} else if ( this.icon !== undefined ) {\n\t\t\tthis.icon.remove();\n\t\t\tthis.iconSpace.remove();\n\t\t\tdelete this.icon;\n\t\t}\n\t},\n\n\t_updateLabel: function() {\n\n\t\t// Remove the contents of the label ( minus the icon, icon space, and input )\n\t\tvar contents = this.label.contents().not( this.element[ 0 ] );\n\t\tif ( this.icon ) {\n\t\t\tcontents = contents.not( this.icon[ 0 ] );\n\t\t}\n\t\tif ( this.iconSpace ) {\n\t\t\tcontents = contents.not( this.iconSpace[ 0 ] );\n\t\t}\n\t\tcontents.remove();\n\n\t\tthis.label.append( this.options.label );\n\t},\n\n\trefresh: function() {\n\t\tvar checked = this.element[ 0 ].checked,\n\t\t\tisDisabled = this.element[ 0 ].disabled;\n\n\t\tthis._updateIcon( checked );\n\t\tthis._toggleClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\", checked );\n\t\tif ( this.options.label !== null ) {\n\t\t\tthis._updateLabel();\n\t\t}\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOptions( { \"disabled\": isDisabled } );\n\t\t}\n\t}\n\n} ] );\n\nvar widgetsCheckboxradio = $.ui.checkboxradio;\n\n\n/*!\n * jQuery UI Button 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Button\n//>>group: Widgets\n//>>description: Enhances a form with themeable buttons.\n//>>docs: https://api.jqueryui.com/button/\n//>>demos: https://jqueryui.com/button/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/button.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.button\", {\n\tversion: \"1.13.3\",\n\tdefaultElement: \"<button>\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-button\": \"ui-corner-all\"\n\t\t},\n\t\tdisabled: null,\n\t\ticon: null,\n\t\ticonPosition: \"beginning\",\n\t\tlabel: null,\n\t\tshowLabel: true\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar disabled,\n\n\t\t\t// This is to support cases like in jQuery Mobile where the base widget does have\n\t\t\t// an implementation of _getCreateOptions\n\t\t\toptions = this._super() || {};\n\n\t\tthis.isInput = this.element.is( \"input\" );\n\n\t\tdisabled = this.element[ 0 ].disabled;\n\t\tif ( disabled != null ) {\n\t\t\toptions.disabled = disabled;\n\t\t}\n\n\t\tthis.originalLabel = this.isInput ? this.element.val() : this.element.html();\n\t\tif ( this.originalLabel ) {\n\t\t\toptions.label = this.originalLabel;\n\t\t}\n\n\t\treturn options;\n\t},\n\n\t_create: function() {\n\t\tif ( !this.option.showLabel & !this.options.icon ) {\n\t\t\tthis.options.showLabel = true;\n\t\t}\n\n\t\t// We have to check the option again here even though we did in _getCreateOptions,\n\t\t// because null may have been passed on init which would override what was set in\n\t\t// _getCreateOptions\n\t\tif ( this.options.disabled == null ) {\n\t\t\tthis.options.disabled = this.element[ 0 ].disabled || false;\n\t\t}\n\n\t\tthis.hasTitle = !!this.element.attr( \"title\" );\n\n\t\t// Check to see if the label needs to be set or if its already correct\n\t\tif ( this.options.label && this.options.label !== this.originalLabel ) {\n\t\t\tif ( this.isInput ) {\n\t\t\t\tthis.element.val( this.options.label );\n\t\t\t} else {\n\t\t\t\tthis.element.html( this.options.label );\n\t\t\t}\n\t\t}\n\t\tthis._addClass( \"ui-button\", \"ui-widget\" );\n\t\tthis._setOption( \"disabled\", this.options.disabled );\n\t\tthis._enhance();\n\n\t\tif ( this.element.is( \"a\" ) ) {\n\t\t\tthis._on( {\n\t\t\t\t\"keyup\": function( event ) {\n\t\t\t\t\tif ( event.keyCode === $.ui.keyCode.SPACE ) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: PhantomJS <= 1.9, IE 8 Only\n\t\t\t\t\t\t// If a native click is available use it so we actually cause navigation\n\t\t\t\t\t\t// otherwise just trigger a click event\n\t\t\t\t\t\tif ( this.element[ 0 ].click ) {\n\t\t\t\t\t\t\tthis.element[ 0 ].click();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.element.trigger( \"click\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t},\n\n\t_enhance: function() {\n\t\tif ( !this.element.is( \"button\" ) ) {\n\t\t\tthis.element.attr( \"role\", \"button\" );\n\t\t}\n\n\t\tif ( this.options.icon ) {\n\t\t\tthis._updateIcon( \"icon\", this.options.icon );\n\t\t\tthis._updateTooltip();\n\t\t}\n\t},\n\n\t_updateTooltip: function() {\n\t\tthis.title = this.element.attr( \"title\" );\n\n\t\tif ( !this.options.showLabel && !this.title ) {\n\t\t\tthis.element.attr( \"title\", this.options.label );\n\t\t}\n\t},\n\n\t_updateIcon: function( option, value ) {\n\t\tvar icon = option !== \"iconPosition\",\n\t\t\tposition = icon ? this.options.iconPosition : value,\n\t\t\tdisplayBlock = position === \"top\" || position === \"bottom\";\n\n\t\t// Create icon\n\t\tif ( !this.icon ) {\n\t\t\tthis.icon = $( \"<span>\" );\n\n\t\t\tthis._addClass( this.icon, \"ui-button-icon\", \"ui-icon\" );\n\n\t\t\tif ( !this.options.showLabel ) {\n\t\t\t\tthis._addClass( \"ui-button-icon-only\" );\n\t\t\t}\n\t\t} else if ( icon ) {\n\n\t\t\t// If we are updating the icon remove the old icon class\n\t\t\tthis._removeClass( this.icon, null, this.options.icon );\n\t\t}\n\n\t\t// If we are updating the icon add the new icon class\n\t\tif ( icon ) {\n\t\t\tthis._addClass( this.icon, null, value );\n\t\t}\n\n\t\tthis._attachIcon( position );\n\n\t\t// If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove\n\t\t// the iconSpace if there is one.\n\t\tif ( displayBlock ) {\n\t\t\tthis._addClass( this.icon, null, \"ui-widget-icon-block\" );\n\t\t\tif ( this.iconSpace ) {\n\t\t\t\tthis.iconSpace.remove();\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Position is beginning or end so remove the ui-widget-icon-block class and add the\n\t\t\t// space if it does not exist\n\t\t\tif ( !this.iconSpace ) {\n\t\t\t\tthis.iconSpace = $( \"<span> </span>\" );\n\t\t\t\tthis._addClass( this.iconSpace, \"ui-button-icon-space\" );\n\t\t\t}\n\t\t\tthis._removeClass( this.icon, null, \"ui-wiget-icon-block\" );\n\t\t\tthis._attachIconSpace( position );\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeAttr( \"role\" );\n\n\t\tif ( this.icon ) {\n\t\t\tthis.icon.remove();\n\t\t}\n\t\tif ( this.iconSpace ) {\n\t\t\tthis.iconSpace.remove();\n\t\t}\n\t\tif ( !this.hasTitle ) {\n\t\t\tthis.element.removeAttr( \"title\" );\n\t\t}\n\t},\n\n\t_attachIconSpace: function( iconPosition ) {\n\t\tthis.icon[ /^(?:end|bottom)/.test( iconPosition ) ? \"before\" : \"after\" ]( this.iconSpace );\n\t},\n\n\t_attachIcon: function( iconPosition ) {\n\t\tthis.element[ /^(?:end|bottom)/.test( iconPosition ) ? \"append\" : \"prepend\" ]( this.icon );\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar newShowLabel = options.showLabel === undefined ?\n\t\t\t\tthis.options.showLabel :\n\t\t\t\toptions.showLabel,\n\t\t\tnewIcon = options.icon === undefined ? this.options.icon : options.icon;\n\n\t\tif ( !newShowLabel && !newIcon ) {\n\t\t\toptions.showLabel = true;\n\t\t}\n\t\tthis._super( options );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icon\" ) {\n\t\t\tif ( value ) {\n\t\t\t\tthis._updateIcon( key, value );\n\t\t\t} else if ( this.icon ) {\n\t\t\t\tthis.icon.remove();\n\t\t\t\tif ( this.iconSpace ) {\n\t\t\t\t\tthis.iconSpace.remove();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"iconPosition\" ) {\n\t\t\tthis._updateIcon( key, value );\n\t\t}\n\n\t\t// Make sure we can't end up with a button that has neither text nor icon\n\t\tif ( key === \"showLabel\" ) {\n\t\t\t\tthis._toggleClass( \"ui-button-icon-only\", null, !value );\n\t\t\t\tthis._updateTooltip();\n\t\t}\n\n\t\tif ( key === \"label\" ) {\n\t\t\tif ( this.isInput ) {\n\t\t\t\tthis.element.val( value );\n\t\t\t} else {\n\n\t\t\t\t// If there is an icon, append it, else nothing then append the value\n\t\t\t\t// this avoids removal of the icon when setting label text\n\t\t\t\tthis.element.html( value );\n\t\t\t\tif ( this.icon ) {\n\t\t\t\t\tthis._attachIcon( this.options.iconPosition );\n\t\t\t\t\tthis._attachIconSpace( this.options.iconPosition );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._toggleClass( null, \"ui-state-disabled\", value );\n\t\t\tthis.element[ 0 ].disabled = value;\n\t\t\tif ( value ) {\n\t\t\t\tthis.element.trigger( \"blur\" );\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\n\t\t// Make sure to only check disabled if its an element that supports this otherwise\n\t\t// check for the disabled class to determine state\n\t\tvar isDisabled = this.element.is( \"input, button\" ) ?\n\t\t\tthis.element[ 0 ].disabled : this.element.hasClass( \"ui-button-disabled\" );\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOptions( { disabled: isDisabled } );\n\t\t}\n\n\t\tthis._updateTooltip();\n\t}\n} );\n\n// DEPRECATED\nif ( $.uiBackCompat !== false ) {\n\n\t// Text and Icons options\n\t$.widget( \"ui.button\", $.ui.button, {\n\t\toptions: {\n\t\t\ttext: true,\n\t\t\ticons: {\n\t\t\t\tprimary: null,\n\t\t\t\tsecondary: null\n\t\t\t}\n\t\t},\n\n\t\t_create: function() {\n\t\t\tif ( this.options.showLabel && !this.options.text ) {\n\t\t\t\tthis.options.showLabel = this.options.text;\n\t\t\t}\n\t\t\tif ( !this.options.showLabel && this.options.text ) {\n\t\t\t\tthis.options.text = this.options.showLabel;\n\t\t\t}\n\t\t\tif ( !this.options.icon && ( this.options.icons.primary ||\n\t\t\t\t\tthis.options.icons.secondary ) ) {\n\t\t\t\tif ( this.options.icons.primary ) {\n\t\t\t\t\tthis.options.icon = this.options.icons.primary;\n\t\t\t\t} else {\n\t\t\t\t\tthis.options.icon = this.options.icons.secondary;\n\t\t\t\t\tthis.options.iconPosition = \"end\";\n\t\t\t\t}\n\t\t\t} else if ( this.options.icon ) {\n\t\t\t\tthis.options.icons.primary = this.options.icon;\n\t\t\t}\n\t\t\tthis._super();\n\t\t},\n\n\t\t_setOption: function( key, value ) {\n\t\t\tif ( key === \"text\" ) {\n\t\t\t\tthis._super( \"showLabel\", value );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( key === \"showLabel\" ) {\n\t\t\t\tthis.options.text = value;\n\t\t\t}\n\t\t\tif ( key === \"icon\" ) {\n\t\t\t\tthis.options.icons.primary = value;\n\t\t\t}\n\t\t\tif ( key === \"icons\" ) {\n\t\t\t\tif ( value.primary ) {\n\t\t\t\t\tthis._super( \"icon\", value.primary );\n\t\t\t\t\tthis._super( \"iconPosition\", \"beginning\" );\n\t\t\t\t} else if ( value.secondary ) {\n\t\t\t\t\tthis._super( \"icon\", value.secondary );\n\t\t\t\t\tthis._super( \"iconPosition\", \"end\" );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._superApply( arguments );\n\t\t}\n\t} );\n\n\t$.fn.button = ( function( orig ) {\n\t\treturn function( options ) {\n\t\t\tvar isMethodCall = typeof options === \"string\";\n\t\t\tvar args = Array.prototype.slice.call( arguments, 1 );\n\t\t\tvar returnValue = this;\n\n\t\t\tif ( isMethodCall ) {\n\n\t\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t\t// return undefined instead of the jQuery instance\n\t\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\t\treturnValue = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tthis.each( function() {\n\t\t\t\t\t\tvar methodValue;\n\t\t\t\t\t\tvar type = $( this ).attr( \"type\" );\n\t\t\t\t\t\tvar name = type !== \"checkbox\" && type !== \"radio\" ?\n\t\t\t\t\t\t\t\"button\" :\n\t\t\t\t\t\t\t\"checkboxradio\";\n\t\t\t\t\t\tvar instance = $.data( this, \"ui-\" + name );\n\n\t\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\t\treturn $.error( \"cannot call methods on button\" +\n\t\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( typeof instance[ options ] !== \"function\" ||\n\t\t\t\t\t\t\toptions.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for button\" +\n\t\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Allow multiple hashes to be passed on init\n\t\t\t\tif ( args.length ) {\n\t\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t\t}\n\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar type = $( this ).attr( \"type\" );\n\t\t\t\t\tvar name = type !== \"checkbox\" && type !== \"radio\" ? \"button\" : \"checkboxradio\";\n\t\t\t\t\tvar instance = $.data( this, \"ui-\" + name );\n\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( name === \"button\" ) {\n\t\t\t\t\t\t\torig.call( $( this ), options );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$( this ).checkboxradio( $.extend( { icon: false }, options ) );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn returnValue;\n\t\t};\n\t} )( $.fn.button );\n\n\t$.fn.buttonset = function() {\n\t\tif ( !$.ui.controlgroup ) {\n\t\t\t$.error( \"Controlgroup widget missing\" );\n\t\t}\n\t\tif ( arguments[ 0 ] === \"option\" && arguments[ 1 ] === \"items\" && arguments[ 2 ] ) {\n\t\t\treturn this.controlgroup.apply( this,\n\t\t\t\t[ arguments[ 0 ], \"items.button\", arguments[ 2 ] ] );\n\t\t}\n\t\tif ( arguments[ 0 ] === \"option\" && arguments[ 1 ] === \"items\" ) {\n\t\t\treturn this.controlgroup.apply( this, [ arguments[ 0 ], \"items.button\" ] );\n\t\t}\n\t\tif ( typeof arguments[ 0 ] === \"object\" && arguments[ 0 ].items ) {\n\t\t\targuments[ 0 ].items = {\n\t\t\t\tbutton: arguments[ 0 ].items\n\t\t\t};\n\t\t}\n\t\treturn this.controlgroup.apply( this, arguments );\n\t};\n}\n\nvar widgetsButton = $.ui.button;\n\n\n/* eslint-disable max-len, camelcase */\n/*!\n * jQuery UI Datepicker 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Datepicker\n//>>group: Widgets\n//>>description: Displays a calendar from an input or inline for selecting dates.\n//>>docs: https://api.jqueryui.com/datepicker/\n//>>demos: https://jqueryui.com/datepicker/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/datepicker.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.extend( $.ui, { datepicker: { version: \"1.13.3\" } } );\n\nvar datepicker_instActive;\n\nfunction datepicker_getZindex( elem ) {\n\tvar position, value;\n\twhile ( elem.length && elem[ 0 ] !== document ) {\n\n\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t// This makes behavior of this function consistent across browsers\n\t\t// WebKit always returns auto if the element is positioned\n\t\tposition = elem.css( \"position\" );\n\t\tif ( position === \"absolute\" || position === \"relative\" || position === \"fixed\" ) {\n\n\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t// other browsers return a string\n\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\n\t\t\tif ( !isNaN( value ) && value !== 0 ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\telem = elem.parent();\n\t}\n\n\treturn 0;\n}\n\n/* Date picker manager.\n   Use the singleton instance of this class, $.datepicker, to interact with the date picker.\n   Settings for (groups of) date pickers are maintained in an instance object,\n   allowing multiple different settings on the same page. */\n\nfunction Datepicker() {\n\tthis._curInst = null; // The current instance in use\n\tthis._keyEvent = false; // If the last event was a key event\n\tthis._disabledInputs = []; // List of date picker inputs that have been disabled\n\tthis._datepickerShowing = false; // True if the popup picker is showing , false if not\n\tthis._inDialog = false; // True if showing within a \"dialog\", false if not\n\tthis._mainDivId = \"ui-datepicker-div\"; // The ID of the main datepicker division\n\tthis._inlineClass = \"ui-datepicker-inline\"; // The name of the inline marker class\n\tthis._appendClass = \"ui-datepicker-append\"; // The name of the append marker class\n\tthis._triggerClass = \"ui-datepicker-trigger\"; // The name of the trigger marker class\n\tthis._dialogClass = \"ui-datepicker-dialog\"; // The name of the dialog marker class\n\tthis._disableClass = \"ui-datepicker-disabled\"; // The name of the disabled covering marker class\n\tthis._unselectableClass = \"ui-datepicker-unselectable\"; // The name of the unselectable cell marker class\n\tthis._currentClass = \"ui-datepicker-current-day\"; // The name of the current day marker class\n\tthis._dayOverClass = \"ui-datepicker-days-cell-over\"; // The name of the day hover marker class\n\tthis.regional = []; // Available regional settings, indexed by language code\n\tthis.regional[ \"\" ] = { // Default regional settings\n\t\tcloseText: \"Done\", // Display text for close link\n\t\tprevText: \"Prev\", // Display text for previous month link\n\t\tnextText: \"Next\", // Display text for next month link\n\t\tcurrentText: \"Today\", // Display text for current month link\n\t\tmonthNames: [ \"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n\t\t\t\"July\", \"August\", \"September\", \"October\", \"November\", \"December\" ], // Names of months for drop-down and formatting\n\t\tmonthNamesShort: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" ], // For formatting\n\t\tdayNames: [ \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\" ], // For formatting\n\t\tdayNamesShort: [ \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\" ], // For formatting\n\t\tdayNamesMin: [ \"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\" ], // Column headings for days starting at Sunday\n\t\tweekHeader: \"Wk\", // Column header for week of the year\n\t\tdateFormat: \"mm/dd/yy\", // See format options on parseDate\n\t\tfirstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...\n\t\tisRTL: false, // True if right-to-left language, false if left-to-right\n\t\tshowMonthAfterYear: false, // True if the year select precedes month, false for month then year\n\t\tyearSuffix: \"\", // Additional text to append to the year in the month headers,\n\t\tselectMonthLabel: \"Select month\", // Invisible label for month selector\n\t\tselectYearLabel: \"Select year\" // Invisible label for year selector\n\t};\n\tthis._defaults = { // Global defaults for all the date picker instances\n\t\tshowOn: \"focus\", // \"focus\" for popup on focus,\n\t\t\t// \"button\" for trigger button, or \"both\" for either\n\t\tshowAnim: \"fadeIn\", // Name of jQuery animation for popup\n\t\tshowOptions: {}, // Options for enhanced animations\n\t\tdefaultDate: null, // Used when field is blank: actual date,\n\t\t\t// +/-number for offset from today, null for today\n\t\tappendText: \"\", // Display text following the input box, e.g. showing the format\n\t\tbuttonText: \"...\", // Text for trigger button\n\t\tbuttonImage: \"\", // URL for trigger button image\n\t\tbuttonImageOnly: false, // True if the image appears alone, false if it appears on a button\n\t\thideIfNoPrevNext: false, // True to hide next/previous month links\n\t\t\t// if not applicable, false to just disable them\n\t\tnavigationAsDateFormat: false, // True if date formatting applied to prev/today/next links\n\t\tgotoCurrent: false, // True if today link goes back to current selection instead\n\t\tchangeMonth: false, // True if month can be selected directly, false if only prev/next\n\t\tchangeYear: false, // True if year can be selected directly, false if only prev/next\n\t\tyearRange: \"c-10:c+10\", // Range of years to display in drop-down,\n\t\t\t// either relative to today's year (-nn:+nn), relative to currently displayed year\n\t\t\t// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)\n\t\tshowOtherMonths: false, // True to show dates in other months, false to leave blank\n\t\tselectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable\n\t\tshowWeek: false, // True to show week of the year, false to not show it\n\t\tcalculateWeek: this.iso8601Week, // How to calculate the week of the year,\n\t\t\t// takes a Date and returns the number of the week for it\n\t\tshortYearCutoff: \"+10\", // Short year values < this are in the current century,\n\t\t\t// > this are in the previous century,\n\t\t\t// string value starting with \"+\" for current year + value\n\t\tminDate: null, // The earliest selectable date, or null for no limit\n\t\tmaxDate: null, // The latest selectable date, or null for no limit\n\t\tduration: \"fast\", // Duration of display/closure\n\t\tbeforeShowDay: null, // Function that takes a date and returns an array with\n\t\t\t// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or \"\",\n\t\t\t// [2] = cell title (optional), e.g. $.datepicker.noWeekends\n\t\tbeforeShow: null, // Function that takes an input field and\n\t\t\t// returns a set of custom settings for the date picker\n\t\tonSelect: null, // Define a callback function when a date is selected\n\t\tonChangeMonthYear: null, // Define a callback function when the month or year is changed\n\t\tonClose: null, // Define a callback function when the datepicker is closed\n\t\tonUpdateDatepicker: null, // Define a callback function when the datepicker is updated\n\t\tnumberOfMonths: 1, // Number of months to show at a time\n\t\tshowCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)\n\t\tstepMonths: 1, // Number of months to step back/forward\n\t\tstepBigMonths: 12, // Number of months to step back/forward for the big links\n\t\taltField: \"\", // Selector for an alternate field to store selected dates into\n\t\taltFormat: \"\", // The date format to use for the alternate field\n\t\tconstrainInput: true, // The input is constrained by the current date format\n\t\tshowButtonPanel: false, // True to show button panel, false to not show it\n\t\tautoSize: false, // True to size the input for the date format, false to leave as is\n\t\tdisabled: false // The initial disabled state\n\t};\n\t$.extend( this._defaults, this.regional[ \"\" ] );\n\tthis.regional.en = $.extend( true, {}, this.regional[ \"\" ] );\n\tthis.regional[ \"en-US\" ] = $.extend( true, {}, this.regional.en );\n\tthis.dpDiv = datepicker_bindHover( $( \"<div id='\" + this._mainDivId + \"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) );\n}\n\n$.extend( Datepicker.prototype, {\n\n\t/* Class name added to elements to indicate already configured with a date picker. */\n\tmarkerClassName: \"hasDatepicker\",\n\n\t//Keep track of the maximum number of rows displayed (see #7043)\n\tmaxRows: 4,\n\n\t// TODO rename to \"widget\" when switching to widget factory\n\t_widgetDatepicker: function() {\n\t\treturn this.dpDiv;\n\t},\n\n\t/* Override the default settings for all instances of the date picker.\n\t * @param  settings  object - the new settings to use as defaults (anonymous object)\n\t * @return the manager object\n\t */\n\tsetDefaults: function( settings ) {\n\t\tdatepicker_extendRemove( this._defaults, settings || {} );\n\t\treturn this;\n\t},\n\n\t/* Attach the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t * @param  settings  object - the new settings to use for this date picker instance (anonymous)\n\t */\n\t_attachDatepicker: function( target, settings ) {\n\t\tvar nodeName, inline, inst;\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tinline = ( nodeName === \"div\" || nodeName === \"span\" );\n\t\tif ( !target.id ) {\n\t\t\tthis.uuid += 1;\n\t\t\ttarget.id = \"dp\" + this.uuid;\n\t\t}\n\t\tinst = this._newInst( $( target ), inline );\n\t\tinst.settings = $.extend( {}, settings || {} );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tthis._connectDatepicker( target, inst );\n\t\t} else if ( inline ) {\n\t\t\tthis._inlineDatepicker( target, inst );\n\t\t}\n\t},\n\n\t/* Create a new instance object. */\n\t_newInst: function( target, inline ) {\n\t\tvar id = target[ 0 ].id.replace( /([^A-Za-z0-9_\\-])/g, \"\\\\\\\\$1\" ); // escape jQuery meta chars\n\t\treturn { id: id, input: target, // associated target\n\t\t\tselectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection\n\t\t\tdrawMonth: 0, drawYear: 0, // month being drawn\n\t\t\tinline: inline, // is datepicker inline or not\n\t\t\tdpDiv: ( !inline ? this.dpDiv : // presentation div\n\t\t\tdatepicker_bindHover( $( \"<div class='\" + this._inlineClass + \" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) ) ) };\n\t},\n\n\t/* Attach the date picker to an input field. */\n\t_connectDatepicker: function( target, inst ) {\n\t\tvar input = $( target );\n\t\tinst.append = $( [] );\n\t\tinst.trigger = $( [] );\n\t\tif ( input.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._attachments( input, inst );\n\t\tinput.addClass( this.markerClassName ).on( \"keydown\", this._doKeyDown ).\n\t\t\ton( \"keypress\", this._doKeyPress ).on( \"keyup\", this._doKeyUp );\n\t\tthis._autoSize( inst );\n\t\t$.data( target, \"datepicker\", inst );\n\n\t\t//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\t},\n\n\t/* Make attachments based on settings. */\n\t_attachments: function( input, inst ) {\n\t\tvar showOn, buttonText, buttonImage,\n\t\t\tappendText = this._get( inst, \"appendText\" ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\tif ( inst.append ) {\n\t\t\tinst.append.remove();\n\t\t}\n\t\tif ( appendText ) {\n\t\t\tinst.append = $( \"<span>\" )\n\t\t\t\t.addClass( this._appendClass )\n\t\t\t\t.text( appendText );\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.append );\n\t\t}\n\n\t\tinput.off( \"focus\", this._showDatepicker );\n\n\t\tif ( inst.trigger ) {\n\t\t\tinst.trigger.remove();\n\t\t}\n\n\t\tshowOn = this._get( inst, \"showOn\" );\n\t\tif ( showOn === \"focus\" || showOn === \"both\" ) { // pop-up date picker when in the marked field\n\t\t\tinput.on( \"focus\", this._showDatepicker );\n\t\t}\n\t\tif ( showOn === \"button\" || showOn === \"both\" ) { // pop-up date picker when button clicked\n\t\t\tbuttonText = this._get( inst, \"buttonText\" );\n\t\t\tbuttonImage = this._get( inst, \"buttonImage\" );\n\n\t\t\tif ( this._get( inst, \"buttonImageOnly\" ) ) {\n\t\t\t\tinst.trigger = $( \"<img>\" )\n\t\t\t\t\t.addClass( this._triggerClass )\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\tsrc: buttonImage,\n\t\t\t\t\t\talt: buttonText,\n\t\t\t\t\t\ttitle: buttonText\n\t\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tinst.trigger = $( \"<button type='button'>\" )\n\t\t\t\t\t.addClass( this._triggerClass );\n\t\t\t\tif ( buttonImage ) {\n\t\t\t\t\tinst.trigger.html(\n\t\t\t\t\t\t$( \"<img>\" )\n\t\t\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\t\tsrc: buttonImage,\n\t\t\t\t\t\t\t\talt: buttonText,\n\t\t\t\t\t\t\t\ttitle: buttonText\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tinst.trigger.text( buttonText );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.trigger );\n\t\t\tinst.trigger.on( \"click\", function() {\n\t\t\t\tif ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t} else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t} else {\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t} );\n\t\t}\n\t},\n\n\t/* Apply the maximum length for the date format. */\n\t_autoSize: function( inst ) {\n\t\tif ( this._get( inst, \"autoSize\" ) && !inst.inline ) {\n\t\t\tvar findMax, max, maxI, i,\n\t\t\t\tdate = new Date( 2009, 12 - 1, 20 ), // Ensure double digits\n\t\t\t\tdateFormat = this._get( inst, \"dateFormat\" );\n\n\t\t\tif ( dateFormat.match( /[DM]/ ) ) {\n\t\t\t\tfindMax = function( names ) {\n\t\t\t\t\tmax = 0;\n\t\t\t\t\tmaxI = 0;\n\t\t\t\t\tfor ( i = 0; i < names.length; i++ ) {\n\t\t\t\t\t\tif ( names[ i ].length > max ) {\n\t\t\t\t\t\t\tmax = names[ i ].length;\n\t\t\t\t\t\t\tmaxI = i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn maxI;\n\t\t\t\t};\n\t\t\t\tdate.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ?\n\t\t\t\t\t\"monthNames\" : \"monthNamesShort\" ) ) ) );\n\t\t\t\tdate.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ?\n\t\t\t\t\t\"dayNames\" : \"dayNamesShort\" ) ) ) + 20 - date.getDay() );\n\t\t\t}\n\t\t\tinst.input.attr( \"size\", this._formatDate( inst, date ).length );\n\t\t}\n\t},\n\n\t/* Attach an inline date picker to a div. */\n\t_inlineDatepicker: function( target, inst ) {\n\t\tvar divSpan = $( target );\n\t\tif ( divSpan.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tdivSpan.addClass( this.markerClassName ).append( inst.dpDiv );\n\t\t$.data( target, \"datepicker\", inst );\n\t\tthis._setDate( inst, this._getDefaultDate( inst ), true );\n\t\tthis._updateDatepicker( inst );\n\t\tthis._updateAlternate( inst );\n\n\t\t//If disabled option is true, disable the datepicker before showing it (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\n\t\t// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements\n\t\t// https://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height\n\t\tinst.dpDiv.css( \"display\", \"block\" );\n\t},\n\n\t/* Pop-up the date picker in a \"dialog\" box.\n\t * @param  input element - ignored\n\t * @param  date\tstring or Date - the initial date to display\n\t * @param  onSelect  function - the function to call when a date is selected\n\t * @param  settings  object - update the dialog date picker instance's settings (anonymous object)\n\t * @param  pos int[2] - coordinates for the dialog's position within the screen or\n\t *\t\t\t\t\tevent - with x/y coordinates or\n\t *\t\t\t\t\tleave empty for default (screen centre)\n\t * @return the manager object\n\t */\n\t_dialogDatepicker: function( input, date, onSelect, settings, pos ) {\n\t\tvar id, browserWidth, browserHeight, scrollX, scrollY,\n\t\t\tinst = this._dialogInst; // internal instance\n\n\t\tif ( !inst ) {\n\t\t\tthis.uuid += 1;\n\t\t\tid = \"dp\" + this.uuid;\n\t\t\tthis._dialogInput = $( \"<input type='text' id='\" + id +\n\t\t\t\t\"' style='position: absolute; top: -100px; width: 0px;'/>\" );\n\t\t\tthis._dialogInput.on( \"keydown\", this._doKeyDown );\n\t\t\t$( \"body\" ).append( this._dialogInput );\n\t\t\tinst = this._dialogInst = this._newInst( this._dialogInput, false );\n\t\t\tinst.settings = {};\n\t\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, settings || {} );\n\t\tdate = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date );\n\t\tthis._dialogInput.val( date );\n\n\t\tthis._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null );\n\t\tif ( !this._pos ) {\n\t\t\tbrowserWidth = document.documentElement.clientWidth;\n\t\t\tbrowserHeight = document.documentElement.clientHeight;\n\t\t\tscrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\n\t\t\tscrollY = document.documentElement.scrollTop || document.body.scrollTop;\n\t\t\tthis._pos = // should use actual width/height below\n\t\t\t\t[ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ];\n\t\t}\n\n\t\t// Move input on screen for focus, but hidden behind dialog\n\t\tthis._dialogInput.css( \"left\", ( this._pos[ 0 ] + 20 ) + \"px\" ).css( \"top\", this._pos[ 1 ] + \"px\" );\n\t\tinst.settings.onSelect = onSelect;\n\t\tthis._inDialog = true;\n\t\tthis.dpDiv.addClass( this._dialogClass );\n\t\tthis._showDatepicker( this._dialogInput[ 0 ] );\n\t\tif ( $.blockUI ) {\n\t\t\t$.blockUI( this.dpDiv );\n\t\t}\n\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\treturn this;\n\t},\n\n\t/* Detach a datepicker from its control.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_destroyDatepicker: function( target ) {\n\t\tvar nodeName,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\t$.removeData( target, \"datepicker\" );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tinst.append.remove();\n\t\t\tinst.trigger.remove();\n\t\t\t$target.removeClass( this.markerClassName ).\n\t\t\t\toff( \"focus\", this._showDatepicker ).\n\t\t\t\toff( \"keydown\", this._doKeyDown ).\n\t\t\t\toff( \"keypress\", this._doKeyPress ).\n\t\t\t\toff( \"keyup\", this._doKeyUp );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\t$target.removeClass( this.markerClassName ).empty();\n\t\t}\n\n\t\tif ( datepicker_instActive === inst ) {\n\t\t\tdatepicker_instActive = null;\n\t\t\tthis._curInst = null;\n\t\t}\n\t},\n\n\t/* Enable the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_enableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = false;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() {\n\t\t\t\t\tthis.disabled = false;\n\t\t\t\t} ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"1.0\", cursor: \"\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().removeClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", false );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\n\t\t\t// Delete entry\n\t\t\tfunction( value ) {\n\t\t\t\treturn ( value === target ? null : value );\n\t\t\t} );\n\t},\n\n\t/* Disable the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_disableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = true;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() {\n\t\t\t\t\tthis.disabled = true;\n\t\t\t\t} ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"0.5\", cursor: \"default\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().addClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", true );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\n\t\t\t// Delete entry\n\t\t\tfunction( value ) {\n\t\t\t\treturn ( value === target ? null : value );\n\t\t\t} );\n\t\tthis._disabledInputs[ this._disabledInputs.length ] = target;\n\t},\n\n\t/* Is the first field in a jQuery collection disabled as a datepicker?\n\t * @param  target\telement - the target input field or division or span\n\t * @return boolean - true if disabled, false if enabled\n\t */\n\t_isDisabledDatepicker: function( target ) {\n\t\tif ( !target ) {\n\t\t\treturn false;\n\t\t}\n\t\tfor ( var i = 0; i < this._disabledInputs.length; i++ ) {\n\t\t\tif ( this._disabledInputs[ i ] === target ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t/* Retrieve the instance data for the target control.\n\t * @param  target  element - the target input field or division or span\n\t * @return  object - the associated instance data\n\t * @throws  error if a jQuery problem getting data\n\t */\n\t_getInst: function( target ) {\n\t\ttry {\n\t\t\treturn $.data( target, \"datepicker\" );\n\t\t} catch ( err ) {\n\t\t\tthrow \"Missing instance data for this datepicker\";\n\t\t}\n\t},\n\n\t/* Update or retrieve the settings for a date picker attached to an input field or division.\n\t * @param  target  element - the target input field or division or span\n\t * @param  name\tobject - the new settings to update or\n\t *\t\t\t\tstring - the name of the setting to change or retrieve,\n\t *\t\t\t\twhen retrieving also \"all\" for all instance settings or\n\t *\t\t\t\t\"defaults\" for all global defaults\n\t * @param  value   any - the new value for the setting\n\t *\t\t\t\t(omit if above is an object or to retrieve a value)\n\t */\n\t_optionDatepicker: function( target, name, value ) {\n\t\tvar settings, date, minDate, maxDate,\n\t\t\tinst = this._getInst( target );\n\n\t\tif ( arguments.length === 2 && typeof name === \"string\" ) {\n\t\t\treturn ( name === \"defaults\" ? $.extend( {}, $.datepicker._defaults ) :\n\t\t\t\t( inst ? ( name === \"all\" ? $.extend( {}, inst.settings ) :\n\t\t\t\tthis._get( inst, name ) ) : null ) );\n\t\t}\n\n\t\tsettings = name || {};\n\t\tif ( typeof name === \"string\" ) {\n\t\t\tsettings = {};\n\t\t\tsettings[ name ] = value;\n\t\t}\n\n\t\tif ( inst ) {\n\t\t\tif ( this._curInst === inst ) {\n\t\t\t\tthis._hideDatepicker();\n\t\t\t}\n\n\t\t\tdate = this._getDateDatepicker( target, true );\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" );\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" );\n\t\t\tdatepicker_extendRemove( inst.settings, settings );\n\n\t\t\t// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided\n\t\t\tif ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) {\n\t\t\t\tinst.settings.minDate = this._formatDate( inst, minDate );\n\t\t\t}\n\t\t\tif ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) {\n\t\t\t\tinst.settings.maxDate = this._formatDate( inst, maxDate );\n\t\t\t}\n\t\t\tif ( \"disabled\" in settings ) {\n\t\t\t\tif ( settings.disabled ) {\n\t\t\t\t\tthis._disableDatepicker( target );\n\t\t\t\t} else {\n\t\t\t\t\tthis._enableDatepicker( target );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._attachments( $( target ), inst );\n\t\t\tthis._autoSize( inst );\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateAlternate( inst );\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t// Change method deprecated\n\t_changeDatepicker: function( target, name, value ) {\n\t\tthis._optionDatepicker( target, name, value );\n\t},\n\n\t/* Redraw the date picker attached to an input field or division.\n\t * @param  target  element - the target input field or division or span\n\t */\n\t_refreshDatepicker: function( target ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t/* Set the dates for a jQuery selection.\n\t * @param  target element - the target input field or division or span\n\t * @param  date\tDate - the new date\n\t */\n\t_setDateDatepicker: function( target, date ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateDatepicker( inst );\n\t\t\tthis._updateAlternate( inst );\n\t\t}\n\t},\n\n\t/* Get the date(s) for the first entry in a jQuery selection.\n\t * @param  target element - the target input field or division or span\n\t * @param  noDefault boolean - true if no default date is to be used\n\t * @return Date - the current date\n\t */\n\t_getDateDatepicker: function( target, noDefault ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst && !inst.inline ) {\n\t\t\tthis._setDateFromField( inst, noDefault );\n\t\t}\n\t\treturn ( inst ? this._getDate( inst ) : null );\n\t},\n\n\t/* Handle keystrokes. */\n\t_doKeyDown: function( event ) {\n\t\tvar onSelect, dateStr, sel,\n\t\t\tinst = $.datepicker._getInst( event.target ),\n\t\t\thandled = true,\n\t\t\tisRTL = inst.dpDiv.is( \".ui-datepicker-rtl\" );\n\n\t\tinst._keyEvent = true;\n\t\tif ( $.datepicker._datepickerShowing ) {\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase 9: $.datepicker._hideDatepicker();\n\t\t\t\t\t\thandled = false;\n\t\t\t\t\t\tbreak; // hide on tab out\n\t\t\t\tcase 13: sel = $( \"td.\" + $.datepicker._dayOverClass + \":not(.\" +\n\t\t\t\t\t\t\t\t\t$.datepicker._currentClass + \")\", inst.dpDiv );\n\t\t\t\t\t\tif ( sel[ 0 ] ) {\n\t\t\t\t\t\t\t$.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonSelect = $.datepicker._get( inst, \"onSelect\" );\n\t\t\t\t\t\tif ( onSelect ) {\n\t\t\t\t\t\t\tdateStr = $.datepicker._formatDate( inst );\n\n\t\t\t\t\t\t\t// Trigger custom callback\n\t\t\t\t\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false; // don't submit the form\n\t\t\t\tcase 27: $.datepicker._hideDatepicker();\n\t\t\t\t\t\tbreak; // hide on escape\n\t\t\t\tcase 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // previous month/year on page up/+ ctrl\n\t\t\t\tcase 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // next month/year on page down/+ ctrl\n\t\t\t\tcase 35: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._clearDate( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // clear on ctrl or command +end\n\t\t\t\tcase 36: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._gotoToday( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // current on ctrl or command +home\n\t\t\t\tcase 37: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// -1 day on ctrl or command +left\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +left on Mac\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 38: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, -7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // -1 week on ctrl or command +up\n\t\t\t\tcase 39: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// +1 day on ctrl or command +right\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +right\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 40: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, +7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // +1 week on ctrl or command +down\n\t\t\t\tdefault: handled = false;\n\t\t\t}\n\t\t} else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home\n\t\t\t$.datepicker._showDatepicker( this );\n\t\t} else {\n\t\t\thandled = false;\n\t\t}\n\n\t\tif ( handled ) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t},\n\n\t/* Filter entered characters - based on date format. */\n\t_doKeyPress: function( event ) {\n\t\tvar chars, chr,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( $.datepicker._get( inst, \"constrainInput\" ) ) {\n\t\t\tchars = $.datepicker._possibleChars( $.datepicker._get( inst, \"dateFormat\" ) );\n\t\t\tchr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode );\n\t\t\treturn event.ctrlKey || event.metaKey || ( chr < \" \" || !chars || chars.indexOf( chr ) > -1 );\n\t\t}\n\t},\n\n\t/* Synchronise manual entry and field/alternate field. */\n\t_doKeyUp: function( event ) {\n\t\tvar date,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( inst.input.val() !== inst.lastVal ) {\n\t\t\ttry {\n\t\t\t\tdate = $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t( inst.input ? inst.input.val() : null ),\n\t\t\t\t\t$.datepicker._getFormatConfig( inst ) );\n\n\t\t\t\tif ( date ) { // only if valid\n\t\t\t\t\t$.datepicker._setDateFromField( inst );\n\t\t\t\t\t$.datepicker._updateAlternate( inst );\n\t\t\t\t\t$.datepicker._updateDatepicker( inst );\n\t\t\t\t}\n\t\t\t} catch ( err ) {\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/* Pop-up the date picker for a given input field.\n\t * If false returned from beforeShow event handler do not show.\n\t * @param  input  element - the input field attached to the date picker or\n\t *\t\t\t\t\tevent - if triggered by focus\n\t */\n\t_showDatepicker: function( input ) {\n\t\tinput = input.target || input;\n\t\tif ( input.nodeName.toLowerCase() !== \"input\" ) { // find from button/image trigger\n\t\t\tinput = $( \"input\", input.parentNode )[ 0 ];\n\t\t}\n\n\t\tif ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here\n\t\t\treturn;\n\t\t}\n\n\t\tvar inst, beforeShow, beforeShowSettings, isFixed,\n\t\t\toffset, showAnim, duration;\n\n\t\tinst = $.datepicker._getInst( input );\n\t\tif ( $.datepicker._curInst && $.datepicker._curInst !== inst ) {\n\t\t\t$.datepicker._curInst.dpDiv.stop( true, true );\n\t\t\tif ( inst && $.datepicker._datepickerShowing ) {\n\t\t\t\t$.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] );\n\t\t\t}\n\t\t}\n\n\t\tbeforeShow = $.datepicker._get( inst, \"beforeShow\" );\n\t\tbeforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {};\n\t\tif ( beforeShowSettings === false ) {\n\t\t\treturn;\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, beforeShowSettings );\n\n\t\tinst.lastVal = null;\n\t\t$.datepicker._lastInput = input;\n\t\t$.datepicker._setDateFromField( inst );\n\n\t\tif ( $.datepicker._inDialog ) { // hide cursor\n\t\t\tinput.value = \"\";\n\t\t}\n\t\tif ( !$.datepicker._pos ) { // position below input\n\t\t\t$.datepicker._pos = $.datepicker._findPos( input );\n\t\t\t$.datepicker._pos[ 1 ] += input.offsetHeight; // add the height\n\t\t}\n\n\t\tisFixed = false;\n\t\t$( input ).parents().each( function() {\n\t\t\tisFixed |= $( this ).css( \"position\" ) === \"fixed\";\n\t\t\treturn !isFixed;\n\t\t} );\n\n\t\toffset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] };\n\t\t$.datepicker._pos = null;\n\n\t\t//to avoid flashes on Firefox\n\t\tinst.dpDiv.empty();\n\n\t\t// determine sizing offscreen\n\t\tinst.dpDiv.css( { position: \"absolute\", display: \"block\", top: \"-1000px\" } );\n\t\t$.datepicker._updateDatepicker( inst );\n\n\t\t// fix width for dynamic number of date pickers\n\t\t// and adjust position before showing\n\t\toffset = $.datepicker._checkOffset( inst, offset, isFixed );\n\t\tinst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ?\n\t\t\t\"static\" : ( isFixed ? \"fixed\" : \"absolute\" ) ), display: \"none\",\n\t\t\tleft: offset.left + \"px\", top: offset.top + \"px\" } );\n\n\t\tif ( !inst.inline ) {\n\t\t\tshowAnim = $.datepicker._get( inst, \"showAnim\" );\n\t\t\tduration = $.datepicker._get( inst, \"duration\" );\n\t\t\tinst.dpDiv.css( \"z-index\", datepicker_getZindex( $( input ) ) + 1 );\n\t\t\t$.datepicker._datepickerShowing = true;\n\n\t\t\tif ( $.effects && $.effects.effect[ showAnim ] ) {\n\t\t\t\tinst.dpDiv.show( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ showAnim || \"show\" ]( showAnim ? duration : null );\n\t\t\t}\n\n\t\t\tif ( $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\t\tinst.input.trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t$.datepicker._curInst = inst;\n\t\t}\n\t},\n\n\t/* Generate the date picker content. */\n\t_updateDatepicker: function( inst ) {\n\t\tthis.maxRows = 4; //Reset the max number of rows being displayed (see #7043)\n\t\tdatepicker_instActive = inst; // for delegate hover events\n\t\tinst.dpDiv.empty().append( this._generateHTML( inst ) );\n\t\tthis._attachHandlers( inst );\n\n\t\tvar origyearshtml,\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tcols = numMonths[ 1 ],\n\t\t\twidth = 17,\n\t\t\tactiveCell = inst.dpDiv.find( \".\" + this._dayOverClass + \" a\" ),\n\t\t\tonUpdateDatepicker = $.datepicker._get( inst, \"onUpdateDatepicker\" );\n\n\t\tif ( activeCell.length > 0 ) {\n\t\t\tdatepicker_handleMouseover.apply( activeCell.get( 0 ) );\n\t\t}\n\n\t\tinst.dpDiv.removeClass( \"ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4\" ).width( \"\" );\n\t\tif ( cols > 1 ) {\n\t\t\tinst.dpDiv.addClass( \"ui-datepicker-multi-\" + cols ).css( \"width\", ( width * cols ) + \"em\" );\n\t\t}\n\t\tinst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-multi\" );\n\t\tinst.dpDiv[ ( this._get( inst, \"isRTL\" ) ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-rtl\" );\n\n\t\tif ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\tinst.input.trigger( \"focus\" );\n\t\t}\n\n\t\t// Deffered render of the years select (to avoid flashes on Firefox)\n\t\tif ( inst.yearshtml ) {\n\t\t\torigyearshtml = inst.yearshtml;\n\t\t\tsetTimeout( function() {\n\n\t\t\t\t//assure that inst.yearshtml didn't change.\n\t\t\t\tif ( origyearshtml === inst.yearshtml && inst.yearshtml ) {\n\t\t\t\t\tinst.dpDiv.find( \"select.ui-datepicker-year\" ).first().replaceWith( inst.yearshtml );\n\t\t\t\t}\n\t\t\t\torigyearshtml = inst.yearshtml = null;\n\t\t\t}, 0 );\n\t\t}\n\n\t\tif ( onUpdateDatepicker ) {\n\t\t\tonUpdateDatepicker.apply( ( inst.input ? inst.input[ 0 ] : null ), [ inst ] );\n\t\t}\n\t},\n\n\t// #6694 - don't focus the input if it's already focused\n\t// this breaks the change event in IE\n\t// Support: IE and jQuery <1.9\n\t_shouldFocusInput: function( inst ) {\n\t\treturn inst.input && inst.input.is( \":visible\" ) && !inst.input.is( \":disabled\" ) && !inst.input.is( \":focus\" );\n\t},\n\n\t/* Check positioning to remain on screen. */\n\t_checkOffset: function( inst, offset, isFixed ) {\n\t\tvar dpWidth = inst.dpDiv.outerWidth(),\n\t\t\tdpHeight = inst.dpDiv.outerHeight(),\n\t\t\tinputWidth = inst.input ? inst.input.outerWidth() : 0,\n\t\t\tinputHeight = inst.input ? inst.input.outerHeight() : 0,\n\t\t\tviewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ),\n\t\t\tviewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() );\n\n\t\toffset.left -= ( this._get( inst, \"isRTL\" ) ? ( dpWidth - inputWidth ) : 0 );\n\t\toffset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0;\n\t\toffset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0;\n\n\t\t// Now check if datepicker is showing outside window viewport - move to a better place if so.\n\t\toffset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ?\n\t\t\tMath.abs( offset.left + dpWidth - viewWidth ) : 0 );\n\t\toffset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ?\n\t\t\tMath.abs( dpHeight + inputHeight ) : 0 );\n\n\t\treturn offset;\n\t},\n\n\t/* Find an object's position on the screen. */\n\t_findPos: function( obj ) {\n\t\tvar position,\n\t\t\tinst = this._getInst( obj ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\twhile ( obj && ( obj.type === \"hidden\" || obj.nodeType !== 1 || $.expr.pseudos.hidden( obj ) ) ) {\n\t\t\tobj = obj[ isRTL ? \"previousSibling\" : \"nextSibling\" ];\n\t\t}\n\n\t\tposition = $( obj ).offset();\n\t\treturn [ position.left, position.top ];\n\t},\n\n\t/* Hide the date picker from view.\n\t * @param  input  element - the input field attached to the date picker\n\t */\n\t_hideDatepicker: function( input ) {\n\t\tvar showAnim, duration, postProcess, onClose,\n\t\t\tinst = this._curInst;\n\n\t\tif ( !inst || ( input && inst !== $.data( input, \"datepicker\" ) ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._datepickerShowing ) {\n\t\t\tshowAnim = this._get( inst, \"showAnim\" );\n\t\t\tduration = this._get( inst, \"duration\" );\n\t\t\tpostProcess = function() {\n\t\t\t\t$.datepicker._tidyDialog( inst );\n\t\t\t};\n\n\t\t\t// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed\n\t\t\tif ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {\n\t\t\t\tinst.dpDiv.hide( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration, postProcess );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ ( showAnim === \"slideDown\" ? \"slideUp\" :\n\t\t\t\t\t( showAnim === \"fadeIn\" ? \"fadeOut\" : \"hide\" ) ) ]( ( showAnim ? duration : null ), postProcess );\n\t\t\t}\n\n\t\t\tif ( !showAnim ) {\n\t\t\t\tpostProcess();\n\t\t\t}\n\t\t\tthis._datepickerShowing = false;\n\n\t\t\tonClose = this._get( inst, \"onClose\" );\n\t\t\tif ( onClose ) {\n\t\t\t\tonClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : \"\" ), inst ] );\n\t\t\t}\n\n\t\t\tthis._lastInput = null;\n\t\t\tif ( this._inDialog ) {\n\t\t\t\tthis._dialogInput.css( { position: \"absolute\", left: \"0\", top: \"-100px\" } );\n\t\t\t\tif ( $.blockUI ) {\n\t\t\t\t\t$.unblockUI();\n\t\t\t\t\t$( \"body\" ).append( this.dpDiv );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._inDialog = false;\n\t\t}\n\t},\n\n\t/* Tidy up after a dialog display. */\n\t_tidyDialog: function( inst ) {\n\t\tinst.dpDiv.removeClass( this._dialogClass ).off( \".ui-datepicker-calendar\" );\n\t},\n\n\t/* Close date picker if clicked elsewhere. */\n\t_checkExternalClick: function( event ) {\n\t\tif ( !$.datepicker._curInst ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar $target = $( event.target ),\n\t\t\tinst = $.datepicker._getInst( $target[ 0 ] );\n\n\t\tif ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId &&\n\t\t\t\t$target.parents( \"#\" + $.datepicker._mainDivId ).length === 0 &&\n\t\t\t\t!$target.hasClass( $.datepicker.markerClassName ) &&\n\t\t\t\t!$target.closest( \".\" + $.datepicker._triggerClass ).length &&\n\t\t\t\t$.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) ||\n\t\t\t( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) {\n\t\t\t\t$.datepicker._hideDatepicker();\n\t\t}\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustDate: function( id, offset, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._adjustInstDate( inst, offset, period );\n\t\tthis._updateDatepicker( inst );\n\t},\n\n\t/* Action for current link. */\n\t_gotoToday: function( id ) {\n\t\tvar date,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ) {\n\t\t\tinst.selectedDay = inst.currentDay;\n\t\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth;\n\t\t\tinst.drawYear = inst.selectedYear = inst.currentYear;\n\t\t} else {\n\t\t\tdate = new Date();\n\t\t\tinst.selectedDay = date.getDate();\n\t\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\t}\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a new month/year. */\n\t_selectMonthYear: function( id, select, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tinst[ \"selected\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\tinst[ \"draw\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\t\tparseInt( select.options[ select.selectedIndex ].value, 10 );\n\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a day. */\n\t_selectDay: function( id, month, year, td ) {\n\t\tvar inst,\n\t\t\ttarget = $( id );\n\n\t\tif ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tinst = this._getInst( target[ 0 ] );\n\t\tinst.selectedDay = inst.currentDay = parseInt( $( \"a\", td ).attr( \"data-date\" ) );\n\t\tinst.selectedMonth = inst.currentMonth = month;\n\t\tinst.selectedYear = inst.currentYear = year;\n\t\tthis._selectDate( id, this._formatDate( inst,\n\t\t\tinst.currentDay, inst.currentMonth, inst.currentYear ) );\n\t},\n\n\t/* Erase the input field and hide the date picker. */\n\t_clearDate: function( id ) {\n\t\tvar target = $( id );\n\t\tthis._selectDate( target, \"\" );\n\t},\n\n\t/* Update the input field with the selected date. */\n\t_selectDate: function( id, dateStr ) {\n\t\tvar onSelect,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tdateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( dateStr );\n\t\t}\n\t\tthis._updateAlternate( inst );\n\n\t\tonSelect = this._get( inst, \"onSelect\" );\n\t\tif ( onSelect ) {\n\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );  // trigger custom callback\n\t\t} else if ( inst.input ) {\n\t\t\tinst.input.trigger( \"change\" ); // fire the change event\n\t\t}\n\n\t\tif ( inst.inline ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t} else {\n\t\t\tthis._hideDatepicker();\n\t\t\tthis._lastInput = inst.input[ 0 ];\n\t\t\tif ( typeof( inst.input[ 0 ] ) !== \"object\" ) {\n\t\t\t\tinst.input.trigger( \"focus\" ); // restore focus\n\t\t\t}\n\t\t\tthis._lastInput = null;\n\t\t}\n\t},\n\n\t/* Update any alternate field to synchronise with the main field. */\n\t_updateAlternate: function( inst ) {\n\t\tvar altFormat, date, dateStr,\n\t\t\taltField = this._get( inst, \"altField\" );\n\n\t\tif ( altField ) { // update alternate field too\n\t\t\taltFormat = this._get( inst, \"altFormat\" ) || this._get( inst, \"dateFormat\" );\n\t\t\tdate = this._getDate( inst );\n\t\t\tdateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) );\n\t\t\t$( document ).find( altField ).val( dateStr );\n\t\t}\n\t},\n\n\t/* Set as beforeShowDay function to prevent selection of weekends.\n\t * @param  date  Date - the date to customise\n\t * @return [boolean, string] - is this date selectable?, what is its CSS class?\n\t */\n\tnoWeekends: function( date ) {\n\t\tvar day = date.getDay();\n\t\treturn [ ( day > 0 && day < 6 ), \"\" ];\n\t},\n\n\t/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.\n\t * @param  date  Date - the date to get the week for\n\t * @return  number - the number of the week within the year that contains this date\n\t */\n\tiso8601Week: function( date ) {\n\t\tvar time,\n\t\t\tcheckDate = new Date( date.getTime() );\n\n\t\t// Find Thursday of this week starting on Monday\n\t\tcheckDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) );\n\n\t\ttime = checkDate.getTime();\n\t\tcheckDate.setMonth( 0 ); // Compare with Jan 1\n\t\tcheckDate.setDate( 1 );\n\t\treturn Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1;\n\t},\n\n\t/* Parse a string value into a date object.\n\t * See formatDate below for the possible formats.\n\t *\n\t * @param  format string - the expected format of the date\n\t * @param  value string - the date in the above format\n\t * @param  settings Object - attributes include:\n\t *\t\t\t\t\tshortYearCutoff  number - the cutoff year for determining the century (optional)\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return  Date - the extracted date value or null if value is blank\n\t */\n\tparseDate: function( format, value, settings ) {\n\t\tif ( format == null || value == null ) {\n\t\t\tthrow \"Invalid arguments\";\n\t\t}\n\n\t\tvalue = ( typeof value === \"object\" ? value.toString() : value + \"\" );\n\t\tif ( value === \"\" ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar iFormat, dim, extra,\n\t\t\tiValue = 0,\n\t\t\tshortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff,\n\t\t\tshortYearCutoff = ( typeof shortYearCutoffTemp !== \"string\" ? shortYearCutoffTemp :\n\t\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ),\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\t\t\tyear = -1,\n\t\t\tmonth = -1,\n\t\t\tday = -1,\n\t\t\tdoy = -1,\n\t\t\tliteral = false,\n\t\t\tdate,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Extract a number from the string value\n\t\t\tgetNumber = function( match ) {\n\t\t\t\tvar isDoubled = lookAhead( match ),\n\t\t\t\t\tsize = ( match === \"@\" ? 14 : ( match === \"!\" ? 20 :\n\t\t\t\t\t( match === \"y\" && isDoubled ? 4 : ( match === \"o\" ? 3 : 2 ) ) ) ),\n\t\t\t\t\tminSize = ( match === \"y\" ? size : 1 ),\n\t\t\t\t\tdigits = new RegExp( \"^\\\\d{\" + minSize + \",\" + size + \"}\" ),\n\t\t\t\t\tnum = value.substring( iValue ).match( digits );\n\t\t\t\tif ( !num ) {\n\t\t\t\t\tthrow \"Missing number at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue += num[ 0 ].length;\n\t\t\t\treturn parseInt( num[ 0 ], 10 );\n\t\t\t},\n\n\t\t\t// Extract a name from the string value and convert to an index\n\t\t\tgetName = function( match, shortNames, longNames ) {\n\t\t\t\tvar index = -1,\n\t\t\t\t\tnames = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) {\n\t\t\t\t\t\treturn [ [ k, v ] ];\n\t\t\t\t\t} ).sort( function( a, b ) {\n\t\t\t\t\t\treturn -( a[ 1 ].length - b[ 1 ].length );\n\t\t\t\t\t} );\n\n\t\t\t\t$.each( names, function( i, pair ) {\n\t\t\t\t\tvar name = pair[ 1 ];\n\t\t\t\t\tif ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) {\n\t\t\t\t\t\tindex = pair[ 0 ];\n\t\t\t\t\t\tiValue += name.length;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\treturn index + 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow \"Unknown name at position \" + iValue;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Confirm that a literal character matches the string value\n\t\t\tcheckLiteral = function() {\n\t\t\t\tif ( value.charAt( iValue ) !== format.charAt( iFormat ) ) {\n\t\t\t\t\tthrow \"Unexpected literal at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue++;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\tday = getNumber( \"d\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\tgetName( \"D\", dayNamesShort, dayNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\tdoy = getNumber( \"o\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\tmonth = getNumber( \"m\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\tmonth = getName( \"M\", monthNamesShort, monthNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\tyear = getNumber( \"y\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\tdate = new Date( getNumber( \"@\" ) );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\tdate = new Date( ( getNumber( \"!\" ) - this._ticksTo1970 ) / 10000 );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( iValue < value.length ) {\n\t\t\textra = value.substr( iValue );\n\t\t\tif ( !/^\\s+/.test( extra ) ) {\n\t\t\t\tthrow \"Extra/unparsed characters found in date: \" + extra;\n\t\t\t}\n\t\t}\n\n\t\tif ( year === -1 ) {\n\t\t\tyear = new Date().getFullYear();\n\t\t} else if ( year < 100 ) {\n\t\t\tyear += new Date().getFullYear() - new Date().getFullYear() % 100 +\n\t\t\t\t( year <= shortYearCutoff ? 0 : -100 );\n\t\t}\n\n\t\tif ( doy > -1 ) {\n\t\t\tmonth = 1;\n\t\t\tday = doy;\n\t\t\tdo {\n\t\t\t\tdim = this._getDaysInMonth( year, month - 1 );\n\t\t\t\tif ( day <= dim ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmonth++;\n\t\t\t\tday -= dim;\n\t\t\t} while ( true );\n\t\t}\n\n\t\tdate = this._daylightSavingAdjust( new Date( year, month - 1, day ) );\n\t\tif ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) {\n\t\t\tthrow \"Invalid date\"; // E.g. 31/02/00\n\t\t}\n\t\treturn date;\n\t},\n\n\t/* Standard date formats. */\n\tATOM: \"yy-mm-dd\", // RFC 3339 (ISO 8601)\n\tCOOKIE: \"D, dd M yy\",\n\tISO_8601: \"yy-mm-dd\",\n\tRFC_822: \"D, d M y\",\n\tRFC_850: \"DD, dd-M-y\",\n\tRFC_1036: \"D, d M y\",\n\tRFC_1123: \"D, d M yy\",\n\tRFC_2822: \"D, d M yy\",\n\tRSS: \"D, d M y\", // RFC 822\n\tTICKS: \"!\",\n\tTIMESTAMP: \"@\",\n\tW3C: \"yy-mm-dd\", // ISO 8601\n\n\t_ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) +\n\t\tMath.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ),\n\n\t/* Format a date object into a string value.\n\t * The format can be combinations of the following:\n\t * d  - day of month (no leading zero)\n\t * dd - day of month (two digit)\n\t * o  - day of year (no leading zeros)\n\t * oo - day of year (three digit)\n\t * D  - day name short\n\t * DD - day name long\n\t * m  - month of year (no leading zero)\n\t * mm - month of year (two digit)\n\t * M  - month name short\n\t * MM - month name long\n\t * y  - year (two digit)\n\t * yy - year (four digit)\n\t * @ - Unix timestamp (ms since 01/01/1970)\n\t * ! - Windows ticks (100ns since 01/01/0001)\n\t * \"...\" - literal text\n\t * '' - single quote\n\t *\n\t * @param  format string - the desired format of the date\n\t * @param  date Date - the date value to format\n\t * @param  settings Object - attributes include:\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return  string - the date in the above format\n\t */\n\tformatDate: function( format, date, settings ) {\n\t\tif ( !date ) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tvar iFormat,\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Format a number, with leading zero if necessary\n\t\t\tformatNumber = function( match, value, len ) {\n\t\t\t\tvar num = \"\" + value;\n\t\t\t\tif ( lookAhead( match ) ) {\n\t\t\t\t\twhile ( num.length < len ) {\n\t\t\t\t\t\tnum = \"0\" + num;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn num;\n\t\t\t},\n\n\t\t\t// Format a name, short or long as requested\n\t\t\tformatName = function( match, value, shortNames, longNames ) {\n\t\t\t\treturn ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] );\n\t\t\t},\n\t\t\toutput = \"\",\n\t\t\tliteral = false;\n\n\t\tif ( date ) {\n\t\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\t\tif ( literal ) {\n\t\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\t\tliteral = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\t\toutput += formatNumber( \"d\", date.getDate(), 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\t\toutput += formatName( \"D\", date.getDay(), dayNamesShort, dayNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\t\toutput += formatNumber( \"o\",\n\t\t\t\t\t\t\t\tMath.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\t\toutput += formatNumber( \"m\", date.getMonth() + 1, 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\t\toutput += formatName( \"M\", date.getMonth(), monthNamesShort, monthNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\t\toutput += ( lookAhead( \"y\" ) ? date.getFullYear() :\n\t\t\t\t\t\t\t\t( date.getFullYear() % 100 < 10 ? \"0\" : \"\" ) + date.getFullYear() % 100 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\t\toutput += date.getTime();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\t\toutput += date.getTime() * 10000 + this._ticksTo1970;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\t\toutput += \"'\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t},\n\n\t/* Extract all possible characters from the date format. */\n\t_possibleChars: function( format ) {\n\t\tvar iFormat,\n\t\t\tchars = \"\",\n\t\t\tliteral = false,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\": case \"m\": case \"y\": case \"@\":\n\t\t\t\t\t\tchars += \"0123456789\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\": case \"M\":\n\t\t\t\t\t\treturn null; // Accept anything\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tchars += \"'\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn chars;\n\t},\n\n\t/* Get a setting value, defaulting if necessary. */\n\t_get: function( inst, name ) {\n\t\treturn inst.settings[ name ] !== undefined ?\n\t\t\tinst.settings[ name ] : this._defaults[ name ];\n\t},\n\n\t/* Parse existing date and initialise date picker. */\n\t_setDateFromField: function( inst, noDefault ) {\n\t\tif ( inst.input.val() === inst.lastVal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dateFormat = this._get( inst, \"dateFormat\" ),\n\t\t\tdates = inst.lastVal = inst.input ? inst.input.val() : null,\n\t\t\tdefaultDate = this._getDefaultDate( inst ),\n\t\t\tdate = defaultDate,\n\t\t\tsettings = this._getFormatConfig( inst );\n\n\t\ttry {\n\t\t\tdate = this.parseDate( dateFormat, dates, settings ) || defaultDate;\n\t\t} catch ( event ) {\n\t\t\tdates = ( noDefault ? \"\" : dates );\n\t\t}\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tinst.currentDay = ( dates ? date.getDate() : 0 );\n\t\tinst.currentMonth = ( dates ? date.getMonth() : 0 );\n\t\tinst.currentYear = ( dates ? date.getFullYear() : 0 );\n\t\tthis._adjustInstDate( inst );\n\t},\n\n\t/* Retrieve the default date shown on opening. */\n\t_getDefaultDate: function( inst ) {\n\t\treturn this._restrictMinMax( inst,\n\t\t\tthis._determineDate( inst, this._get( inst, \"defaultDate\" ), new Date() ) );\n\t},\n\n\t/* A date may be specified as an exact value or a relative one. */\n\t_determineDate: function( inst, date, defaultDate ) {\n\t\tvar offsetNumeric = function( offset ) {\n\t\t\t\tvar date = new Date();\n\t\t\t\tdate.setDate( date.getDate() + offset );\n\t\t\t\treturn date;\n\t\t\t},\n\t\t\toffsetString = function( offset ) {\n\t\t\t\ttry {\n\t\t\t\t\treturn $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t\toffset, $.datepicker._getFormatConfig( inst ) );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore\n\t\t\t\t}\n\n\t\t\t\tvar date = ( offset.toLowerCase().match( /^c/ ) ?\n\t\t\t\t\t$.datepicker._getDate( inst ) : null ) || new Date(),\n\t\t\t\t\tyear = date.getFullYear(),\n\t\t\t\t\tmonth = date.getMonth(),\n\t\t\t\t\tday = date.getDate(),\n\t\t\t\t\tpattern = /([+\\-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g,\n\t\t\t\t\tmatches = pattern.exec( offset );\n\n\t\t\t\twhile ( matches ) {\n\t\t\t\t\tswitch ( matches[ 2 ] || \"d\" ) {\n\t\t\t\t\t\tcase \"d\" : case \"D\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ); break;\n\t\t\t\t\t\tcase \"w\" : case \"W\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ) * 7; break;\n\t\t\t\t\t\tcase \"m\" : case \"M\" :\n\t\t\t\t\t\t\tmonth += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\": case \"Y\" :\n\t\t\t\t\t\t\tyear += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tmatches = pattern.exec( offset );\n\t\t\t\t}\n\t\t\t\treturn new Date( year, month, day );\n\t\t\t},\n\t\t\tnewDate = ( date == null || date === \"\" ? defaultDate : ( typeof date === \"string\" ? offsetString( date ) :\n\t\t\t\t( typeof date === \"number\" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) );\n\n\t\tnewDate = ( newDate && newDate.toString() === \"Invalid Date\" ? defaultDate : newDate );\n\t\tif ( newDate ) {\n\t\t\tnewDate.setHours( 0 );\n\t\t\tnewDate.setMinutes( 0 );\n\t\t\tnewDate.setSeconds( 0 );\n\t\t\tnewDate.setMilliseconds( 0 );\n\t\t}\n\t\treturn this._daylightSavingAdjust( newDate );\n\t},\n\n\t/* Handle switch to/from daylight saving.\n\t * Hours may be non-zero on daylight saving cut-over:\n\t * > 12 when midnight changeover, but then cannot generate\n\t * midnight datetime, so jump to 1AM, otherwise reset.\n\t * @param  date  (Date) the date to check\n\t * @return  (Date) the corrected date\n\t */\n\t_daylightSavingAdjust: function( date ) {\n\t\tif ( !date ) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 );\n\t\treturn date;\n\t},\n\n\t/* Set the date(s) directly. */\n\t_setDate: function( inst, date, noChange ) {\n\t\tvar clear = !date,\n\t\t\torigMonth = inst.selectedMonth,\n\t\t\torigYear = inst.selectedYear,\n\t\t\tnewDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) );\n\n\t\tinst.selectedDay = inst.currentDay = newDate.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();\n\t\tinst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();\n\t\tif ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t\tthis._adjustInstDate( inst );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( clear ? \"\" : this._formatDate( inst ) );\n\t\t}\n\t},\n\n\t/* Retrieve the date(s) directly. */\n\t_getDate: function( inst ) {\n\t\tvar startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === \"\" ) ? null :\n\t\t\tthis._daylightSavingAdjust( new Date(\n\t\t\tinst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\t\treturn startDate;\n\t},\n\n\t/* Attach the onxxx handlers.  These are declared statically so\n\t * they work with static code transformers like Caja.\n\t */\n\t_attachHandlers: function( inst ) {\n\t\tvar stepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tid = \"#\" + inst.id.replace( /\\\\\\\\/g, \"\\\\\" );\n\t\tinst.dpDiv.find( \"[data-handler]\" ).map( function() {\n\t\t\tvar handler = {\n\t\t\t\tprev: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, -stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\tnext: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, +stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\thide: function() {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t},\n\t\t\t\ttoday: function() {\n\t\t\t\t\t$.datepicker._gotoToday( id );\n\t\t\t\t},\n\t\t\t\tselectDay: function() {\n\t\t\t\t\t$.datepicker._selectDay( id, +this.getAttribute( \"data-month\" ), +this.getAttribute( \"data-year\" ), this );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectMonth: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"M\" );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectYear: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"Y\" );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\t\t\t$( this ).on( this.getAttribute( \"data-event\" ), handler[ this.getAttribute( \"data-handler\" ) ] );\n\t\t} );\n\t},\n\n\t/* Generate the HTML for the current state of the date picker. */\n\t_generateHTML: function( inst ) {\n\t\tvar maxDraw, prevText, prev, nextText, next, currentText, gotoDate,\n\t\t\tcontrols, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,\n\t\t\tmonthNames, monthNamesShort, beforeShowDay, showOtherMonths,\n\t\t\tselectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,\n\t\t\tcornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,\n\t\t\tprintDate, dRow, tbody, daySettings, otherMonth, unselectable,\n\t\t\ttempDate = new Date(),\n\t\t\ttoday = this._daylightSavingAdjust(\n\t\t\t\tnew Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time\n\t\t\tisRTL = this._get( inst, \"isRTL\" ),\n\t\t\tshowButtonPanel = this._get( inst, \"showButtonPanel\" ),\n\t\t\thideIfNoPrevNext = this._get( inst, \"hideIfNoPrevNext\" ),\n\t\t\tnavigationAsDateFormat = this._get( inst, \"navigationAsDateFormat\" ),\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tshowCurrentAtPos = this._get( inst, \"showCurrentAtPos\" ),\n\t\t\tstepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tisMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ),\n\t\t\tcurrentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) :\n\t\t\t\tnew Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ),\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tdrawMonth = inst.drawMonth - showCurrentAtPos,\n\t\t\tdrawYear = inst.drawYear;\n\n\t\tif ( drawMonth < 0 ) {\n\t\t\tdrawMonth += 12;\n\t\t\tdrawYear--;\n\t\t}\n\t\tif ( maxDate ) {\n\t\t\tmaxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(),\n\t\t\t\tmaxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) );\n\t\t\tmaxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw );\n\t\t\twhile ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) {\n\t\t\t\tdrawMonth--;\n\t\t\t\tif ( drawMonth < 0 ) {\n\t\t\t\t\tdrawMonth = 11;\n\t\t\t\t\tdrawYear--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tinst.drawMonth = drawMonth;\n\t\tinst.drawYear = drawYear;\n\n\t\tprevText = this._get( inst, \"prevText\" );\n\t\tprevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tif ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ) {\n\t\t\tprev = $( \"<a>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"class\": \"ui-datepicker-prev ui-corner-all\",\n\t\t\t\t\t\"data-handler\": \"prev\",\n\t\t\t\t\t\"data-event\": \"click\",\n\t\t\t\t\ttitle: prevText\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$( \"<span>\" )\n\t\t\t\t\t\t.addClass( \"ui-icon ui-icon-circle-triangle-\" +\n\t\t\t\t\t\t\t( isRTL ? \"e\" : \"w\" ) )\n\t\t\t\t\t\t.text( prevText )\n\t\t\t\t)[ 0 ].outerHTML;\n\t\t} else if ( hideIfNoPrevNext ) {\n\t\t\tprev = \"\";\n\t\t} else {\n\t\t\tprev = $( \"<a>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"class\": \"ui-datepicker-prev ui-corner-all ui-state-disabled\",\n\t\t\t\t\ttitle: prevText\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$( \"<span>\" )\n\t\t\t\t\t\t.addClass( \"ui-icon ui-icon-circle-triangle-\" +\n\t\t\t\t\t\t\t( isRTL ? \"e\" : \"w\" ) )\n\t\t\t\t\t\t.text( prevText )\n\t\t\t\t)[ 0 ].outerHTML;\n\t\t}\n\n\t\tnextText = this._get( inst, \"nextText\" );\n\t\tnextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tif ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ) {\n\t\t\tnext = $( \"<a>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"class\": \"ui-datepicker-next ui-corner-all\",\n\t\t\t\t\t\"data-handler\": \"next\",\n\t\t\t\t\t\"data-event\": \"click\",\n\t\t\t\t\ttitle: nextText\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$( \"<span>\" )\n\t\t\t\t\t\t.addClass( \"ui-icon ui-icon-circle-triangle-\" +\n\t\t\t\t\t\t\t( isRTL ? \"w\" : \"e\" ) )\n\t\t\t\t\t\t.text( nextText )\n\t\t\t\t)[ 0 ].outerHTML;\n\t\t} else if ( hideIfNoPrevNext ) {\n\t\t\tnext = \"\";\n\t\t} else {\n\t\t\tnext = $( \"<a>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"class\": \"ui-datepicker-next ui-corner-all ui-state-disabled\",\n\t\t\t\t\ttitle: nextText\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$( \"<span>\" )\n\t\t\t\t\t\t.attr( \"class\", \"ui-icon ui-icon-circle-triangle-\" +\n\t\t\t\t\t\t\t( isRTL ? \"w\" : \"e\" ) )\n\t\t\t\t\t\t.text( nextText )\n\t\t\t\t)[ 0 ].outerHTML;\n\t\t}\n\n\t\tcurrentText = this._get( inst, \"currentText\" );\n\t\tgotoDate = ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ? currentDate : today );\n\t\tcurrentText = ( !navigationAsDateFormat ? currentText :\n\t\t\tthis.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) );\n\n\t\tcontrols = \"\";\n\t\tif ( !inst.inline ) {\n\t\t\tcontrols = $( \"<button>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\"class\": \"ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all\",\n\t\t\t\t\t\"data-handler\": \"hide\",\n\t\t\t\t\t\"data-event\": \"click\"\n\t\t\t\t} )\n\t\t\t\t.text( this._get( inst, \"closeText\" ) )[ 0 ].outerHTML;\n\t\t}\n\n\t\tbuttonPanel = \"\";\n\t\tif ( showButtonPanel ) {\n\t\t\tbuttonPanel = $( \"<div class='ui-datepicker-buttonpane ui-widget-content'>\" )\n\t\t\t\t.append( isRTL ? controls : \"\" )\n\t\t\t\t.append( this._isInRange( inst, gotoDate ) ?\n\t\t\t\t\t$( \"<button>\" )\n\t\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\"class\": \"ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all\",\n\t\t\t\t\t\t\t\"data-handler\": \"today\",\n\t\t\t\t\t\t\t\"data-event\": \"click\"\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.text( currentText ) :\n\t\t\t\t\t\"\" )\n\t\t\t\t.append( isRTL ? \"\" : controls )[ 0 ].outerHTML;\n\t\t}\n\n\t\tfirstDay = parseInt( this._get( inst, \"firstDay\" ), 10 );\n\t\tfirstDay = ( isNaN( firstDay ) ? 0 : firstDay );\n\n\t\tshowWeek = this._get( inst, \"showWeek\" );\n\t\tdayNames = this._get( inst, \"dayNames\" );\n\t\tdayNamesMin = this._get( inst, \"dayNamesMin\" );\n\t\tmonthNames = this._get( inst, \"monthNames\" );\n\t\tmonthNamesShort = this._get( inst, \"monthNamesShort\" );\n\t\tbeforeShowDay = this._get( inst, \"beforeShowDay\" );\n\t\tshowOtherMonths = this._get( inst, \"showOtherMonths\" );\n\t\tselectOtherMonths = this._get( inst, \"selectOtherMonths\" );\n\t\tdefaultDate = this._getDefaultDate( inst );\n\t\thtml = \"\";\n\n\t\tfor ( row = 0; row < numMonths[ 0 ]; row++ ) {\n\t\t\tgroup = \"\";\n\t\t\tthis.maxRows = 4;\n\t\t\tfor ( col = 0; col < numMonths[ 1 ]; col++ ) {\n\t\t\t\tselectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) );\n\t\t\t\tcornerClass = \" ui-corner-all\";\n\t\t\t\tcalender = \"\";\n\t\t\t\tif ( isMultiMonth ) {\n\t\t\t\t\tcalender += \"<div class='ui-datepicker-group\";\n\t\t\t\t\tif ( numMonths[ 1 ] > 1 ) {\n\t\t\t\t\t\tswitch ( col ) {\n\t\t\t\t\t\t\tcase 0: calender += \" ui-datepicker-group-first\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"right\" : \"left\" ); break;\n\t\t\t\t\t\t\tcase numMonths[ 1 ] - 1: calender += \" ui-datepicker-group-last\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"left\" : \"right\" ); break;\n\t\t\t\t\t\t\tdefault: calender += \" ui-datepicker-group-middle\"; cornerClass = \"\"; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcalender += \"'>\";\n\t\t\t\t}\n\t\t\t\tcalender += \"<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix\" + cornerClass + \"'>\" +\n\t\t\t\t\t( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : \"\" ) +\n\t\t\t\t\t( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : \"\" ) +\n\t\t\t\t\tthis._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\t\t\trow > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers\n\t\t\t\t\t\"</div><table class='ui-datepicker-calendar'><thead>\" +\n\t\t\t\t\t\"<tr>\";\n\t\t\t\tthead = ( showWeek ? \"<th class='ui-datepicker-week-col'>\" + this._get( inst, \"weekHeader\" ) + \"</th>\" : \"\" );\n\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // days of the week\n\t\t\t\t\tday = ( dow + firstDay ) % 7;\n\t\t\t\t\tthead += \"<th scope='col'\" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? \" class='ui-datepicker-week-end'\" : \"\" ) + \">\" +\n\t\t\t\t\t\t\"<span title='\" + dayNames[ day ] + \"'>\" + dayNamesMin[ day ] + \"</span></th>\";\n\t\t\t\t}\n\t\t\t\tcalender += thead + \"</tr></thead><tbody>\";\n\t\t\t\tdaysInMonth = this._getDaysInMonth( drawYear, drawMonth );\n\t\t\t\tif ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) {\n\t\t\t\t\tinst.selectedDay = Math.min( inst.selectedDay, daysInMonth );\n\t\t\t\t}\n\t\t\t\tleadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7;\n\t\t\t\tcurRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate\n\t\t\t\tnumRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043)\n\t\t\t\tthis.maxRows = numRows;\n\t\t\t\tprintDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) );\n\t\t\t\tfor ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows\n\t\t\t\t\tcalender += \"<tr>\";\n\t\t\t\t\ttbody = ( !showWeek ? \"\" : \"<td class='ui-datepicker-week-col'>\" +\n\t\t\t\t\t\tthis._get( inst, \"calculateWeek\" )( printDate ) + \"</td>\" );\n\t\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // create date picker days\n\t\t\t\t\t\tdaySettings = ( beforeShowDay ?\n\t\t\t\t\t\t\tbeforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, \"\" ] );\n\t\t\t\t\t\totherMonth = ( printDate.getMonth() !== drawMonth );\n\t\t\t\t\t\tunselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] ||\n\t\t\t\t\t\t\t( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate );\n\t\t\t\t\t\ttbody += \"<td class='\" +\n\t\t\t\t\t\t\t( ( dow + firstDay + 6 ) % 7 >= 5 ? \" ui-datepicker-week-end\" : \"\" ) + // highlight weekends\n\t\t\t\t\t\t\t( otherMonth ? \" ui-datepicker-other-month\" : \"\" ) + // highlight days from other months\n\t\t\t\t\t\t\t( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key\n\t\t\t\t\t\t\t( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ?\n\n\t\t\t\t\t\t\t// or defaultDate is current printedDate and defaultDate is selectedDate\n\t\t\t\t\t\t\t\" \" + this._dayOverClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( unselectable ? \" \" + this._unselectableClass + \" ui-state-disabled\" : \"\" ) +  // highlight unselectable days\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"\" : \" \" + daySettings[ 1 ] + // highlight custom dates\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" \" + this._currentClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-datepicker-today\" : \"\" ) ) + \"'\" + // highlight today (if different)\n\t\t\t\t\t\t\t( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? \" title='\" + daySettings[ 2 ].replace( /'/g, \"&#39;\" ) + \"'\" : \"\" ) + // cell title\n\t\t\t\t\t\t\t( unselectable ? \"\" : \" data-handler='selectDay' data-event='click' data-month='\" + printDate.getMonth() + \"' data-year='\" + printDate.getFullYear() + \"'\" ) + \">\" + // actions\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"&#xa0;\" : // display for other months\n\t\t\t\t\t\t\t( unselectable ? \"<span class='ui-state-default'>\" + printDate.getDate() + \"</span>\" : \"<a class='ui-state-default\" +\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-state-highlight\" : \"\" ) +\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" ui-state-active\" : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( otherMonth ? \" ui-priority-secondary\" : \"\" ) + // distinguish dates from other months\n\t\t\t\t\t\t\t\"' href='#' aria-current='\" + ( printDate.getTime() === currentDate.getTime() ? \"true\" : \"false\" ) + // mark date as selected for screen reader\n\t\t\t\t\t\t\t\"' data-date='\" + printDate.getDate() + // store date as data\n\t\t\t\t\t\t\t\"'>\" + printDate.getDate() + \"</a>\" ) ) + \"</td>\"; // display selectable date\n\t\t\t\t\t\tprintDate.setDate( printDate.getDate() + 1 );\n\t\t\t\t\t\tprintDate = this._daylightSavingAdjust( printDate );\n\t\t\t\t\t}\n\t\t\t\t\tcalender += tbody + \"</tr>\";\n\t\t\t\t}\n\t\t\t\tdrawMonth++;\n\t\t\t\tif ( drawMonth > 11 ) {\n\t\t\t\t\tdrawMonth = 0;\n\t\t\t\t\tdrawYear++;\n\t\t\t\t}\n\t\t\t\tcalender += \"</tbody></table>\" + ( isMultiMonth ? \"</div>\" +\n\t\t\t\t\t\t\t( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? \"<div class='ui-datepicker-row-break'></div>\" : \"\" ) : \"\" );\n\t\t\t\tgroup += calender;\n\t\t\t}\n\t\t\thtml += group;\n\t\t}\n\t\thtml += buttonPanel;\n\t\tinst._keyEvent = false;\n\t\treturn html;\n\t},\n\n\t/* Generate the month and year header. */\n\t_generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\tsecondary, monthNames, monthNamesShort ) {\n\n\t\tvar inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,\n\t\t\tchangeMonth = this._get( inst, \"changeMonth\" ),\n\t\t\tchangeYear = this._get( inst, \"changeYear\" ),\n\t\t\tshowMonthAfterYear = this._get( inst, \"showMonthAfterYear\" ),\n\t\t\tselectMonthLabel = this._get( inst, \"selectMonthLabel\" ),\n\t\t\tselectYearLabel = this._get( inst, \"selectYearLabel\" ),\n\t\t\thtml = \"<div class='ui-datepicker-title'>\",\n\t\t\tmonthHtml = \"\";\n\n\t\t// Month selection\n\t\tif ( secondary || !changeMonth ) {\n\t\t\tmonthHtml += \"<span class='ui-datepicker-month'>\" + monthNames[ drawMonth ] + \"</span>\";\n\t\t} else {\n\t\t\tinMinYear = ( minDate && minDate.getFullYear() === drawYear );\n\t\t\tinMaxYear = ( maxDate && maxDate.getFullYear() === drawYear );\n\t\t\tmonthHtml += \"<select class='ui-datepicker-month' aria-label='\" + selectMonthLabel + \"' data-handler='selectMonth' data-event='change'>\";\n\t\t\tfor ( month = 0; month < 12; month++ ) {\n\t\t\t\tif ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) {\n\t\t\t\t\tmonthHtml += \"<option value='\" + month + \"'\" +\n\t\t\t\t\t\t( month === drawMonth ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + monthNamesShort[ month ] + \"</option>\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tmonthHtml += \"</select>\";\n\t\t}\n\n\t\tif ( !showMonthAfterYear ) {\n\t\t\thtml += monthHtml + ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" );\n\t\t}\n\n\t\t// Year selection\n\t\tif ( !inst.yearshtml ) {\n\t\t\tinst.yearshtml = \"\";\n\t\t\tif ( secondary || !changeYear ) {\n\t\t\t\thtml += \"<span class='ui-datepicker-year'>\" + drawYear + \"</span>\";\n\t\t\t} else {\n\n\t\t\t\t// determine range of years to display\n\t\t\t\tyears = this._get( inst, \"yearRange\" ).split( \":\" );\n\t\t\t\tthisYear = new Date().getFullYear();\n\t\t\t\tdetermineYear = function( value ) {\n\t\t\t\t\tvar year = ( value.match( /c[+\\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) :\n\t\t\t\t\t\t( value.match( /[+\\-].*/ ) ? thisYear + parseInt( value, 10 ) :\n\t\t\t\t\t\tparseInt( value, 10 ) ) );\n\t\t\t\t\treturn ( isNaN( year ) ? thisYear : year );\n\t\t\t\t};\n\t\t\t\tyear = determineYear( years[ 0 ] );\n\t\t\t\tendYear = Math.max( year, determineYear( years[ 1 ] || \"\" ) );\n\t\t\t\tyear = ( minDate ? Math.max( year, minDate.getFullYear() ) : year );\n\t\t\t\tendYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear );\n\t\t\t\tinst.yearshtml += \"<select class='ui-datepicker-year' aria-label='\" + selectYearLabel + \"' data-handler='selectYear' data-event='change'>\";\n\t\t\t\tfor ( ; year <= endYear; year++ ) {\n\t\t\t\t\tinst.yearshtml += \"<option value='\" + year + \"'\" +\n\t\t\t\t\t\t( year === drawYear ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + year + \"</option>\";\n\t\t\t\t}\n\t\t\t\tinst.yearshtml += \"</select>\";\n\n\t\t\t\thtml += inst.yearshtml;\n\t\t\t\tinst.yearshtml = null;\n\t\t\t}\n\t\t}\n\n\t\thtml += this._get( inst, \"yearSuffix\" );\n\t\tif ( showMonthAfterYear ) {\n\t\t\thtml += ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" ) + monthHtml;\n\t\t}\n\t\thtml += \"</div>\"; // Close datepicker_header\n\t\treturn html;\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustInstDate: function( inst, offset, period ) {\n\t\tvar year = inst.selectedYear + ( period === \"Y\" ? offset : 0 ),\n\t\t\tmonth = inst.selectedMonth + ( period === \"M\" ? offset : 0 ),\n\t\t\tday = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === \"D\" ? offset : 0 ),\n\t\t\tdate = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) );\n\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tif ( period === \"M\" || period === \"Y\" ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t},\n\n\t/* Ensure a date is within any min/max bounds. */\n\t_restrictMinMax: function( inst, date ) {\n\t\tvar minDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tnewDate = ( minDate && date < minDate ? minDate : date );\n\t\treturn ( maxDate && newDate > maxDate ? maxDate : newDate );\n\t},\n\n\t/* Notify change of month/year. */\n\t_notifyChange: function( inst ) {\n\t\tvar onChange = this._get( inst, \"onChangeMonthYear\" );\n\t\tif ( onChange ) {\n\t\t\tonChange.apply( ( inst.input ? inst.input[ 0 ] : null ),\n\t\t\t\t[ inst.selectedYear, inst.selectedMonth + 1, inst ] );\n\t\t}\n\t},\n\n\t/* Determine the number of months to show. */\n\t_getNumberOfMonths: function( inst ) {\n\t\tvar numMonths = this._get( inst, \"numberOfMonths\" );\n\t\treturn ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === \"number\" ? [ 1, numMonths ] : numMonths ) );\n\t},\n\n\t/* Determine the current maximum date - ensure no time components are set. */\n\t_getMinMaxDate: function( inst, minMax ) {\n\t\treturn this._determineDate( inst, this._get( inst, minMax + \"Date\" ), null );\n\t},\n\n\t/* Find the number of days in a given month. */\n\t_getDaysInMonth: function( year, month ) {\n\t\treturn 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate();\n\t},\n\n\t/* Find the day of the week of the first of a month. */\n\t_getFirstDayOfMonth: function( year, month ) {\n\t\treturn new Date( year, month, 1 ).getDay();\n\t},\n\n\t/* Determines if we should allow a \"next/prev\" month display change. */\n\t_canAdjustMonth: function( inst, offset, curYear, curMonth ) {\n\t\tvar numMonths = this._getNumberOfMonths( inst ),\n\t\t\tdate = this._daylightSavingAdjust( new Date( curYear,\n\t\t\tcurMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) );\n\n\t\tif ( offset < 0 ) {\n\t\t\tdate.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) );\n\t\t}\n\t\treturn this._isInRange( inst, date );\n\t},\n\n\t/* Is the given date in the accepted range? */\n\t_isInRange: function( inst, date ) {\n\t\tvar yearSplit, currentYear,\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tminYear = null,\n\t\t\tmaxYear = null,\n\t\t\tyears = this._get( inst, \"yearRange\" );\n\t\t\tif ( years ) {\n\t\t\t\tyearSplit = years.split( \":\" );\n\t\t\t\tcurrentYear = new Date().getFullYear();\n\t\t\t\tminYear = parseInt( yearSplit[ 0 ], 10 );\n\t\t\t\tmaxYear = parseInt( yearSplit[ 1 ], 10 );\n\t\t\t\tif ( yearSplit[ 0 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tminYear += currentYear;\n\t\t\t\t}\n\t\t\t\tif ( yearSplit[ 1 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tmaxYear += currentYear;\n\t\t\t\t}\n\t\t\t}\n\n\t\treturn ( ( !minDate || date.getTime() >= minDate.getTime() ) &&\n\t\t\t( !maxDate || date.getTime() <= maxDate.getTime() ) &&\n\t\t\t( !minYear || date.getFullYear() >= minYear ) &&\n\t\t\t( !maxYear || date.getFullYear() <= maxYear ) );\n\t},\n\n\t/* Provide the configuration settings for formatting/parsing. */\n\t_getFormatConfig: function( inst ) {\n\t\tvar shortYearCutoff = this._get( inst, \"shortYearCutoff\" );\n\t\tshortYearCutoff = ( typeof shortYearCutoff !== \"string\" ? shortYearCutoff :\n\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );\n\t\treturn { shortYearCutoff: shortYearCutoff,\n\t\t\tdayNamesShort: this._get( inst, \"dayNamesShort\" ), dayNames: this._get( inst, \"dayNames\" ),\n\t\t\tmonthNamesShort: this._get( inst, \"monthNamesShort\" ), monthNames: this._get( inst, \"monthNames\" ) };\n\t},\n\n\t/* Format the given date for display. */\n\t_formatDate: function( inst, day, month, year ) {\n\t\tif ( !day ) {\n\t\t\tinst.currentDay = inst.selectedDay;\n\t\t\tinst.currentMonth = inst.selectedMonth;\n\t\t\tinst.currentYear = inst.selectedYear;\n\t\t}\n\t\tvar date = ( day ? ( typeof day === \"object\" ? day :\n\t\t\tthis._daylightSavingAdjust( new Date( year, month, day ) ) ) :\n\t\t\tthis._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\treturn this.formatDate( this._get( inst, \"dateFormat\" ), date, this._getFormatConfig( inst ) );\n\t}\n} );\n\n/*\n * Bind hover events for datepicker elements.\n * Done via delegate so the binding only occurs once in the lifetime of the parent div.\n * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.\n */\nfunction datepicker_bindHover( dpDiv ) {\n\tvar selector = \"button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a\";\n\treturn dpDiv.on( \"mouseout\", selector, function() {\n\t\t\t$( this ).removeClass( \"ui-state-hover\" );\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-prev-hover\" );\n\t\t\t}\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-next-hover\" );\n\t\t\t}\n\t\t} )\n\t\t.on( \"mouseover\", selector, datepicker_handleMouseover );\n}\n\nfunction datepicker_handleMouseover() {\n\tif ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) {\n\t\t$( this ).parents( \".ui-datepicker-calendar\" ).find( \"a\" ).removeClass( \"ui-state-hover\" );\n\t\t$( this ).addClass( \"ui-state-hover\" );\n\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-prev-hover\" );\n\t\t}\n\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-next-hover\" );\n\t\t}\n\t}\n}\n\n/* jQuery extend now ignores nulls! */\nfunction datepicker_extendRemove( target, props ) {\n\t$.extend( target, props );\n\tfor ( var name in props ) {\n\t\tif ( props[ name ] == null ) {\n\t\t\ttarget[ name ] = props[ name ];\n\t\t}\n\t}\n\treturn target;\n}\n\n/* Invoke the datepicker functionality.\n   @param  options  string - a command, optionally followed by additional parameters or\n\t\t\t\t\tObject - settings for attaching new datepicker functionality\n   @return  jQuery object */\n$.fn.datepicker = function( options ) {\n\n\t/* Verify an empty collection wasn't passed - Fixes #6976 */\n\tif ( !this.length ) {\n\t\treturn this;\n\t}\n\n\t/* Initialise the date picker. */\n\tif ( !$.datepicker.initialized ) {\n\t\t$( document ).on( \"mousedown\", $.datepicker._checkExternalClick );\n\t\t$.datepicker.initialized = true;\n\t}\n\n\t/* Append datepicker main container to body if not exist. */\n\tif ( $( \"#\" + $.datepicker._mainDivId ).length === 0 ) {\n\t\t$( \"body\" ).append( $.datepicker.dpDiv );\n\t}\n\n\tvar otherArgs = Array.prototype.slice.call( arguments, 1 );\n\tif ( typeof options === \"string\" && ( options === \"isDisabled\" || options === \"getDate\" || options === \"widget\" ) ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\tif ( options === \"option\" && arguments.length === 2 && typeof arguments[ 1 ] === \"string\" ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\treturn this.each( function() {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\t$.datepicker[ \"_\" + options + \"Datepicker\" ]\n\t\t\t\t.apply( $.datepicker, [ this ].concat( otherArgs ) );\n\t\t} else {\n\t\t\t$.datepicker._attachDatepicker( this, options );\n\t\t}\n\t} );\n};\n\n$.datepicker = new Datepicker(); // singleton instance\n$.datepicker.initialized = false;\n$.datepicker.uuid = new Date().getTime();\n$.datepicker.version = \"1.13.3\";\n\nvar widgetsDatepicker = $.datepicker;\n\n\n\n// This file is deprecated\nvar ie = $.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\n\n/*!\n * jQuery UI Mouse 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Mouse\n//>>group: Widgets\n//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.\n//>>docs: https://api.jqueryui.com/mouse/\n\n\nvar mouseHandled = false;\n$( document ).on( \"mouseup\", function() {\n\tmouseHandled = false;\n} );\n\nvar widgetsMouse = $.widget( \"ui.mouse\", {\n\tversion: \"1.13.3\",\n\toptions: {\n\t\tcancel: \"input, textarea, button, select, option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.on( \"mousedown.\" + this.widgetName, function( event ) {\n\t\t\t\treturn that._mouseDown( event );\n\t\t\t} )\n\t\t\t.on( \"click.\" + this.widgetName, function( event ) {\n\t\t\t\tif ( true === $.data( event.target, that.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t\t\t$.removeData( event.target, that.widgetName + \".preventClickEvent\" );\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.off( \".\" + this.widgetName );\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\t\t}\n\t},\n\n\t_mouseDown: function( event ) {\n\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// We may have missed mouseup (out of window)\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseUp( event );\n\t\t}\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = ( event.which === 1 ),\n\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = ( typeof this.options.cancel === \"string\" && event.target.nodeName ?\n\t\t\t\t$( event.target ).closest( this.options.cancel ).length : false );\n\t\tif ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif ( !this.mouseDelayMet ) {\n\t\t\tthis._mouseDelayTimer = setTimeout( function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay );\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted = ( this._mouseStart( event ) !== false );\n\t\t\tif ( !this._mouseStarted ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif ( true === $.data( event.target, this.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t$.removeData( event.target, this.widgetName + \".preventClickEvent\" );\n\t\t}\n\n\t\t// These delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function( event ) {\n\t\t\treturn that._mouseMove( event );\n\t\t};\n\t\tthis._mouseUpDelegate = function( event ) {\n\t\t\treturn that._mouseUp( event );\n\t\t};\n\n\t\tthis.document\n\t\t\t.on( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.on( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function( event ) {\n\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t// Support: IE <9\n\t\tif ( this._mouseMoved ) {\n\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\tif ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&\n\t\t\t\t\t!event.button ) {\n\t\t\t\treturn this._mouseUp( event );\n\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t} else if ( !event.which ) {\n\n\t\t\t\t// Support: Safari <=8 - 9\n\t\t\t\t// Safari sets which to 0 if you press any of the following keys\n\t\t\t\t// during a drag (#14461)\n\t\t\t\tif ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||\n\t\t\t\t\t\tevent.originalEvent.metaKey || event.originalEvent.shiftKey ) {\n\t\t\t\t\tthis.ignoreMissingWhich = true;\n\t\t\t\t} else if ( !this.ignoreMissingWhich ) {\n\t\t\t\t\treturn this._mouseUp( event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseDrag( event );\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t( this._mouseStart( this._mouseDownEvent, event ) !== false );\n\t\t\tif ( this._mouseStarted ) {\n\t\t\t\tthis._mouseDrag( event );\n\t\t\t} else {\n\t\t\t\tthis._mouseUp( event );\n\t\t\t}\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis.document\n\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif ( event.target === this._mouseDownEvent.target ) {\n\t\t\t\t$.data( event.target, this.widgetName + \".preventClickEvent\", true );\n\t\t\t}\n\n\t\t\tthis._mouseStop( event );\n\t\t}\n\n\t\tif ( this._mouseDelayTimer ) {\n\t\t\tclearTimeout( this._mouseDelayTimer );\n\t\t\tdelete this._mouseDelayTimer;\n\t\t}\n\n\t\tthis.ignoreMissingWhich = false;\n\t\tmouseHandled = false;\n\t\tevent.preventDefault();\n\t},\n\n\t_mouseDistanceMet: function( event ) {\n\t\treturn ( Math.max(\n\t\t\t\tMath.abs( this._mouseDownEvent.pageX - event.pageX ),\n\t\t\t\tMath.abs( this._mouseDownEvent.pageY - event.pageY )\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function( /* event */ ) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function( /* event */ ) {},\n\t_mouseDrag: function( /* event */ ) {},\n\t_mouseStop: function( /* event */ ) {},\n\t_mouseCapture: function( /* event */ ) {\n\t\treturn true;\n\t}\n} );\n\n\n\n// $.ui.plugin is deprecated. Use $.widget() extensions instead.\nvar plugin = $.ui.plugin = {\n\tadd: function( module, option, set ) {\n\t\tvar i,\n\t\t\tproto = $.ui[ module ].prototype;\n\t\tfor ( i in set ) {\n\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\n\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\n\t\t}\n\t},\n\tcall: function( instance, name, args, allowDisconnected ) {\n\t\tvar i,\n\t\t\tset = instance.plugins[ name ];\n\n\t\tif ( !set ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||\n\t\t\t\tinstance.element[ 0 ].parentNode.nodeType === 11 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\n\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\nvar safeBlur = $.ui.safeBlur = function( element ) {\n\n\t// Support: IE9 - 10 only\n\t// If the <body> is blurred, IE will switch windows, see #9420\n\tif ( element && element.nodeName.toLowerCase() !== \"body\" ) {\n\t\t$( element ).trigger( \"blur\" );\n\t}\n};\n\n\n/*!\n * jQuery UI Draggable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Draggable\n//>>group: Interactions\n//>>description: Enables dragging functionality for any element.\n//>>docs: https://api.jqueryui.com/draggable/\n//>>demos: https://jqueryui.com/draggable/\n//>>css.structure: ../../themes/base/draggable.css\n\n\n$.widget( \"ui.draggable\", $.ui.mouse, {\n\tversion: \"1.13.3\",\n\twidgetEventPrefix: \"drag\",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: \"default\",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: \"both\",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false,\n\n\t\t// Callbacks\n\t\tdrag: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\t_create: function() {\n\n\t\tif ( this.options.helper === \"original\" ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\t\tif ( this.options.addClasses ) {\n\t\t\tthis._addClass( \"ui-draggable\" );\n\t\t}\n\t\tthis._setHandleClassName();\n\n\t\tthis._mouseInit();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._removeHandleClassName();\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tif ( ( this.helper || this.element ).is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis.destroyOnClear = true;\n\t\t\treturn;\n\t\t}\n\t\tthis._removeHandleClassName();\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar o = this.options;\n\n\t\t// Among others, prevent a drag on a resizable-handle\n\t\tif ( this.helper || o.disabled ||\n\t\t\t\t$( event.target ).closest( \".ui-resizable-handle\" ).length > 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//Quit if we're not on a valid handle\n\t\tthis.handle = this._getHandle( event );\n\t\tif ( !this.handle ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._blurActiveElement( event );\n\n\t\tthis._blockFrames( o.iframeFix === true ? \"iframe\" : o.iframeFix );\n\n\t\treturn true;\n\n\t},\n\n\t_blockFrames: function( selector ) {\n\t\tthis.iframeBlocks = this.document.find( selector ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( \"position\", \"absolute\" )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.outerWidth( iframe.outerWidth() )\n\t\t\t\t.outerHeight( iframe.outerHeight() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_blurActiveElement: function( event ) {\n\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\ttarget = $( event.target );\n\n\t\t// Don't blur if the event occurred on an element that is within\n\t\t// the currently focused element\n\t\t// See #10527, #12472\n\t\tif ( target.closest( activeElement ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Blur any element that currently has focus, see #4261\n\t\t$.ui.safeBlur( activeElement );\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\tthis._addClass( this.helper, \"ui-draggable-dragging\" );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper's css position\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\t\tthis.scrollParent = this.helper.scrollParent( true );\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tthis.hasFixedAncestor = this.helper.parents().filter( function() {\n\t\t\t\treturn $( this ).css( \"position\" ) === \"fixed\";\n\t\t\t} ).length > 0;\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.positionAbs = this.element.offset();\n\t\tthis._refreshOffsets( event );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition( event, false );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\tif ( o.cursorAt ) {\n\t\t\tthis._adjustOffsetFromHelper( o.cursorAt );\n\t\t}\n\n\t\t//Set a containment if given in the options\n\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif ( this._trigger( \"start\", event ) === false ) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\t// Execute the drag once - this causes the helper not to be visible before getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event, true );\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has started\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStart( this, event );\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t_refreshOffsets: function( event ) {\n\t\tthis.offset = {\n\t\t\ttop: this.positionAbs.top - this.margins.top,\n\t\t\tleft: this.positionAbs.left - this.margins.left,\n\t\t\tscroll: false,\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset()\n\t\t};\n\n\t\tthis.offset.click = {\n\t\t\tleft: event.pageX - this.offset.left,\n\t\t\ttop: event.pageY - this.offset.top\n\t\t};\n\t},\n\n\t_mouseDrag: function( event, noPropagation ) {\n\n\t\t// reset any necessary cached properties (see #5009)\n\t\tif ( this.hasFixedAncestor ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event, true );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif ( !noPropagation ) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif ( this._trigger( \"drag\", event, ui ) === false ) {\n\t\t\t\tthis._mouseUp( new $.Event( \"mouseup\", event ) );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar that = this,\n\t\t\tdropped = false;\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\tdropped = $.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif ( this.dropped ) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\n\t\tif ( ( this.options.revert === \"invalid\" && !dropped ) ||\n\t\t\t\t( this.options.revert === \"valid\" && dropped ) ||\n\t\t\t\tthis.options.revert === true || ( typeof this.options.revert === \"function\" &&\n\t\t\t\tthis.options.revert.call( this.element, dropped ) )\n\t\t) {\n\t\t\t$( this.helper ).animate(\n\t\t\t\tthis.originalPosition,\n\t\t\t\tparseInt( this.options.revertDuration, 10 ),\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( that._trigger( \"stop\", event ) !== false ) {\n\t\t\t\t\t\tthat._clear();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tif ( this._trigger( \"stop\", event ) !== false ) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis._unblockFrames();\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has stopped\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStop( this, event );\n\t\t}\n\n\t\t// Only need to focus if the event occurred on the draggable itself, see #10527\n\t\tif ( this.handleElement.is( event.target ) ) {\n\n\t\t\t// The interaction is over; whether or not the click resulted in a drag,\n\t\t\t// focus the element\n\t\t\tthis.element.trigger( \"focus\" );\n\t\t}\n\n\t\treturn $.ui.mouse.prototype._mouseUp.call( this, event );\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.helper.is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: this.element[ 0 ] } ) );\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t_getHandle: function( event ) {\n\t\treturn this.options.handle ?\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\n\t\t\ttrue;\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.handleElement = this.options.handle ?\n\t\t\tthis.element.find( this.options.handle ) : this.element;\n\t\tthis._addClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_removeHandleClassName: function() {\n\t\tthis._removeClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelperIsFunction = typeof o.helper === \"function\",\n\t\t\thelper = helperIsFunction ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ?\n\t\t\t\t\tthis.element.clone().removeAttr( \"id\" ) :\n\t\t\t\t\tthis.element );\n\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\thelper.appendTo( ( o.appendTo === \"parent\" ?\n\t\t\t\tthis.element[ 0 ].parentNode :\n\t\t\t\to.appendTo ) );\n\t\t}\n\n\t\t// https://bugs.jqueryui.com/ticket/9446\n\t\t// a helper function can return the original element\n\t\t// which wouldn't have been set to relative in _create\n\t\tif ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\n\t\tif ( helper[ 0 ] !== this.element[ 0 ] &&\n\t\t\t\t!( /(fixed|absolute)/ ).test( helper.css( \"position\" ) ) ) {\n\t\t\thelper.css( \"position\", \"absolute\" );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_setPositionRelative: function() {\n\t\tif ( !( /^(?:r|a|f)/ ).test( this.element.css( \"position\" ) ) ) {\n\t\t\tthis.element[ 0 ].style.position = \"relative\";\n\t\t}\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( Array.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_isRootNode: function( element ) {\n\t\treturn ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tvar po = this.offsetParent.offset(),\n\t\t\tdocument = this.document[ 0 ];\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== document &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif ( this._isRootNode( this.offsetParent[ 0 ] ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\t\tif ( this.cssPosition !== \"relative\" ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\tvar p = this.element.position(),\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),\n\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )\n\t\t};\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.element.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.element.css( \"marginTop\" ), 10 ) || 0 ),\n\t\t\tright: ( parseInt( this.element.css( \"marginRight\" ), 10 ) || 0 ),\n\t\t\tbottom: ( parseInt( this.element.css( \"marginBottom\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar isUserScrollable, c, ce,\n\t\t\to = this.options,\n\t\t\tdocument = this.document[ 0 ];\n\n\t\tthis.relativeContainer = null;\n\n\t\tif ( !o.containment ) {\n\t\t\tthis.containment = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\t$( window ).scrollTop() +\n\t\t\t\t\t( $( window ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"document\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment.constructor === Array ) {\n\t\t\tthis.containment = o.containment;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\n\t\tc = $( o.containment );\n\t\tce = c[ 0 ];\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tisUserScrollable = /(scroll|auto)/.test( c.css( \"overflow\" ) );\n\n\t\tthis.containment = [\n\t\t\t( parseInt( c.css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingLeft\" ), 10 ) || 0 ),\n\t\t\t( parseInt( c.css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingTop\" ), 10 ) || 0 ),\n\t\t\t( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t( parseInt( c.css( \"borderRightWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.width -\n\t\t\t\tthis.margins.left -\n\t\t\t\tthis.margins.right,\n\t\t\t( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t( parseInt( c.css( \"borderBottomWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.height -\n\t\t\t\tthis.margins.top -\n\t\t\t\tthis.margins.bottom\n\t\t];\n\t\tthis.relativeContainer = c;\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event, constrainPosition ) {\n\n\t\tvar containment, co, top, left,\n\t\t\to = this.options,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY;\n\n\t\t// Cache the scroll\n\t\tif ( !scrollIsRootNode || !this.offset.scroll ) {\n\t\t\tthis.offset.scroll = {\n\t\t\t\ttop: this.scrollParent.scrollTop(),\n\t\t\t\tleft: this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\t// If we are not dragging yet, we won't check for options\n\t\tif ( constrainPosition ) {\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( this.relativeContainer ) {\n\t\t\t\t\tco = this.relativeContainer.offset();\n\t\t\t\t\tcontainment = [\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcontainment = this.containment;\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.offset.click.left < containment[ 0 ] ) {\n\t\t\t\t\tpageX = containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < containment[ 1 ] ) {\n\t\t\t\t\tpageY = containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > containment[ 2 ] ) {\n\t\t\t\t\tpageX = containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > containment[ 3 ] ) {\n\t\t\t\t\tpageY = containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid\n\t\t\t\t// argument errors in IE (see ticket #6950)\n\t\t\t\ttop = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -\n\t\t\t\t\tthis.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;\n\t\t\t\tpageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||\n\t\t\t\t\ttop - this.offset.click.top > containment[ 3 ] ) ?\n\t\t\t\t\t\ttop :\n\t\t\t\t\t\t( ( top - this.offset.click.top >= containment[ 1 ] ) ?\n\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;\n\n\t\t\t\tleft = o.grid[ 0 ] ? this.originalPageX +\n\t\t\t\t\tMath.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :\n\t\t\t\t\tthis.originalPageX;\n\t\t\t\tpageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||\n\t\t\t\t\tleft - this.offset.click.left > containment[ 2 ] ) ?\n\t\t\t\t\t\tleft :\n\t\t\t\t\t\t( ( left - this.offset.click.left >= containment[ 0 ] ) ?\n\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"y\" ) {\n\t\t\t\tpageX = this.originalPageX;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"x\" ) {\n\t\t\t\tpageY = this.originalPageY;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis._removeClass( this.helper, \"ui-draggable-dragging\" );\n\t\tif ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t\tif ( this.destroyOnClear ) {\n\t\t\tthis.destroy();\n\t\t}\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function( type, event, ui ) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call( this, type, [ event, ui, this ], true );\n\n\t\t// Absolute position and offset (see #6884 ) have to be recalculated after plugins\n\t\tif ( /^(drag|start|stop)/.test( type ) ) {\n\t\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\t\t\tui.offset = this.positionAbs;\n\t\t}\n\t\treturn $.Widget.prototype._trigger.call( this, type, event, ui );\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function() {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n} );\n\n$.ui.plugin.add( \"draggable\", \"connectToSortable\", {\n\tstart: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.sortables = [];\n\t\t$( draggable.options.connectToSortable ).each( function() {\n\t\t\tvar sortable = $( this ).sortable( \"instance\" );\n\n\t\t\tif ( sortable && !sortable.options.disabled ) {\n\t\t\t\tdraggable.sortables.push( sortable );\n\n\t\t\t\t// RefreshPositions is called at drag start to refresh the containerCache\n\t\t\t\t// which is used in drag. This ensures it's initialized and synchronized\n\t\t\t\t// with any changes that might have happened on the page since initialization.\n\t\t\t\tsortable.refreshPositions();\n\t\t\t\tsortable._trigger( \"activate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tstop: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.cancelHelperRemoval = false;\n\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar sortable = this;\n\n\t\t\tif ( sortable.isOver ) {\n\t\t\t\tsortable.isOver = 0;\n\n\t\t\t\t// Allow this sortable to handle removing the helper\n\t\t\t\tdraggable.cancelHelperRemoval = true;\n\t\t\t\tsortable.cancelHelperRemoval = false;\n\n\t\t\t\t// Use _storedCSS To restore properties in the sortable,\n\t\t\t\t// as this also handles revert (#9675) since the draggable\n\t\t\t\t// may have modified them in unexpected ways (#8809)\n\t\t\t\tsortable._storedCSS = {\n\t\t\t\t\tposition: sortable.placeholder.css( \"position\" ),\n\t\t\t\t\ttop: sortable.placeholder.css( \"top\" ),\n\t\t\t\t\tleft: sortable.placeholder.css( \"left\" )\n\t\t\t\t};\n\n\t\t\t\tsortable._mouseStop( event );\n\n\t\t\t\t// Once drag has ended, the sortable should return to using\n\t\t\t\t// its original helper, not the shared helper from draggable\n\t\t\t\tsortable.options.helper = sortable.options._helper;\n\t\t\t} else {\n\n\t\t\t\t// Prevent this Sortable from removing the helper.\n\t\t\t\t// However, don't set the draggable to remove the helper\n\t\t\t\t// either as another connected Sortable may yet handle the removal.\n\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\tsortable._trigger( \"deactivate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( event, ui, draggable ) {\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar innermostIntersecting = false,\n\t\t\t\tsortable = this;\n\n\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\tsortable.positionAbs = draggable.positionAbs;\n\t\t\tsortable.helperProportions = draggable.helperProportions;\n\t\t\tsortable.offset.click = draggable.offset.click;\n\n\t\t\tif ( sortable._intersectsWith( sortable.containerCache ) ) {\n\t\t\t\tinnermostIntersecting = true;\n\n\t\t\t\t$.each( draggable.sortables, function() {\n\n\t\t\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\t\t\tthis.positionAbs = draggable.positionAbs;\n\t\t\t\t\tthis.helperProportions = draggable.helperProportions;\n\t\t\t\t\tthis.offset.click = draggable.offset.click;\n\n\t\t\t\t\tif ( this !== sortable &&\n\t\t\t\t\t\t\tthis._intersectsWith( this.containerCache ) &&\n\t\t\t\t\t\t\t$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {\n\t\t\t\t\t\tinnermostIntersecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn innermostIntersecting;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( innermostIntersecting ) {\n\n\t\t\t\t// If it intersects, we use a little isOver variable and set it once,\n\t\t\t\t// so that the move-in stuff gets fired only once.\n\t\t\t\tif ( !sortable.isOver ) {\n\t\t\t\t\tsortable.isOver = 1;\n\n\t\t\t\t\t// Store draggable's parent in case we need to reappend to it later.\n\t\t\t\t\tdraggable._parent = ui.helper.parent();\n\n\t\t\t\t\tsortable.currentItem = ui.helper\n\t\t\t\t\t\t.appendTo( sortable.element )\n\t\t\t\t\t\t.data( \"ui-sortable-item\", true );\n\n\t\t\t\t\t// Store helper option to later restore it\n\t\t\t\t\tsortable.options._helper = sortable.options.helper;\n\n\t\t\t\t\tsortable.options.helper = function() {\n\t\t\t\t\t\treturn ui.helper[ 0 ];\n\t\t\t\t\t};\n\n\t\t\t\t\t// Fire the start events of the sortable with our passed browser event,\n\t\t\t\t\t// and our own helper (so it doesn't create a new one)\n\t\t\t\t\tevent.target = sortable.currentItem[ 0 ];\n\t\t\t\t\tsortable._mouseCapture( event, true );\n\t\t\t\t\tsortable._mouseStart( event, true, true );\n\n\t\t\t\t\t// Because the browser event is way off the new appended portlet,\n\t\t\t\t\t// modify necessary variables to reflect the changes\n\t\t\t\t\tsortable.offset.click.top = draggable.offset.click.top;\n\t\t\t\t\tsortable.offset.click.left = draggable.offset.click.left;\n\t\t\t\t\tsortable.offset.parent.left -= draggable.offset.parent.left -\n\t\t\t\t\t\tsortable.offset.parent.left;\n\t\t\t\t\tsortable.offset.parent.top -= draggable.offset.parent.top -\n\t\t\t\t\t\tsortable.offset.parent.top;\n\n\t\t\t\t\tdraggable._trigger( \"toSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is in a valid drop zone,\n\t\t\t\t\t// used solely in the revert option to handle \"valid/invalid\".\n\t\t\t\t\tdraggable.dropped = sortable.element;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables in the case that\n\t\t\t\t\t// adding to one sortable changes the location of the other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Hack so receive/update callbacks work (mostly)\n\t\t\t\t\tdraggable.currentItem = draggable.element;\n\t\t\t\t\tsortable.fromOutside = draggable;\n\t\t\t\t}\n\n\t\t\t\tif ( sortable.currentItem ) {\n\t\t\t\t\tsortable._mouseDrag( event );\n\n\t\t\t\t\t// Copy the sortable's position because the draggable's can potentially reflect\n\t\t\t\t\t// a relative position, while sortable is always absolute, which the dragged\n\t\t\t\t\t// element has now become. (#8809)\n\t\t\t\t\tui.position = sortable.position;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If it doesn't intersect with the sortable, and it intersected before,\n\t\t\t\t// we fake the drag stop of the sortable, but make sure it doesn't remove\n\t\t\t\t// the helper by using cancelHelperRemoval.\n\t\t\t\tif ( sortable.isOver ) {\n\n\t\t\t\t\tsortable.isOver = 0;\n\t\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\t\t// Calling sortable's mouseStop would trigger a revert,\n\t\t\t\t\t// so revert must be temporarily false until after mouseStop is called.\n\t\t\t\t\tsortable.options._revert = sortable.options.revert;\n\t\t\t\t\tsortable.options.revert = false;\n\n\t\t\t\t\tsortable._trigger( \"out\", event, sortable._uiHash( sortable ) );\n\t\t\t\t\tsortable._mouseStop( event, true );\n\n\t\t\t\t\t// Restore sortable behaviors that were modfied\n\t\t\t\t\t// when the draggable entered the sortable area (#9481)\n\t\t\t\t\tsortable.options.revert = sortable.options._revert;\n\t\t\t\t\tsortable.options.helper = sortable.options._helper;\n\n\t\t\t\t\tif ( sortable.placeholder ) {\n\t\t\t\t\t\tsortable.placeholder.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore and recalculate the draggable's offset considering the sortable\n\t\t\t\t\t// may have modified them in unexpected ways. (#8809, #10669)\n\t\t\t\t\tui.helper.appendTo( draggable._parent );\n\t\t\t\t\tdraggable._refreshOffsets( event );\n\t\t\t\t\tui.position = draggable._generatePosition( event, true );\n\n\t\t\t\t\tdraggable._trigger( \"fromSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is no longer in a valid drop zone\n\t\t\t\t\tdraggable.dropped = false;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables just in case removing\n\t\t\t\t\t// from one sortable changes the location of other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"cursor\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( \"body\" ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"cursor\" ) ) {\n\t\t\to._cursor = t.css( \"cursor\" );\n\t\t}\n\t\tt.css( \"cursor\", o.cursor );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._cursor ) {\n\t\t\t$( \"body\" ).css( \"cursor\", o._cursor );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"opacity\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\t\tif ( t.css( \"opacity\" ) ) {\n\t\t\to._opacity = t.css( \"opacity\" );\n\t\t}\n\t\tt.css( \"opacity\", o.opacity );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._opacity ) {\n\t\t\t$( ui.helper ).css( \"opacity\", o._opacity );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"scroll\", {\n\tstart: function( event, ui, i ) {\n\t\tif ( !i.scrollParentNotHidden ) {\n\t\t\ti.scrollParentNotHidden = i.helper.scrollParent( false );\n\t\t}\n\n\t\tif ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&\n\t\t\t\ti.scrollParentNotHidden[ 0 ].tagName !== \"HTML\" ) {\n\t\t\ti.overflowOffset = i.scrollParentNotHidden.offset();\n\t\t}\n\t},\n\tdrag: function( event, ui, i  ) {\n\n\t\tvar o = i.options,\n\t\t\tscrolled = false,\n\t\t\tscrollParent = i.scrollParentNotHidden[ 0 ],\n\t\t\tdocument = i.document[ 0 ];\n\n\t\tif ( scrollParent !== document && scrollParent.tagName !== \"HTML\" ) {\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( i, event );\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"snap\", {\n\tstart: function( event, ui, i ) {\n\n\t\tvar o = i.options;\n\n\t\ti.snapElements = [];\n\n\t\t$( o.snap.constructor !== String ? ( o.snap.items || \":data(ui-draggable)\" ) : o.snap )\n\t\t\t.each( function() {\n\t\t\t\tvar $t = $( this ),\n\t\t\t\t\t$o = $t.offset();\n\t\t\t\tif ( this !== i.element[ 0 ] ) {\n\t\t\t\t\ti.snapElements.push( {\n\t\t\t\t\t\titem: this,\n\t\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t},\n\tdrag: function( event, ui, inst ) {\n\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\n\t\t\to = inst.options,\n\t\t\td = o.snapTolerance,\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor ( i = inst.snapElements.length - 1; i >= 0; i-- ) {\n\n\t\t\tl = inst.snapElements[ i ].left - inst.margins.left;\n\t\t\tr = l + inst.snapElements[ i ].width;\n\t\t\tt = inst.snapElements[ i ].top - inst.margins.top;\n\t\t\tb = t + inst.snapElements[ i ].height;\n\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||\n\t\t\t\t\t!$.contains( inst.snapElements[ i ].item.ownerDocument,\n\t\t\t\t\tinst.snapElements[ i ].item ) ) {\n\t\t\t\tif ( inst.snapElements[ i ].snapping ) {\n\t\t\t\t\tif ( inst.options.snap.release ) {\n\t\t\t\t\t\tinst.options.snap.release.call(\n\t\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t$.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinst.snapElements[ i ].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( o.snapMode !== \"inner\" ) {\n\t\t\t\tts = Math.abs( t - y2 ) <= d;\n\t\t\t\tbs = Math.abs( b - y1 ) <= d;\n\t\t\t\tls = Math.abs( l - x2 ) <= d;\n\t\t\t\trs = Math.abs( r - x1 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirst = ( ts || bs || ls || rs );\n\n\t\t\tif ( o.snapMode !== \"outer\" ) {\n\t\t\t\tts = Math.abs( t - y1 ) <= d;\n\t\t\t\tbs = Math.abs( b - y2 ) <= d;\n\t\t\t\tls = Math.abs( l - x1 ) <= d;\n\t\t\t\trs = Math.abs( r - x2 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {\n\t\t\t\tif ( inst.options.snap.snap ) {\n\t\t\t\t\tinst.options.snap.snap.call(\n\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\t$.extend( inst._uiHash(), {\n\t\t\t\t\t\t\tsnapItem: inst.snapElements[ i ].item\n\t\t\t\t\t\t} ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\tinst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );\n\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"stack\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar min,\n\t\t\to = instance.options,\n\t\t\tgroup = $.makeArray( $( o.stack ) ).sort( function( a, b ) {\n\t\t\t\treturn ( parseInt( $( a ).css( \"zIndex\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( b ).css( \"zIndex\" ), 10 ) || 0 );\n\t\t\t} );\n\n\t\tif ( !group.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tmin = parseInt( $( group[ 0 ] ).css( \"zIndex\" ), 10 ) || 0;\n\t\t$( group ).each( function( i ) {\n\t\t\t$( this ).css( \"zIndex\", min + i );\n\t\t} );\n\t\tthis.css( \"zIndex\", ( min + group.length ) );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"zIndex\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"zIndex\" ) ) {\n\t\t\to._zIndex = t.css( \"zIndex\" );\n\t\t}\n\t\tt.css( \"zIndex\", o.zIndex );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\n\t\tif ( o._zIndex ) {\n\t\t\t$( ui.helper ).css( \"zIndex\", o._zIndex );\n\t\t}\n\t}\n} );\n\nvar widgetsDraggable = $.ui.draggable;\n\n\n/*!\n * jQuery UI Resizable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Resizable\n//>>group: Interactions\n//>>description: Enables resize functionality for any element.\n//>>docs: https://api.jqueryui.com/resizable/\n//>>demos: https://jqueryui.com/resizable/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/resizable.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.resizable\", $.ui.mouse, {\n\tversion: \"1.13.3\",\n\twidgetEventPrefix: \"resize\",\n\toptions: {\n\t\talsoResize: false,\n\t\tanimate: false,\n\t\tanimateDuration: \"slow\",\n\t\tanimateEasing: \"swing\",\n\t\taspectRatio: false,\n\t\tautoHide: false,\n\t\tclasses: {\n\t\t\t\"ui-resizable-se\": \"ui-icon ui-icon-gripsmall-diagonal-se\"\n\t\t},\n\t\tcontainment: false,\n\t\tghost: false,\n\t\tgrid: false,\n\t\thandles: \"e,s,se\",\n\t\thelper: false,\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 10,\n\t\tminWidth: 10,\n\n\t\t// See #7960\n\t\tzIndex: 90,\n\n\t\t// Callbacks\n\t\tresize: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_num: function( value ) {\n\t\treturn parseFloat( value ) || 0;\n\t},\n\n\t_isNumber: function( value ) {\n\t\treturn !isNaN( parseFloat( value ) );\n\t},\n\n\t_hasScroll: function( el, a ) {\n\n\t\tif ( $( el ).css( \"overflow\" ) === \"hidden\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar scroll = ( a && a === \"left\" ) ? \"scrollLeft\" : \"scrollTop\",\n\t\t\thas = false;\n\n\t\tif ( el[ scroll ] > 0 ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: determine which cases actually cause this to happen\n\t\t// if the element doesn't have the scroll set, see if it's possible to\n\t\t// set the scroll\n\t\ttry {\n\t\t\tel[ scroll ] = 1;\n\t\t\thas = ( el[ scroll ] > 0 );\n\t\t\tel[ scroll ] = 0;\n\t\t} catch ( e ) {\n\n\t\t\t// `el` might be a string, then setting `scroll` will throw\n\t\t\t// an error in strict mode; ignore it.\n\t\t}\n\t\treturn has;\n\t},\n\n\t_create: function() {\n\n\t\tvar margins,\n\t\t\to = this.options,\n\t\t\tthat = this;\n\t\tthis._addClass( \"ui-resizable\" );\n\n\t\t$.extend( this, {\n\t\t\t_aspectRatio: !!( o.aspectRatio ),\n\t\t\taspectRatio: o.aspectRatio,\n\t\t\toriginalElement: this.element,\n\t\t\t_proportionallyResizeElements: [],\n\t\t\t_helper: o.helper || o.ghost || o.animate ? o.helper || \"ui-resizable-helper\" : null\n\t\t} );\n\n\t\t// Wrap the element if it cannot hold child nodes\n\t\tif ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) {\n\n\t\t\tthis.element.wrap(\n\t\t\t\t$( \"<div class='ui-wrapper'></div>\" ).css( {\n\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\tposition: this.element.css( \"position\" ),\n\t\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\t\ttop: this.element.css( \"top\" ),\n\t\t\t\t\tleft: this.element.css( \"left\" )\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\tthis.element = this.element.parent().data(\n\t\t\t\t\"ui-resizable\", this.element.resizable( \"instance\" )\n\t\t\t);\n\n\t\t\tthis.elementIsWrapper = true;\n\n\t\t\tmargins = {\n\t\t\t\tmarginTop: this.originalElement.css( \"marginTop\" ),\n\t\t\t\tmarginRight: this.originalElement.css( \"marginRight\" ),\n\t\t\t\tmarginBottom: this.originalElement.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: this.originalElement.css( \"marginLeft\" )\n\t\t\t};\n\n\t\t\tthis.element.css( margins );\n\t\t\tthis.originalElement.css( \"margin\", 0 );\n\n\t\t\t// support: Safari\n\t\t\t// Prevent Safari textarea resize\n\t\t\tthis.originalResizeStyle = this.originalElement.css( \"resize\" );\n\t\t\tthis.originalElement.css( \"resize\", \"none\" );\n\n\t\t\tthis._proportionallyResizeElements.push( this.originalElement.css( {\n\t\t\t\tposition: \"static\",\n\t\t\t\tzoom: 1,\n\t\t\t\tdisplay: \"block\"\n\t\t\t} ) );\n\n\t\t\t// Support: IE9\n\t\t\t// avoid IE jump (hard set the margin)\n\t\t\tthis.originalElement.css( margins );\n\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tthis._setupHandles();\n\n\t\tif ( o.autoHide ) {\n\t\t\t$( this.element )\n\t\t\t\t.on( \"mouseenter\", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthat._removeClass( \"ui-resizable-autohide\" );\n\t\t\t\t\tthat._handles.show();\n\t\t\t\t} )\n\t\t\t\t.on( \"mouseleave\", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ( !that.resizing ) {\n\t\t\t\t\t\tthat._addClass( \"ui-resizable-autohide\" );\n\t\t\t\t\t\tthat._handles.hide();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\n\t\tthis._mouseInit();\n\t},\n\n\t_destroy: function() {\n\n\t\tthis._mouseDestroy();\n\t\tthis._addedHandles.remove();\n\n\t\tvar wrapper,\n\t\t\t_destroy = function( exp ) {\n\t\t\t\t$( exp )\n\t\t\t\t\t.removeData( \"resizable\" )\n\t\t\t\t\t.removeData( \"ui-resizable\" )\n\t\t\t\t\t.off( \".resizable\" );\n\t\t\t};\n\n\t\t// TODO: Unwrap at same DOM position\n\t\tif ( this.elementIsWrapper ) {\n\t\t\t_destroy( this.element );\n\t\t\twrapper = this.element;\n\t\t\tthis.originalElement.css( {\n\t\t\t\tposition: wrapper.css( \"position\" ),\n\t\t\t\twidth: wrapper.outerWidth(),\n\t\t\t\theight: wrapper.outerHeight(),\n\t\t\t\ttop: wrapper.css( \"top\" ),\n\t\t\t\tleft: wrapper.css( \"left\" )\n\t\t\t} ).insertAfter( wrapper );\n\t\t\twrapper.remove();\n\t\t}\n\n\t\tthis.originalElement.css( \"resize\", this.originalResizeStyle );\n\t\t_destroy( this.originalElement );\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\tcase \"handles\":\n\t\t\tthis._removeHandles();\n\t\t\tthis._setupHandles();\n\t\t\tbreak;\n\t\tcase \"aspectRatio\":\n\t\t\tthis._aspectRatio = !!value;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setupHandles: function() {\n\t\tvar o = this.options, handle, i, n, hname, axis, that = this;\n\t\tthis.handles = o.handles ||\n\t\t\t( !$( \".ui-resizable-handle\", this.element ).length ?\n\t\t\t\t\"e,s,se\" : {\n\t\t\t\t\tn: \".ui-resizable-n\",\n\t\t\t\t\te: \".ui-resizable-e\",\n\t\t\t\t\ts: \".ui-resizable-s\",\n\t\t\t\t\tw: \".ui-resizable-w\",\n\t\t\t\t\tse: \".ui-resizable-se\",\n\t\t\t\t\tsw: \".ui-resizable-sw\",\n\t\t\t\t\tne: \".ui-resizable-ne\",\n\t\t\t\t\tnw: \".ui-resizable-nw\"\n\t\t\t\t} );\n\n\t\tthis._handles = $();\n\t\tthis._addedHandles = $();\n\t\tif ( this.handles.constructor === String ) {\n\n\t\t\tif ( this.handles === \"all\" ) {\n\t\t\t\tthis.handles = \"n,e,s,w,se,sw,ne,nw\";\n\t\t\t}\n\n\t\t\tn = this.handles.split( \",\" );\n\t\t\tthis.handles = {};\n\n\t\t\tfor ( i = 0; i < n.length; i++ ) {\n\n\t\t\t\thandle = String.prototype.trim.call( n[ i ] );\n\t\t\t\thname = \"ui-resizable-\" + handle;\n\t\t\t\taxis = $( \"<div>\" );\n\t\t\t\tthis._addClass( axis, \"ui-resizable-handle \" + hname );\n\n\t\t\t\taxis.css( { zIndex: o.zIndex } );\n\n\t\t\t\tthis.handles[ handle ] = \".ui-resizable-\" + handle;\n\t\t\t\tif ( !this.element.children( this.handles[ handle ] ).length ) {\n\t\t\t\t\tthis.element.append( axis );\n\t\t\t\t\tthis._addedHandles = this._addedHandles.add( axis );\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tthis._renderAxis = function( target ) {\n\n\t\t\tvar i, axis, padPos, padWrapper;\n\n\t\t\ttarget = target || this.element;\n\n\t\t\tfor ( i in this.handles ) {\n\n\t\t\t\tif ( this.handles[ i ].constructor === String ) {\n\t\t\t\t\tthis.handles[ i ] = this.element.children( this.handles[ i ] ).first().show();\n\t\t\t\t} else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {\n\t\t\t\t\tthis.handles[ i ] = $( this.handles[ i ] );\n\t\t\t\t\tthis._on( this.handles[ i ], { \"mousedown\": that._mouseDown } );\n\t\t\t\t}\n\n\t\t\t\tif ( this.elementIsWrapper &&\n\t\t\t\t\t\tthis.originalElement[ 0 ]\n\t\t\t\t\t\t\t.nodeName\n\t\t\t\t\t\t\t.match( /^(textarea|input|select|button)$/i ) ) {\n\t\t\t\t\taxis = $( this.handles[ i ], this.element );\n\n\t\t\t\t\tpadWrapper = /sw|ne|nw|se|n|s/.test( i ) ?\n\t\t\t\t\t\taxis.outerHeight() :\n\t\t\t\t\t\taxis.outerWidth();\n\n\t\t\t\t\tpadPos = [ \"padding\",\n\t\t\t\t\t\t/ne|nw|n/.test( i ) ? \"Top\" :\n\t\t\t\t\t\t/se|sw|s/.test( i ) ? \"Bottom\" :\n\t\t\t\t\t\t/^e$/.test( i ) ? \"Right\" : \"Left\" ].join( \"\" );\n\n\t\t\t\t\ttarget.css( padPos, padWrapper );\n\n\t\t\t\t\tthis._proportionallyResize();\n\t\t\t\t}\n\n\t\t\t\tthis._handles = this._handles.add( this.handles[ i ] );\n\t\t\t}\n\t\t};\n\n\t\t// TODO: make renderAxis a prototype function\n\t\tthis._renderAxis( this.element );\n\n\t\tthis._handles = this._handles.add( this.element.find( \".ui-resizable-handle\" ) );\n\t\tthis._handles.disableSelection();\n\n\t\tthis._handles.on( \"mouseover\", function() {\n\t\t\tif ( !that.resizing ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\taxis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i );\n\t\t\t\t}\n\t\t\t\tthat.axis = axis && axis[ 1 ] ? axis[ 1 ] : \"se\";\n\t\t\t}\n\t\t} );\n\n\t\tif ( o.autoHide ) {\n\t\t\tthis._handles.hide();\n\t\t\tthis._addClass( \"ui-resizable-autohide\" );\n\t\t}\n\t},\n\n\t_removeHandles: function() {\n\t\tthis._addedHandles.remove();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar i, handle,\n\t\t\tcapture = false;\n\n\t\tfor ( i in this.handles ) {\n\t\t\thandle = $( this.handles[ i ] )[ 0 ];\n\t\t\tif ( handle === event.target || $.contains( handle, event.target ) ) {\n\t\t\t\tcapture = true;\n\t\t\t}\n\t\t}\n\n\t\treturn !this.options.disabled && capture;\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar curleft, curtop, cursor,\n\t\t\to = this.options,\n\t\t\tel = this.element;\n\n\t\tthis.resizing = true;\n\n\t\tthis._renderProxy();\n\n\t\tcurleft = this._num( this.helper.css( \"left\" ) );\n\t\tcurtop = this._num( this.helper.css( \"top\" ) );\n\n\t\tif ( o.containment ) {\n\t\t\tcurleft += $( o.containment ).scrollLeft() || 0;\n\t\t\tcurtop += $( o.containment ).scrollTop() || 0;\n\t\t}\n\n\t\tthis.offset = this.helper.offset();\n\t\tthis.position = { left: curleft, top: curtop };\n\n\t\tthis.size = this._helper ? {\n\t\t\t\twidth: this.helper.width(),\n\t\t\t\theight: this.helper.height()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.originalSize = this._helper ? {\n\t\t\t\twidth: el.outerWidth(),\n\t\t\t\theight: el.outerHeight()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.sizeDiff = {\n\t\t\twidth: el.outerWidth() - el.width(),\n\t\t\theight: el.outerHeight() - el.height()\n\t\t};\n\n\t\tthis.originalPosition = { left: curleft, top: curtop };\n\t\tthis.originalMousePosition = { left: event.pageX, top: event.pageY };\n\n\t\tthis.aspectRatio = ( typeof o.aspectRatio === \"number\" ) ?\n\t\t\to.aspectRatio :\n\t\t\t( ( this.originalSize.width / this.originalSize.height ) || 1 );\n\n\t\tcursor = $( \".ui-resizable-\" + this.axis ).css( \"cursor\" );\n\t\t$( \"body\" ).css( \"cursor\", cursor === \"auto\" ? this.axis + \"-resize\" : cursor );\n\n\t\tthis._addClass( \"ui-resizable-resizing\" );\n\t\tthis._propagate( \"start\", event );\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tvar data, props,\n\t\t\tsmp = this.originalMousePosition,\n\t\t\ta = this.axis,\n\t\t\tdx = ( event.pageX - smp.left ) || 0,\n\t\t\tdy = ( event.pageY - smp.top ) || 0,\n\t\t\ttrigger = this._change[ a ];\n\n\t\tthis._updatePrevProperties();\n\n\t\tif ( !trigger ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tdata = trigger.apply( this, [ event, dx, dy ] );\n\n\t\tthis._updateVirtualBoundaries( event.shiftKey );\n\t\tif ( this._aspectRatio || event.shiftKey ) {\n\t\t\tdata = this._updateRatio( data, event );\n\t\t}\n\n\t\tdata = this._respectSize( data, event );\n\n\t\tthis._updateCache( data );\n\n\t\tthis._propagate( \"resize\", event );\n\n\t\tprops = this._applyChanges();\n\n\t\tif ( !this._helper && this._proportionallyResizeElements.length ) {\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tif ( !$.isEmptyObject( props ) ) {\n\t\t\tthis._updatePrevProperties();\n\t\t\tthis._trigger( \"resize\", event, this.ui() );\n\t\t\tthis._applyChanges();\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\tthis.resizing = false;\n\t\tvar pr, ista, soffseth, soffsetw, s, left, top,\n\t\t\to = this.options, that = this;\n\n\t\tif ( this._helper ) {\n\n\t\t\tpr = this._proportionallyResizeElements;\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName );\n\t\t\tsoffseth = ista && this._hasScroll( pr[ 0 ], \"left\" ) ? 0 : that.sizeDiff.height;\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width;\n\n\t\t\ts = {\n\t\t\t\twidth: ( that.helper.width()  - soffsetw ),\n\t\t\t\theight: ( that.helper.height() - soffseth )\n\t\t\t};\n\t\t\tleft = ( parseFloat( that.element.css( \"left\" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null;\n\t\t\ttop = ( parseFloat( that.element.css( \"top\" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\t\tif ( !o.animate ) {\n\t\t\t\tthis.element.css( $.extend( s, { top: top, left: left } ) );\n\t\t\t}\n\n\t\t\tthat.helper.height( that.size.height );\n\t\t\tthat.helper.width( that.size.width );\n\n\t\t\tif ( this._helper && !o.animate ) {\n\t\t\t\tthis._proportionallyResize();\n\t\t\t}\n\t\t}\n\n\t\t$( \"body\" ).css( \"cursor\", \"auto\" );\n\n\t\tthis._removeClass( \"ui-resizable-resizing\" );\n\n\t\tthis._propagate( \"stop\", event );\n\n\t\tif ( this._helper ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\t_updatePrevProperties: function() {\n\t\tthis.prevPosition = {\n\t\t\ttop: this.position.top,\n\t\t\tleft: this.position.left\n\t\t};\n\t\tthis.prevSize = {\n\t\t\twidth: this.size.width,\n\t\t\theight: this.size.height\n\t\t};\n\t},\n\n\t_applyChanges: function() {\n\t\tvar props = {};\n\n\t\tif ( this.position.top !== this.prevPosition.top ) {\n\t\t\tprops.top = this.position.top + \"px\";\n\t\t}\n\t\tif ( this.position.left !== this.prevPosition.left ) {\n\t\t\tprops.left = this.position.left + \"px\";\n\t\t}\n\n\t\tthis.helper.css( props );\n\n\t\tif ( this.size.width !== this.prevSize.width ) {\n\t\t\tprops.width = this.size.width + \"px\";\n\t\t\tthis.helper.width( props.width );\n\t\t}\n\t\tif ( this.size.height !== this.prevSize.height ) {\n\t\t\tprops.height = this.size.height + \"px\";\n\t\t\tthis.helper.height( props.height );\n\t\t}\n\n\t\treturn props;\n\t},\n\n\t_updateVirtualBoundaries: function( forceAspectRatio ) {\n\t\tvar pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,\n\t\t\to = this.options;\n\n\t\tb = {\n\t\t\tminWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0,\n\t\t\tmaxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity,\n\t\t\tminHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0,\n\t\t\tmaxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity\n\t\t};\n\n\t\tif ( this._aspectRatio || forceAspectRatio ) {\n\t\t\tpMinWidth = b.minHeight * this.aspectRatio;\n\t\t\tpMinHeight = b.minWidth / this.aspectRatio;\n\t\t\tpMaxWidth = b.maxHeight * this.aspectRatio;\n\t\t\tpMaxHeight = b.maxWidth / this.aspectRatio;\n\n\t\t\tif ( pMinWidth > b.minWidth ) {\n\t\t\t\tb.minWidth = pMinWidth;\n\t\t\t}\n\t\t\tif ( pMinHeight > b.minHeight ) {\n\t\t\t\tb.minHeight = pMinHeight;\n\t\t\t}\n\t\t\tif ( pMaxWidth < b.maxWidth ) {\n\t\t\t\tb.maxWidth = pMaxWidth;\n\t\t\t}\n\t\t\tif ( pMaxHeight < b.maxHeight ) {\n\t\t\t\tb.maxHeight = pMaxHeight;\n\t\t\t}\n\t\t}\n\t\tthis._vBoundaries = b;\n\t},\n\n\t_updateCache: function( data ) {\n\t\tthis.offset = this.helper.offset();\n\t\tif ( this._isNumber( data.left ) ) {\n\t\t\tthis.position.left = data.left;\n\t\t}\n\t\tif ( this._isNumber( data.top ) ) {\n\t\t\tthis.position.top = data.top;\n\t\t}\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tthis.size.height = data.height;\n\t\t}\n\t\tif ( this._isNumber( data.width ) ) {\n\t\t\tthis.size.width = data.width;\n\t\t}\n\t},\n\n\t_updateRatio: function( data ) {\n\n\t\tvar cpos = this.position,\n\t\t\tcsize = this.size,\n\t\t\ta = this.axis;\n\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tdata.width = ( data.height * this.aspectRatio );\n\t\t} else if ( this._isNumber( data.width ) ) {\n\t\t\tdata.height = ( data.width / this.aspectRatio );\n\t\t}\n\n\t\tif ( a === \"sw\" ) {\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t\tdata.top = null;\n\t\t}\n\t\tif ( a === \"nw\" ) {\n\t\t\tdata.top = cpos.top + ( csize.height - data.height );\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_respectSize: function( data ) {\n\n\t\tvar o = this._vBoundaries,\n\t\t\ta = this.axis,\n\t\t\tismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ),\n\t\t\tismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ),\n\t\t\tisminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ),\n\t\t\tisminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ),\n\t\t\tdw = this.originalPosition.left + this.originalSize.width,\n\t\t\tdh = this.originalPosition.top + this.originalSize.height,\n\t\t\tcw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a );\n\t\tif ( isminw ) {\n\t\t\tdata.width = o.minWidth;\n\t\t}\n\t\tif ( isminh ) {\n\t\t\tdata.height = o.minHeight;\n\t\t}\n\t\tif ( ismaxw ) {\n\t\t\tdata.width = o.maxWidth;\n\t\t}\n\t\tif ( ismaxh ) {\n\t\t\tdata.height = o.maxHeight;\n\t\t}\n\n\t\tif ( isminw && cw ) {\n\t\t\tdata.left = dw - o.minWidth;\n\t\t}\n\t\tif ( ismaxw && cw ) {\n\t\t\tdata.left = dw - o.maxWidth;\n\t\t}\n\t\tif ( isminh && ch ) {\n\t\t\tdata.top = dh - o.minHeight;\n\t\t}\n\t\tif ( ismaxh && ch ) {\n\t\t\tdata.top = dh - o.maxHeight;\n\t\t}\n\n\t\t// Fixing jump error on top/left - bug #2330\n\t\tif ( !data.width && !data.height && !data.left && data.top ) {\n\t\t\tdata.top = null;\n\t\t} else if ( !data.width && !data.height && !data.top && data.left ) {\n\t\t\tdata.left = null;\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_getPaddingPlusBorderDimensions: function( element ) {\n\t\tvar i = 0,\n\t\t\twidths = [],\n\t\t\tborders = [\n\t\t\t\telement.css( \"borderTopWidth\" ),\n\t\t\t\telement.css( \"borderRightWidth\" ),\n\t\t\t\telement.css( \"borderBottomWidth\" ),\n\t\t\t\telement.css( \"borderLeftWidth\" )\n\t\t\t],\n\t\t\tpaddings = [\n\t\t\t\telement.css( \"paddingTop\" ),\n\t\t\t\telement.css( \"paddingRight\" ),\n\t\t\t\telement.css( \"paddingBottom\" ),\n\t\t\t\telement.css( \"paddingLeft\" )\n\t\t\t];\n\n\t\tfor ( ; i < 4; i++ ) {\n\t\t\twidths[ i ] = ( parseFloat( borders[ i ] ) || 0 );\n\t\t\twidths[ i ] += ( parseFloat( paddings[ i ] ) || 0 );\n\t\t}\n\n\t\treturn {\n\t\t\theight: widths[ 0 ] + widths[ 2 ],\n\t\t\twidth: widths[ 1 ] + widths[ 3 ]\n\t\t};\n\t},\n\n\t_proportionallyResize: function() {\n\n\t\tif ( !this._proportionallyResizeElements.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar prel,\n\t\t\ti = 0,\n\t\t\telement = this.helper || this.element;\n\n\t\tfor ( ; i < this._proportionallyResizeElements.length; i++ ) {\n\n\t\t\tprel = this._proportionallyResizeElements[ i ];\n\n\t\t\t// TODO: Seems like a bug to cache this.outerDimensions\n\t\t\t// considering that we are in a loop.\n\t\t\tif ( !this.outerDimensions ) {\n\t\t\t\tthis.outerDimensions = this._getPaddingPlusBorderDimensions( prel );\n\t\t\t}\n\n\t\t\tprel.css( {\n\t\t\t\theight: ( element.height() - this.outerDimensions.height ) || 0,\n\t\t\t\twidth: ( element.width() - this.outerDimensions.width ) || 0\n\t\t\t} );\n\n\t\t}\n\n\t},\n\n\t_renderProxy: function() {\n\n\t\tvar el = this.element, o = this.options;\n\t\tthis.elementOffset = el.offset();\n\n\t\tif ( this._helper ) {\n\n\t\t\tthis.helper = this.helper || $( \"<div></div>\" ).css( { overflow: \"hidden\" } );\n\n\t\t\tthis._addClass( this.helper, this._helper );\n\t\t\tthis.helper.css( {\n\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: this.elementOffset.left + \"px\",\n\t\t\t\ttop: this.elementOffset.top + \"px\",\n\t\t\t\tzIndex: ++o.zIndex //TODO: Don't modify option\n\t\t\t} );\n\n\t\t\tthis.helper\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.disableSelection();\n\n\t\t} else {\n\t\t\tthis.helper = this.element;\n\t\t}\n\n\t},\n\n\t_change: {\n\t\te: function( event, dx ) {\n\t\t\treturn { width: this.originalSize.width + dx };\n\t\t},\n\t\tw: function( event, dx ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { left: sp.left + dx, width: cs.width - dx };\n\t\t},\n\t\tn: function( event, dx, dy ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { top: sp.top + dy, height: cs.height - dy };\n\t\t},\n\t\ts: function( event, dx, dy ) {\n\t\t\treturn { height: this.originalSize.height + dy };\n\t\t},\n\t\tse: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tsw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tne: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tnw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t}\n\t},\n\n\t_propagate: function( n, event ) {\n\t\t$.ui.plugin.call( this, n, [ event, this.ui() ] );\n\t\tif ( n !== \"resize\" ) {\n\t\t\tthis._trigger( n, event, this.ui() );\n\t\t}\n\t},\n\n\tplugins: {},\n\n\tui: function() {\n\t\treturn {\n\t\t\toriginalElement: this.originalElement,\n\t\t\telement: this.element,\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\tsize: this.size,\n\t\t\toriginalSize: this.originalSize,\n\t\t\toriginalPosition: this.originalPosition\n\t\t};\n\t}\n\n} );\n\n/*\n * Resizable Extensions\n */\n\n$.ui.plugin.add( \"resizable\", \"animate\", {\n\n\tstop: function( event ) {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tpr = that._proportionallyResizeElements,\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ),\n\t\t\tsoffseth = ista && that._hasScroll( pr[ 0 ], \"left\" ) ? 0 : that.sizeDiff.height,\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width,\n\t\t\tstyle = {\n\t\t\t\twidth: ( that.size.width - soffsetw ),\n\t\t\t\theight: ( that.size.height - soffseth )\n\t\t\t},\n\t\t\tleft = ( parseFloat( that.element.css( \"left\" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null,\n\t\t\ttop = ( parseFloat( that.element.css( \"top\" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\tthat.element.animate(\n\t\t\t$.extend( style, top && left ? { top: top, left: left } : {} ), {\n\t\t\t\tduration: o.animateDuration,\n\t\t\t\teasing: o.animateEasing,\n\t\t\t\tstep: function() {\n\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\twidth: parseFloat( that.element.css( \"width\" ) ),\n\t\t\t\t\t\theight: parseFloat( that.element.css( \"height\" ) ),\n\t\t\t\t\t\ttop: parseFloat( that.element.css( \"top\" ) ),\n\t\t\t\t\t\tleft: parseFloat( that.element.css( \"left\" ) )\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( pr && pr.length ) {\n\t\t\t\t\t\t$( pr[ 0 ] ).css( { width: data.width, height: data.height } );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagating resize, and updating values for each animation step\n\t\t\t\t\tthat._updateCache( data );\n\t\t\t\t\tthat._propagate( \"resize\", event );\n\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n} );\n\n$.ui.plugin.add( \"resizable\", \"containment\", {\n\n\tstart: function() {\n\t\tvar element, p, co, ch, cw, width, height,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tel = that.element,\n\t\t\toc = o.containment,\n\t\t\tce = ( oc instanceof $ ) ?\n\t\t\t\toc.get( 0 ) :\n\t\t\t\t( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthat.containerElement = $( ce );\n\n\t\tif ( /document/.test( oc ) || oc === document ) {\n\t\t\tthat.containerOffset = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\t\t\tthat.containerPosition = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: $( document ),\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\twidth: $( document ).width(),\n\t\t\t\theight: $( document ).height() || document.body.parentNode.scrollHeight\n\t\t\t};\n\t\t} else {\n\t\t\telement = $( ce );\n\t\t\tp = [];\n\t\t\t$( [ \"Top\", \"Right\", \"Left\", \"Bottom\" ] ).each( function( i, name ) {\n\t\t\t\tp[ i ] = that._num( element.css( \"padding\" + name ) );\n\t\t\t} );\n\n\t\t\tthat.containerOffset = element.offset();\n\t\t\tthat.containerPosition = element.position();\n\t\t\tthat.containerSize = {\n\t\t\t\theight: ( element.innerHeight() - p[ 3 ] ),\n\t\t\t\twidth: ( element.innerWidth() - p[ 1 ] )\n\t\t\t};\n\n\t\t\tco = that.containerOffset;\n\t\t\tch = that.containerSize.height;\n\t\t\tcw = that.containerSize.width;\n\t\t\twidth = ( that._hasScroll( ce, \"left\" ) ? ce.scrollWidth : cw );\n\t\t\theight = ( that._hasScroll( ce ) ? ce.scrollHeight : ch );\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: ce,\n\t\t\t\tleft: co.left,\n\t\t\t\ttop: co.top,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t};\n\t\t}\n\t},\n\n\tresize: function( event ) {\n\t\tvar woset, hoset, isParent, isOffsetRelative,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcp = that.position,\n\t\t\tpRatio = that._aspectRatio || event.shiftKey,\n\t\t\tcop = {\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0\n\t\t\t},\n\t\t\tce = that.containerElement,\n\t\t\tcontinueResize = true;\n\n\t\tif ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\tcop = co;\n\t\t}\n\n\t\tif ( cp.left < ( that._helper ? co.left : 0 ) ) {\n\t\t\tthat.size.width = that.size.width +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.left - co.left ) :\n\t\t\t\t\t( that.position.left - cop.left ) );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.left = o.helper ? co.left : 0;\n\t\t}\n\n\t\tif ( cp.top < ( that._helper ? co.top : 0 ) ) {\n\t\t\tthat.size.height = that.size.height +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.top - co.top ) :\n\t\t\t\t\tthat.position.top );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.top = that._helper ? co.top : 0;\n\t\t}\n\n\t\tisParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );\n\t\tisOffsetRelative = /relative|absolute/.test( that.containerElement.css( \"position\" ) );\n\n\t\tif ( isParent && isOffsetRelative ) {\n\t\t\tthat.offset.left = that.parentData.left + that.position.left;\n\t\t\tthat.offset.top = that.parentData.top + that.position.top;\n\t\t} else {\n\t\t\tthat.offset.left = that.element.offset().left;\n\t\t\tthat.offset.top = that.element.offset().top;\n\t\t}\n\n\t\twoset = Math.abs( that.sizeDiff.width +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.left - cop.left :\n\t\t\t\t( that.offset.left - co.left ) ) );\n\n\t\thoset = Math.abs( that.sizeDiff.height +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.top - cop.top :\n\t\t\t\t( that.offset.top - co.top ) ) );\n\n\t\tif ( woset + that.size.width >= that.parentData.width ) {\n\t\t\tthat.size.width = that.parentData.width - woset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( hoset + that.size.height >= that.parentData.height ) {\n\t\t\tthat.size.height = that.parentData.height - hoset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( !continueResize ) {\n\t\t\tthat.position.left = that.prevPosition.left;\n\t\t\tthat.position.top = that.prevPosition.top;\n\t\t\tthat.size.width = that.prevSize.width;\n\t\t\tthat.size.height = that.prevSize.height;\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcop = that.containerPosition,\n\t\t\tce = that.containerElement,\n\t\t\thelper = $( that.helper ),\n\t\t\tho = helper.offset(),\n\t\t\tw = helper.outerWidth() - that.sizeDiff.width,\n\t\t\th = helper.outerHeight() - that.sizeDiff.height;\n\n\t\tif ( that._helper && !o.animate && ( /relative/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\n\t\tif ( that._helper && !o.animate && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"resizable\", \"alsoResize\", {\n\n\tstart: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options;\n\n\t\t$( o.alsoResize ).each( function() {\n\t\t\tvar el = $( this );\n\t\t\tel.data( \"ui-resizable-alsoresize\", {\n\t\t\t\twidth: parseFloat( el.css( \"width\" ) ), height: parseFloat( el.css( \"height\" ) ),\n\t\t\t\tleft: parseFloat( el.css( \"left\" ) ), top: parseFloat( el.css( \"top\" ) )\n\t\t\t} );\n\t\t} );\n\t},\n\n\tresize: function( event, ui ) {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\tdelta = {\n\t\t\t\theight: ( that.size.height - os.height ) || 0,\n\t\t\t\twidth: ( that.size.width - os.width ) || 0,\n\t\t\t\ttop: ( that.position.top - op.top ) || 0,\n\t\t\t\tleft: ( that.position.left - op.left ) || 0\n\t\t\t};\n\n\t\t\t$( o.alsoResize ).each( function() {\n\t\t\t\tvar el = $( this ), start = $( this ).data( \"ui-resizable-alsoresize\" ), style = {},\n\t\t\t\t\tcss = el.parents( ui.originalElement[ 0 ] ).length ?\n\t\t\t\t\t\t\t[ \"width\", \"height\" ] :\n\t\t\t\t\t\t\t[ \"width\", \"height\", \"top\", \"left\" ];\n\n\t\t\t\t$.each( css, function( i, prop ) {\n\t\t\t\t\tvar sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 );\n\t\t\t\t\tif ( sum && sum >= 0 ) {\n\t\t\t\t\t\tstyle[ prop ] = sum || null;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tel.css( style );\n\t\t\t} );\n\t},\n\n\tstop: function() {\n\t\t$( this ).removeData( \"ui-resizable-alsoresize\" );\n\t}\n} );\n\n$.ui.plugin.add( \"resizable\", \"ghost\", {\n\n\tstart: function() {\n\n\t\tvar that = $( this ).resizable( \"instance\" ), cs = that.size;\n\n\t\tthat.ghost = that.originalElement.clone();\n\t\tthat.ghost.css( {\n\t\t\topacity: 0.25,\n\t\t\tdisplay: \"block\",\n\t\t\tposition: \"relative\",\n\t\t\theight: cs.height,\n\t\t\twidth: cs.width,\n\t\t\tmargin: 0,\n\t\t\tleft: 0,\n\t\t\ttop: 0\n\t\t} );\n\n\t\tthat._addClass( that.ghost, \"ui-resizable-ghost\" );\n\n\t\t// DEPRECATED\n\t\t// TODO: remove after 1.12\n\t\tif ( $.uiBackCompat !== false && typeof that.options.ghost === \"string\" ) {\n\n\t\t\t// Ghost option\n\t\t\tthat.ghost.addClass( this.options.ghost );\n\t\t}\n\n\t\tthat.ghost.appendTo( that.helper );\n\n\t},\n\n\tresize: function() {\n\t\tvar that = $( this ).resizable( \"instance\" );\n\t\tif ( that.ghost ) {\n\t\t\tthat.ghost.css( {\n\t\t\t\tposition: \"relative\",\n\t\t\t\theight: that.size.height,\n\t\t\t\twidth: that.size.width\n\t\t\t} );\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" );\n\t\tif ( that.ghost && that.helper ) {\n\t\t\tthat.helper.get( 0 ).removeChild( that.ghost.get( 0 ) );\n\t\t}\n\t}\n\n} );\n\n$.ui.plugin.add( \"resizable\", \"grid\", {\n\n\tresize: function() {\n\t\tvar outerDimensions,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tcs = that.size,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\ta = that.axis,\n\t\t\tgrid = typeof o.grid === \"number\" ? [ o.grid, o.grid ] : o.grid,\n\t\t\tgridX = ( grid[ 0 ] || 1 ),\n\t\t\tgridY = ( grid[ 1 ] || 1 ),\n\t\t\tox = Math.round( ( cs.width - os.width ) / gridX ) * gridX,\n\t\t\toy = Math.round( ( cs.height - os.height ) / gridY ) * gridY,\n\t\t\tnewWidth = os.width + ox,\n\t\t\tnewHeight = os.height + oy,\n\t\t\tisMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ),\n\t\t\tisMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ),\n\t\t\tisMinWidth = o.minWidth && ( o.minWidth > newWidth ),\n\t\t\tisMinHeight = o.minHeight && ( o.minHeight > newHeight );\n\n\t\to.grid = grid;\n\n\t\tif ( isMinWidth ) {\n\t\t\tnewWidth += gridX;\n\t\t}\n\t\tif ( isMinHeight ) {\n\t\t\tnewHeight += gridY;\n\t\t}\n\t\tif ( isMaxWidth ) {\n\t\t\tnewWidth -= gridX;\n\t\t}\n\t\tif ( isMaxHeight ) {\n\t\t\tnewHeight -= gridY;\n\t\t}\n\n\t\tif ( /^(se|s|e)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t} else if ( /^(ne)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.top = op.top - oy;\n\t\t} else if ( /^(sw)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.left = op.left - ox;\n\t\t} else {\n\t\t\tif ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) {\n\t\t\t\touterDimensions = that._getPaddingPlusBorderDimensions( this );\n\t\t\t}\n\n\t\t\tif ( newHeight - gridY > 0 ) {\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top - oy;\n\t\t\t} else {\n\t\t\t\tnewHeight = gridY - outerDimensions.height;\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top + os.height - newHeight;\n\t\t\t}\n\t\t\tif ( newWidth - gridX > 0 ) {\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left - ox;\n\t\t\t} else {\n\t\t\t\tnewWidth = gridX - outerDimensions.width;\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left + os.width - newWidth;\n\t\t\t}\n\t\t}\n\t}\n\n} );\n\nvar widgetsResizable = $.ui.resizable;\n\n\n/*!\n * jQuery UI Dialog 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Dialog\n//>>group: Widgets\n//>>description: Displays customizable dialog windows.\n//>>docs: https://api.jqueryui.com/dialog/\n//>>demos: https://jqueryui.com/dialog/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/dialog.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.dialog\", {\n\tversion: \"1.13.3\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoOpen: true,\n\t\tbuttons: [],\n\t\tclasses: {\n\t\t\t\"ui-dialog\": \"ui-corner-all\",\n\t\t\t\"ui-dialog-titlebar\": \"ui-corner-all\"\n\t\t},\n\t\tcloseOnEscape: true,\n\t\tcloseText: \"Close\",\n\t\tdraggable: true,\n\t\thide: null,\n\t\theight: \"auto\",\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 150,\n\t\tminWidth: 150,\n\t\tmodal: false,\n\t\tposition: {\n\t\t\tmy: \"center\",\n\t\t\tat: \"center\",\n\t\t\tof: window,\n\t\t\tcollision: \"fit\",\n\n\t\t\t// Ensure the titlebar is always visible\n\t\t\tusing: function( pos ) {\n\t\t\t\tvar topOffset = $( this ).css( pos ).offset().top;\n\t\t\t\tif ( topOffset < 0 ) {\n\t\t\t\t\t$( this ).css( \"top\", pos.top - topOffset );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tresizable: true,\n\t\tshow: null,\n\t\ttitle: null,\n\t\twidth: 300,\n\n\t\t// Callbacks\n\t\tbeforeClose: null,\n\t\tclose: null,\n\t\tdrag: null,\n\t\tdragStart: null,\n\t\tdragStop: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresize: null,\n\t\tresizeStart: null,\n\t\tresizeStop: null\n\t},\n\n\tsizeRelatedOptions: {\n\t\tbuttons: true,\n\t\theight: true,\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true,\n\t\twidth: true\n\t},\n\n\tresizableRelatedOptions: {\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true\n\t},\n\n\t_create: function() {\n\t\tthis.originalCss = {\n\t\t\tdisplay: this.element[ 0 ].style.display,\n\t\t\twidth: this.element[ 0 ].style.width,\n\t\t\tminHeight: this.element[ 0 ].style.minHeight,\n\t\t\tmaxHeight: this.element[ 0 ].style.maxHeight,\n\t\t\theight: this.element[ 0 ].style.height\n\t\t};\n\t\tthis.originalPosition = {\n\t\t\tparent: this.element.parent(),\n\t\t\tindex: this.element.parent().children().index( this.element )\n\t\t};\n\t\tthis.originalTitle = this.element.attr( \"title\" );\n\t\tif ( this.options.title == null && this.originalTitle != null ) {\n\t\t\tthis.options.title = this.originalTitle;\n\t\t}\n\n\t\t// Dialogs can't be disabled\n\t\tif ( this.options.disabled ) {\n\t\t\tthis.options.disabled = false;\n\t\t}\n\n\t\tthis._createWrapper();\n\n\t\tthis.element\n\t\t\t.show()\n\t\t\t.removeAttr( \"title\" )\n\t\t\t.appendTo( this.uiDialog );\n\n\t\tthis._addClass( \"ui-dialog-content\", \"ui-widget-content\" );\n\n\t\tthis._createTitlebar();\n\t\tthis._createButtonPane();\n\n\t\tif ( this.options.draggable && $.fn.draggable ) {\n\t\t\tthis._makeDraggable();\n\t\t}\n\t\tif ( this.options.resizable && $.fn.resizable ) {\n\t\t\tthis._makeResizable();\n\t\t}\n\n\t\tthis._isOpen = false;\n\n\t\tthis._trackFocus();\n\t},\n\n\t_init: function() {\n\t\tif ( this.options.autoOpen ) {\n\t\t\tthis.open();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\t\tif ( element && ( element.jquery || element.nodeType ) ) {\n\t\t\treturn $( element );\n\t\t}\n\t\treturn this.document.find( element || \"body\" ).eq( 0 );\n\t},\n\n\t_destroy: function() {\n\t\tvar next,\n\t\t\toriginalPosition = this.originalPosition;\n\n\t\tthis._untrackInstance();\n\t\tthis._destroyOverlay();\n\n\t\tthis.element\n\t\t\t.removeUniqueId()\n\t\t\t.css( this.originalCss )\n\n\t\t\t// Without detaching first, the following becomes really slow\n\t\t\t.detach();\n\n\t\tthis.uiDialog.remove();\n\n\t\tif ( this.originalTitle ) {\n\t\t\tthis.element.attr( \"title\", this.originalTitle );\n\t\t}\n\n\t\tnext = originalPosition.parent.children().eq( originalPosition.index );\n\n\t\t// Don't try to place the dialog next to itself (#8613)\n\t\tif ( next.length && next[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tnext.before( this.element );\n\t\t} else {\n\t\t\toriginalPosition.parent.append( this.element );\n\t\t}\n\t},\n\n\twidget: function() {\n\t\treturn this.uiDialog;\n\t},\n\n\tdisable: $.noop,\n\tenable: $.noop,\n\n\tclose: function( event ) {\n\t\tvar that = this;\n\n\t\tif ( !this._isOpen || this._trigger( \"beforeClose\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = false;\n\t\tthis._focusedElement = null;\n\t\tthis._destroyOverlay();\n\t\tthis._untrackInstance();\n\n\t\tif ( !this.opener.filter( \":focusable\" ).trigger( \"focus\" ).length ) {\n\n\t\t\t// Hiding a focused element doesn't trigger blur in WebKit\n\t\t\t// so in case we have nothing to focus on, explicitly blur the active element\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=47182\n\t\t\t$.ui.safeBlur( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\t\t}\n\n\t\tthis._hide( this.uiDialog, this.options.hide, function() {\n\t\t\tthat._trigger( \"close\", event );\n\t\t} );\n\t},\n\n\tisOpen: function() {\n\t\treturn this._isOpen;\n\t},\n\n\tmoveToTop: function() {\n\t\tthis._moveToTop();\n\t},\n\n\t_moveToTop: function( event, silent ) {\n\t\tvar moved = false,\n\t\t\tzIndices = this.uiDialog.siblings( \".ui-front:visible\" ).map( function() {\n\t\t\t\treturn +$( this ).css( \"z-index\" );\n\t\t\t} ).get(),\n\t\t\tzIndexMax = Math.max.apply( null, zIndices );\n\n\t\tif ( zIndexMax >= +this.uiDialog.css( \"z-index\" ) ) {\n\t\t\tthis.uiDialog.css( \"z-index\", zIndexMax + 1 );\n\t\t\tmoved = true;\n\t\t}\n\n\t\tif ( moved && !silent ) {\n\t\t\tthis._trigger( \"focus\", event );\n\t\t}\n\t\treturn moved;\n\t},\n\n\topen: function() {\n\t\tvar that = this;\n\t\tif ( this._isOpen ) {\n\t\t\tif ( this._moveToTop() ) {\n\t\t\t\tthis._focusTabbable();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = true;\n\t\tthis.opener = $( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\n\t\tthis._size();\n\t\tthis._position();\n\t\tthis._createOverlay();\n\t\tthis._moveToTop( null, true );\n\n\t\t// Ensure the overlay is moved to the top with the dialog, but only when\n\t\t// opening. The overlay shouldn't move after the dialog is open so that\n\t\t// modeless dialogs opened after the modal dialog stack properly.\n\t\tif ( this.overlay ) {\n\t\t\tthis.overlay.css( \"z-index\", this.uiDialog.css( \"z-index\" ) - 1 );\n\t\t}\n\n\t\tthis._show( this.uiDialog, this.options.show, function() {\n\t\t\tthat._focusTabbable();\n\t\t\tthat._trigger( \"focus\" );\n\t\t} );\n\n\t\t// Track the dialog immediately upon opening in case a focus event\n\t\t// somehow occurs outside of the dialog before an element inside the\n\t\t// dialog is focused (#10152)\n\t\tthis._makeFocusTarget();\n\n\t\tthis._trigger( \"open\" );\n\t},\n\n\t_focusTabbable: function() {\n\n\t\t// Set focus to the first match:\n\t\t// 1. An element that was focused previously\n\t\t// 2. First element inside the dialog matching [autofocus]\n\t\t// 3. Tabbable element inside the content element\n\t\t// 4. Tabbable element inside the buttonpane\n\t\t// 5. The close button\n\t\t// 6. The dialog itself\n\t\tvar hasFocus = this._focusedElement;\n\t\tif ( !hasFocus ) {\n\t\t\thasFocus = this.element.find( \"[autofocus]\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.element.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogButtonPane.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogTitlebarClose.filter( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialog;\n\t\t}\n\t\thasFocus.eq( 0 ).trigger( \"focus\" );\n\t},\n\n\t_restoreTabbableFocus: function() {\n\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\tisActive = this.uiDialog[ 0 ] === activeElement ||\n\t\t\t\t$.contains( this.uiDialog[ 0 ], activeElement );\n\t\tif ( !isActive ) {\n\t\t\tthis._focusTabbable();\n\t\t}\n\t},\n\n\t_keepFocus: function( event ) {\n\t\tevent.preventDefault();\n\t\tthis._restoreTabbableFocus();\n\n\t\t// support: IE\n\t\t// IE <= 8 doesn't prevent moving focus even with event.preventDefault()\n\t\t// so we check again later\n\t\tthis._delay( this._restoreTabbableFocus );\n\t},\n\n\t_createWrapper: function() {\n\t\tthis.uiDialog = $( \"<div>\" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\n\t\t\t\t// Setting tabIndex makes the div focusable\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: \"dialog\"\n\t\t\t} )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._addClass( this.uiDialog, \"ui-dialog\", \"ui-widget ui-widget-content ui-front\" );\n\t\tthis._on( this.uiDialog, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&\n\t\t\t\t\t\tevent.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.close( event );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prevent tabbing out of dialogs\n\t\t\t\tif ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar tabbables = this.uiDialog.find( \":tabbable\" ),\n\t\t\t\t\tfirst = tabbables.first(),\n\t\t\t\t\tlast = tabbables.last();\n\n\t\t\t\tif ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) &&\n\t\t\t\t\t\t!event.shiftKey ) {\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tfirst.trigger( \"focus\" );\n\t\t\t\t\t} );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t} else if ( ( event.target === first[ 0 ] ||\n\t\t\t\t\t\tevent.target === this.uiDialog[ 0 ] ) && event.shiftKey ) {\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tlast.trigger( \"focus\" );\n\t\t\t\t\t} );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\tmousedown: function( event ) {\n\t\t\t\tif ( this._moveToTop( event ) ) {\n\t\t\t\t\tthis._focusTabbable();\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// We assume that any existing aria-describedby attribute means\n\t\t// that the dialog content is marked up properly\n\t\t// otherwise we brute force the content as the description\n\t\tif ( !this.element.find( \"[aria-describedby]\" ).length ) {\n\t\t\tthis.uiDialog.attr( {\n\t\t\t\t\"aria-describedby\": this.element.uniqueId().attr( \"id\" )\n\t\t\t} );\n\t\t}\n\t},\n\n\t_createTitlebar: function() {\n\t\tvar uiDialogTitle;\n\n\t\tthis.uiDialogTitlebar = $( \"<div>\" );\n\t\tthis._addClass( this.uiDialogTitlebar,\n\t\t\t\"ui-dialog-titlebar\", \"ui-widget-header ui-helper-clearfix\" );\n\t\tthis._on( this.uiDialogTitlebar, {\n\t\t\tmousedown: function( event ) {\n\n\t\t\t\t// Don't prevent click on close button (#8838)\n\t\t\t\t// Focusing a dialog that is partially scrolled out of view\n\t\t\t\t// causes the browser to scroll it into view, preventing the click event\n\t\t\t\tif ( !$( event.target ).closest( \".ui-dialog-titlebar-close\" ) ) {\n\n\t\t\t\t\t// Dialog isn't getting focus when dragging (#8063)\n\t\t\t\t\tthis.uiDialog.trigger( \"focus\" );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Support: IE\n\t\t// Use type=\"button\" to prevent enter keypresses in textboxes from closing the\n\t\t// dialog in IE (#9312)\n\t\tthis.uiDialogTitlebarClose = $( \"<button type='button'></button>\" )\n\t\t\t.button( {\n\t\t\t\tlabel: $( \"<a>\" ).text( this.options.closeText ).html(),\n\t\t\t\ticon: \"ui-icon-closethick\",\n\t\t\t\tshowLabel: false\n\t\t\t} )\n\t\t\t.appendTo( this.uiDialogTitlebar );\n\n\t\tthis._addClass( this.uiDialogTitlebarClose, \"ui-dialog-titlebar-close\" );\n\t\tthis._on( this.uiDialogTitlebarClose, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t} );\n\n\t\tuiDialogTitle = $( \"<span>\" ).uniqueId().prependTo( this.uiDialogTitlebar );\n\t\tthis._addClass( uiDialogTitle, \"ui-dialog-title\" );\n\t\tthis._title( uiDialogTitle );\n\n\t\tthis.uiDialogTitlebar.prependTo( this.uiDialog );\n\n\t\tthis.uiDialog.attr( {\n\t\t\t\"aria-labelledby\": uiDialogTitle.attr( \"id\" )\n\t\t} );\n\t},\n\n\t_title: function( title ) {\n\t\tif ( this.options.title ) {\n\t\t\ttitle.text( this.options.title );\n\t\t} else {\n\t\t\ttitle.html( \"&#160;\" );\n\t\t}\n\t},\n\n\t_createButtonPane: function() {\n\t\tthis.uiDialogButtonPane = $( \"<div>\" );\n\t\tthis._addClass( this.uiDialogButtonPane, \"ui-dialog-buttonpane\",\n\t\t\t\"ui-widget-content ui-helper-clearfix\" );\n\n\t\tthis.uiButtonSet = $( \"<div>\" )\n\t\t\t.appendTo( this.uiDialogButtonPane );\n\t\tthis._addClass( this.uiButtonSet, \"ui-dialog-buttonset\" );\n\n\t\tthis._createButtons();\n\t},\n\n\t_createButtons: function() {\n\t\tvar that = this,\n\t\t\tbuttons = this.options.buttons;\n\n\t\t// If we already have a button pane, remove it\n\t\tthis.uiDialogButtonPane.remove();\n\t\tthis.uiButtonSet.empty();\n\n\t\tif ( $.isEmptyObject( buttons ) || ( Array.isArray( buttons ) && !buttons.length ) ) {\n\t\t\tthis._removeClass( this.uiDialog, \"ui-dialog-buttons\" );\n\t\t\treturn;\n\t\t}\n\n\t\t$.each( buttons, function( name, props ) {\n\t\t\tvar click, buttonOptions;\n\t\t\tprops = typeof props === \"function\" ?\n\t\t\t\t{ click: props, text: name } :\n\t\t\t\tprops;\n\n\t\t\t// Default to a non-submitting button\n\t\t\tprops = $.extend( { type: \"button\" }, props );\n\n\t\t\t// Change the context for the click callback to be the main element\n\t\t\tclick = props.click;\n\t\t\tbuttonOptions = {\n\t\t\t\ticon: props.icon,\n\t\t\t\ticonPosition: props.iconPosition,\n\t\t\t\tshowLabel: props.showLabel,\n\n\t\t\t\t// Deprecated options\n\t\t\t\ticons: props.icons,\n\t\t\t\ttext: props.text\n\t\t\t};\n\n\t\t\tdelete props.click;\n\t\t\tdelete props.icon;\n\t\t\tdelete props.iconPosition;\n\t\t\tdelete props.showLabel;\n\n\t\t\t// Deprecated options\n\t\t\tdelete props.icons;\n\t\t\tif ( typeof props.text === \"boolean\" ) {\n\t\t\t\tdelete props.text;\n\t\t\t}\n\n\t\t\t$( \"<button></button>\", props )\n\t\t\t\t.button( buttonOptions )\n\t\t\t\t.appendTo( that.uiButtonSet )\n\t\t\t\t.on( \"click\", function() {\n\t\t\t\t\tclick.apply( that.element[ 0 ], arguments );\n\t\t\t\t} );\n\t\t} );\n\t\tthis._addClass( this.uiDialog, \"ui-dialog-buttons\" );\n\t\tthis.uiDialogButtonPane.appendTo( this.uiDialog );\n\t},\n\n\t_makeDraggable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\tposition: ui.position,\n\t\t\t\toffset: ui.offset\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.draggable( {\n\t\t\tcancel: \".ui-dialog-content, .ui-dialog-titlebar-close\",\n\t\t\thandle: \".ui-dialog-titlebar\",\n\t\t\tcontainment: \"document\",\n\t\t\tstart: function( event, ui ) {\n\t\t\t\tthat._addClass( $( this ), \"ui-dialog-dragging\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"dragStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tdrag: function( event, ui ) {\n\t\t\t\tthat._trigger( \"drag\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar left = ui.offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = ui.offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + ( left >= 0 ? \"+\" : \"\" ) + left + \" \" +\n\t\t\t\t\t\t\"top\" + ( top >= 0 ? \"+\" : \"\" ) + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\tthat._removeClass( $( this ), \"ui-dialog-dragging\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"dragStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_makeResizable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options,\n\t\t\thandles = options.resizable,\n\n\t\t\t// .ui-resizable has position: relative defined in the stylesheet\n\t\t\t// but dialogs have to use absolute or fixed positioning\n\t\t\tposition = this.uiDialog.css( \"position\" ),\n\t\t\tresizeHandles = typeof handles === \"string\" ?\n\t\t\t\thandles :\n\t\t\t\t\"n,e,s,w,se,sw,ne,nw\";\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\toriginalPosition: ui.originalPosition,\n\t\t\t\toriginalSize: ui.originalSize,\n\t\t\t\tposition: ui.position,\n\t\t\t\tsize: ui.size\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.resizable( {\n\t\t\tcancel: \".ui-dialog-content\",\n\t\t\tcontainment: \"document\",\n\t\t\talsoResize: this.element,\n\t\t\tmaxWidth: options.maxWidth,\n\t\t\tmaxHeight: options.maxHeight,\n\t\t\tminWidth: options.minWidth,\n\t\t\tminHeight: this._minHeight(),\n\t\t\thandles: resizeHandles,\n\t\t\tstart: function( event, ui ) {\n\t\t\t\tthat._addClass( $( this ), \"ui-dialog-resizing\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"resizeStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tresize: function( event, ui ) {\n\t\t\t\tthat._trigger( \"resize\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar offset = that.uiDialog.offset(),\n\t\t\t\t\tleft = offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.height = that.uiDialog.height();\n\t\t\t\toptions.width = that.uiDialog.width();\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + ( left >= 0 ? \"+\" : \"\" ) + left + \" \" +\n\t\t\t\t\t\t\"top\" + ( top >= 0 ? \"+\" : \"\" ) + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\tthat._removeClass( $( this ), \"ui-dialog-resizing\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"resizeStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t} )\n\t\t\t.css( \"position\", position );\n\t},\n\n\t_trackFocus: function() {\n\t\tthis._on( this.widget(), {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._makeFocusTarget();\n\t\t\t\tthis._focusedElement = $( event.target );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_makeFocusTarget: function() {\n\t\tthis._untrackInstance();\n\t\tthis._trackingInstances().unshift( this );\n\t},\n\n\t_untrackInstance: function() {\n\t\tvar instances = this._trackingInstances(),\n\t\t\texists = $.inArray( this, instances );\n\t\tif ( exists !== -1 ) {\n\t\t\tinstances.splice( exists, 1 );\n\t\t}\n\t},\n\n\t_trackingInstances: function() {\n\t\tvar instances = this.document.data( \"ui-dialog-instances\" );\n\t\tif ( !instances ) {\n\t\t\tinstances = [];\n\t\t\tthis.document.data( \"ui-dialog-instances\", instances );\n\t\t}\n\t\treturn instances;\n\t},\n\n\t_minHeight: function() {\n\t\tvar options = this.options;\n\n\t\treturn options.height === \"auto\" ?\n\t\t\toptions.minHeight :\n\t\t\tMath.min( options.minHeight, options.height );\n\t},\n\n\t_position: function() {\n\n\t\t// Need to show the dialog to get the actual offset in the position plugin\n\t\tvar isVisible = this.uiDialog.is( \":visible\" );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.show();\n\t\t}\n\t\tthis.uiDialog.position( this.options.position );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.hide();\n\t\t}\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tresize = false,\n\t\t\tresizableOptions = {};\n\n\t\t$.each( options, function( key, value ) {\n\t\t\tthat._setOption( key, value );\n\n\t\t\tif ( key in that.sizeRelatedOptions ) {\n\t\t\t\tresize = true;\n\t\t\t}\n\t\t\tif ( key in that.resizableRelatedOptions ) {\n\t\t\t\tresizableOptions[ key ] = value;\n\t\t\t}\n\t\t} );\n\n\t\tif ( resize ) {\n\t\t\tthis._size();\n\t\t\tthis._position();\n\t\t}\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", resizableOptions );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar isDraggable, isResizable,\n\t\t\tuiDialog = this.uiDialog;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.uiDialog.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"buttons\" ) {\n\t\t\tthis._createButtons();\n\t\t}\n\n\t\tif ( key === \"closeText\" ) {\n\t\t\tthis.uiDialogTitlebarClose.button( {\n\n\t\t\t\t// Ensure that we always pass a string\n\t\t\t\tlabel: $( \"<a>\" ).text( \"\" + this.options.closeText ).html()\n\t\t\t} );\n\t\t}\n\n\t\tif ( key === \"draggable\" ) {\n\t\t\tisDraggable = uiDialog.is( \":data(ui-draggable)\" );\n\t\t\tif ( isDraggable && !value ) {\n\t\t\t\tuiDialog.draggable( \"destroy\" );\n\t\t\t}\n\n\t\t\tif ( !isDraggable && value ) {\n\t\t\t\tthis._makeDraggable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"position\" ) {\n\t\t\tthis._position();\n\t\t}\n\n\t\tif ( key === \"resizable\" ) {\n\n\t\t\t// currently resizable, becoming non-resizable\n\t\t\tisResizable = uiDialog.is( \":data(ui-resizable)\" );\n\t\t\tif ( isResizable && !value ) {\n\t\t\t\tuiDialog.resizable( \"destroy\" );\n\t\t\t}\n\n\t\t\t// Currently resizable, changing handles\n\t\t\tif ( isResizable && typeof value === \"string\" ) {\n\t\t\t\tuiDialog.resizable( \"option\", \"handles\", value );\n\t\t\t}\n\n\t\t\t// Currently non-resizable, becoming resizable\n\t\t\tif ( !isResizable && value !== false ) {\n\t\t\t\tthis._makeResizable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"title\" ) {\n\t\t\tthis._title( this.uiDialogTitlebar.find( \".ui-dialog-title\" ) );\n\t\t}\n\t},\n\n\t_size: function() {\n\n\t\t// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content\n\t\t// divs will both have width and height set, so we need to reset them\n\t\tvar nonContentHeight, minContentHeight, maxContentHeight,\n\t\t\toptions = this.options;\n\n\t\t// Reset content sizing\n\t\tthis.element.show().css( {\n\t\t\twidth: \"auto\",\n\t\t\tminHeight: 0,\n\t\t\tmaxHeight: \"none\",\n\t\t\theight: 0\n\t\t} );\n\n\t\tif ( options.minWidth > options.width ) {\n\t\t\toptions.width = options.minWidth;\n\t\t}\n\n\t\t// Reset wrapper sizing\n\t\t// determine the height of all the non-content elements\n\t\tnonContentHeight = this.uiDialog.css( {\n\t\t\theight: \"auto\",\n\t\t\twidth: options.width\n\t\t} )\n\t\t\t.outerHeight();\n\t\tminContentHeight = Math.max( 0, options.minHeight - nonContentHeight );\n\t\tmaxContentHeight = typeof options.maxHeight === \"number\" ?\n\t\t\tMath.max( 0, options.maxHeight - nonContentHeight ) :\n\t\t\t\"none\";\n\n\t\tif ( options.height === \"auto\" ) {\n\t\t\tthis.element.css( {\n\t\t\t\tminHeight: minContentHeight,\n\t\t\t\tmaxHeight: maxContentHeight,\n\t\t\t\theight: \"auto\"\n\t\t\t} );\n\t\t} else {\n\t\t\tthis.element.height( Math.max( 0, options.height - nonContentHeight ) );\n\t\t}\n\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", \"minHeight\", this._minHeight() );\n\t\t}\n\t},\n\n\t_blockFrames: function() {\n\t\tthis.iframeBlocks = this.document.find( \"iframe\" ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\twidth: iframe.outerWidth(),\n\t\t\t\t\theight: iframe.outerHeight()\n\t\t\t\t} )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_allowInteraction: function( event ) {\n\t\tif ( $( event.target ).closest( \".ui-dialog\" ).length ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: Remove hack when datepicker implements\n\t\t// the .ui-front logic (#8989)\n\t\treturn !!$( event.target ).closest( \".ui-datepicker\" ).length;\n\t},\n\n\t_createOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar jqMinor = $.fn.jquery.substring( 0, 4 );\n\n\t\t// We use a delay in case the overlay is created from an\n\t\t// event that we're going to be cancelling (#2804)\n\t\tvar isOpening = true;\n\t\tthis._delay( function() {\n\t\t\tisOpening = false;\n\t\t} );\n\n\t\tif ( !this.document.data( \"ui-dialog-overlays\" ) ) {\n\n\t\t\t// Prevent use of anchors and inputs\n\t\t\t// This doesn't use `_on()` because it is a shared event handler\n\t\t\t// across all open modal dialogs.\n\t\t\tthis.document.on( \"focusin.ui-dialog\", function( event ) {\n\t\t\t\tif ( isOpening ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar instance = this._trackingInstances()[ 0 ];\n\t\t\t\tif ( !instance._allowInteraction( event ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tinstance._focusTabbable();\n\n\t\t\t\t\t// Support: jQuery >=3.4 <3.7 only\n\t\t\t\t\t// In jQuery 3.4-3.6, there are multiple issues with focus/blur\n\t\t\t\t\t// trigger chains or when triggering is done on a hidden element\n\t\t\t\t\t// at least once.\n\t\t\t\t\t// Trigger focus in a delay in addition if needed to avoid the issues.\n\t\t\t\t\t// See https://github.com/jquery/jquery/issues/4382\n\t\t\t\t\t// See https://github.com/jquery/jquery/issues/4856\n\t\t\t\t\t// See https://github.com/jquery/jquery/issues/4950\n\t\t\t\t\tif ( jqMinor === \"3.4.\" || jqMinor === \"3.5.\" || jqMinor === \"3.6.\" ) {\n\t\t\t\t\t\tinstance._delay( instance._restoreTabbableFocus );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}.bind( this ) );\n\t\t}\n\n\t\tthis.overlay = $( \"<div>\" )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._addClass( this.overlay, null, \"ui-widget-overlay ui-front\" );\n\t\tthis._on( this.overlay, {\n\t\t\tmousedown: \"_keepFocus\"\n\t\t} );\n\t\tthis.document.data( \"ui-dialog-overlays\",\n\t\t\t( this.document.data( \"ui-dialog-overlays\" ) || 0 ) + 1 );\n\t},\n\n\t_destroyOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.overlay ) {\n\t\t\tvar overlays = this.document.data( \"ui-dialog-overlays\" ) - 1;\n\n\t\t\tif ( !overlays ) {\n\t\t\t\tthis.document.off( \"focusin.ui-dialog\" );\n\t\t\t\tthis.document.removeData( \"ui-dialog-overlays\" );\n\t\t\t} else {\n\t\t\t\tthis.document.data( \"ui-dialog-overlays\", overlays );\n\t\t\t}\n\n\t\t\tthis.overlay.remove();\n\t\t\tthis.overlay = null;\n\t\t}\n\t}\n} );\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for dialogClass option\n\t$.widget( \"ui.dialog\", $.ui.dialog, {\n\t\toptions: {\n\t\t\tdialogClass: \"\"\n\t\t},\n\t\t_createWrapper: function() {\n\t\t\tthis._super();\n\t\t\tthis.uiDialog.addClass( this.options.dialogClass );\n\t\t},\n\t\t_setOption: function( key, value ) {\n\t\t\tif ( key === \"dialogClass\" ) {\n\t\t\t\tthis.uiDialog\n\t\t\t\t\t.removeClass( this.options.dialogClass )\n\t\t\t\t\t.addClass( value );\n\t\t\t}\n\t\t\tthis._superApply( arguments );\n\t\t}\n\t} );\n}\n\nvar widgetsDialog = $.ui.dialog;\n\n\n/*!\n * jQuery UI Droppable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Droppable\n//>>group: Interactions\n//>>description: Enables drop targets for draggable elements.\n//>>docs: https://api.jqueryui.com/droppable/\n//>>demos: https://jqueryui.com/droppable/\n\n\n$.widget( \"ui.droppable\", {\n\tversion: \"1.13.3\",\n\twidgetEventPrefix: \"drop\",\n\toptions: {\n\t\taccept: \"*\",\n\t\taddClasses: true,\n\t\tgreedy: false,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tdeactivate: null,\n\t\tdrop: null,\n\t\tout: null,\n\t\tover: null\n\t},\n\t_create: function() {\n\n\t\tvar proportions,\n\t\t\to = this.options,\n\t\t\taccept = o.accept;\n\n\t\tthis.isover = false;\n\t\tthis.isout = true;\n\n\t\tthis.accept = typeof accept === \"function\" ? accept : function( d ) {\n\t\t\treturn d.is( accept );\n\t\t};\n\n\t\tthis.proportions = function( /* valueToWrite */ ) {\n\t\t\tif ( arguments.length ) {\n\n\t\t\t\t// Store the droppable's proportions\n\t\t\t\tproportions = arguments[ 0 ];\n\t\t\t} else {\n\n\t\t\t\t// Retrieve or derive the droppable's proportions\n\t\t\t\treturn proportions ?\n\t\t\t\t\tproportions :\n\t\t\t\t\tproportions = {\n\t\t\t\t\t\twidth: this.element[ 0 ].offsetWidth,\n\t\t\t\t\t\theight: this.element[ 0 ].offsetHeight\n\t\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t\tthis._addToManager( o.scope );\n\n\t\tif ( o.addClasses ) {\n\t\t\tthis._addClass( \"ui-droppable\" );\n\t\t}\n\n\t},\n\n\t_addToManager: function( scope ) {\n\n\t\t// Add the reference and positions to the manager\n\t\t$.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];\n\t\t$.ui.ddmanager.droppables[ scope ].push( this );\n\t},\n\n\t_splice: function( drop ) {\n\t\tvar i = 0;\n\t\tfor ( ; i < drop.length; i++ ) {\n\t\t\tif ( drop[ i ] === this ) {\n\t\t\t\tdrop.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\tthis._splice( drop );\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\tif ( key === \"accept\" ) {\n\t\t\tthis.accept = typeof value === \"function\" ? value : function( d ) {\n\t\t\t\treturn d.is( value );\n\t\t\t};\n\t\t} else if ( key === \"scope\" ) {\n\t\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\t\tthis._splice( drop );\n\t\t\tthis._addToManager( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_activate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\tthis._addActiveClass();\n\t\tif ( draggable ) {\n\t\t\tthis._trigger( \"activate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_deactivate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\tthis._removeActiveClass();\n\t\tif ( draggable ) {\n\t\t\tthis._trigger( \"deactivate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_over: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||\n\t\t\t\tdraggable.element ) ) ) {\n\t\t\tthis._addHoverClass();\n\t\t\tthis._trigger( \"over\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_out: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||\n\t\t\t\tdraggable.element ) ) ) {\n\t\t\tthis._removeHoverClass();\n\t\t\tthis._trigger( \"out\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_drop: function( event, custom ) {\n\n\t\tvar draggable = custom || $.ui.ddmanager.current,\n\t\t\tchildrenIntersection = false;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.element\n\t\t\t.find( \":data(ui-droppable)\" )\n\t\t\t.not( \".ui-draggable-dragging\" )\n\t\t\t.each( function() {\n\t\t\t\tvar inst = $( this ).droppable( \"instance\" );\n\t\t\t\tif (\n\t\t\t\t\tinst.options.greedy &&\n\t\t\t\t\t!inst.options.disabled &&\n\t\t\t\t\tinst.options.scope === draggable.options.scope &&\n\t\t\t\t\tinst.accept.call(\n\t\t\t\t\t\tinst.element[ 0 ], ( draggable.currentItem || draggable.element )\n\t\t\t\t\t) &&\n\t\t\t\t\t$.ui.intersect(\n\t\t\t\t\t\tdraggable,\n\t\t\t\t\t\t$.extend( inst, { offset: inst.element.offset() } ),\n\t\t\t\t\t\tinst.options.tolerance, event\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tchildrenIntersection = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\tif ( childrenIntersection ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ],\n\t\t\t\t( draggable.currentItem || draggable.element ) ) ) {\n\t\t\tthis._removeActiveClass();\n\t\t\tthis._removeHoverClass();\n\n\t\t\tthis._trigger( \"drop\", event, this.ui( draggable ) );\n\t\t\treturn this.element;\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tui: function( c ) {\n\t\treturn {\n\t\t\tdraggable: ( c.currentItem || c.element ),\n\t\t\thelper: c.helper,\n\t\t\tposition: c.position,\n\t\t\toffset: c.positionAbs\n\t\t};\n\t},\n\n\t// Extension points just to make backcompat sane and avoid duplicating logic\n\t// TODO: Remove in 1.14 along with call to it below\n\t_addHoverClass: function() {\n\t\tthis._addClass( \"ui-droppable-hover\" );\n\t},\n\n\t_removeHoverClass: function() {\n\t\tthis._removeClass( \"ui-droppable-hover\" );\n\t},\n\n\t_addActiveClass: function() {\n\t\tthis._addClass( \"ui-droppable-active\" );\n\t},\n\n\t_removeActiveClass: function() {\n\t\tthis._removeClass( \"ui-droppable-active\" );\n\t}\n} );\n\n$.ui.intersect = ( function() {\n\tfunction isOverAxis( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t}\n\n\treturn function( draggable, droppable, toleranceMode, event ) {\n\n\t\tif ( !droppable.offset ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar x1 = ( draggable.positionAbs ||\n\t\t\t\tdraggable.position.absolute ).left + draggable.margins.left,\n\t\t\ty1 = ( draggable.positionAbs ||\n\t\t\t\tdraggable.position.absolute ).top + draggable.margins.top,\n\t\t\tx2 = x1 + draggable.helperProportions.width,\n\t\t\ty2 = y1 + draggable.helperProportions.height,\n\t\t\tl = droppable.offset.left,\n\t\t\tt = droppable.offset.top,\n\t\t\tr = l + droppable.proportions().width,\n\t\t\tb = t + droppable.proportions().height;\n\n\t\tswitch ( toleranceMode ) {\n\t\tcase \"fit\":\n\t\t\treturn ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );\n\t\tcase \"intersect\":\n\t\t\treturn ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half\n\t\tcase \"pointer\":\n\t\t\treturn isOverAxis( event.pageY, t, droppable.proportions().height ) &&\n\t\t\t\tisOverAxis( event.pageX, l, droppable.proportions().width );\n\t\tcase \"touch\":\n\t\t\treturn (\n\t\t\t\t( y1 >= t && y1 <= b ) || // Top edge touching\n\t\t\t\t( y2 >= t && y2 <= b ) || // Bottom edge touching\n\t\t\t\t( y1 < t && y2 > b ) // Surrounded vertically\n\t\t\t) && (\n\t\t\t\t( x1 >= l && x1 <= r ) || // Left edge touching\n\t\t\t\t( x2 >= l && x2 <= r ) || // Right edge touching\n\t\t\t\t( x1 < l && x2 > r ) // Surrounded horizontally\n\t\t\t);\n\t\tdefault:\n\t\t\treturn false;\n\t\t}\n\t};\n} )();\n\n/*\n\tThis manager tracks offsets of draggables and droppables\n*/\n$.ui.ddmanager = {\n\tcurrent: null,\n\tdroppables: { \"default\": [] },\n\tprepareOffsets: function( t, event ) {\n\n\t\tvar i, j,\n\t\t\tm = $.ui.ddmanager.droppables[ t.options.scope ] || [],\n\t\t\ttype = event ? event.type : null, // workaround for #2317\n\t\t\tlist = ( t.currentItem || t.element ).find( \":data(ui-droppable)\" ).addBack();\n\n\t\tdroppablesLoop: for ( i = 0; i < m.length; i++ ) {\n\n\t\t\t// No disabled and non-accepted\n\t\t\tif ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ],\n\t\t\t\t\t( t.currentItem || t.element ) ) ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Filter out elements in the current dragged item\n\t\t\tfor ( j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === m[ i ].element[ 0 ] ) {\n\t\t\t\t\tm[ i ].proportions().height = 0;\n\t\t\t\t\tcontinue droppablesLoop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tm[ i ].visible = m[ i ].element.css( \"display\" ) !== \"none\";\n\t\t\tif ( !m[ i ].visible ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Activate the droppable if used directly from draggables\n\t\t\tif ( type === \"mousedown\" ) {\n\t\t\t\tm[ i ]._activate.call( m[ i ], event );\n\t\t\t}\n\n\t\t\tm[ i ].offset = m[ i ].element.offset();\n\t\t\tm[ i ].proportions( {\n\t\t\t\twidth: m[ i ].element[ 0 ].offsetWidth,\n\t\t\t\theight: m[ i ].element[ 0 ].offsetHeight\n\t\t\t} );\n\n\t\t}\n\n\t},\n\tdrop: function( draggable, event ) {\n\n\t\tvar dropped = false;\n\n\t\t// Create a copy of the droppables in case the list changes during the drop (#9116)\n\t\t$.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {\n\n\t\t\tif ( !this.options ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !this.options.disabled && this.visible &&\n\t\t\t\t\t$.ui.intersect( draggable, this, this.options.tolerance, event ) ) {\n\t\t\t\tdropped = this._drop.call( this, event ) || dropped;\n\t\t\t}\n\n\t\t\tif ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ],\n\t\t\t\t\t( draggable.currentItem || draggable.element ) ) ) {\n\t\t\t\tthis.isout = true;\n\t\t\t\tthis.isover = false;\n\t\t\t\tthis._deactivate.call( this, event );\n\t\t\t}\n\n\t\t} );\n\t\treturn dropped;\n\n\t},\n\tdragStart: function( draggable, event ) {\n\n\t\t// Listen for scrolling so that if the dragging causes scrolling the position of the\n\t\t// droppables can be recalculated (see #5003)\n\t\tdraggable.element.parentsUntil( \"body\" ).on( \"scroll.droppable\", function() {\n\t\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( draggable, event ) {\n\n\t\t// If you have a highly dynamic page, you might try this option. It renders positions\n\t\t// every time you move the mouse.\n\t\tif ( draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\n\t\t// Run through all droppables and check their positions based on specific tolerance options\n\t\t$.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {\n\n\t\t\tif ( this.options.disabled || this.greedyChild || !this.visible ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar parentInstance, scope, parent,\n\t\t\t\tintersects = $.ui.intersect( draggable, this, this.options.tolerance, event ),\n\t\t\t\tc = !intersects && this.isover ?\n\t\t\t\t\t\"isout\" :\n\t\t\t\t\t( intersects && !this.isover ? \"isover\" : null );\n\t\t\tif ( !c ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.options.greedy ) {\n\n\t\t\t\t// find droppable parents with same scope\n\t\t\t\tscope = this.options.scope;\n\t\t\t\tparent = this.element.parents( \":data(ui-droppable)\" ).filter( function() {\n\t\t\t\t\treturn $( this ).droppable( \"instance\" ).options.scope === scope;\n\t\t\t\t} );\n\n\t\t\t\tif ( parent.length ) {\n\t\t\t\t\tparentInstance = $( parent[ 0 ] ).droppable( \"instance\" );\n\t\t\t\t\tparentInstance.greedyChild = ( c === \"isover\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We just moved into a greedy child\n\t\t\tif ( parentInstance && c === \"isover\" ) {\n\t\t\t\tparentInstance.isover = false;\n\t\t\t\tparentInstance.isout = true;\n\t\t\t\tparentInstance._out.call( parentInstance, event );\n\t\t\t}\n\n\t\t\tthis[ c ] = true;\n\t\t\tthis[ c === \"isout\" ? \"isover\" : \"isout\" ] = false;\n\t\t\tthis[ c === \"isover\" ? \"_over\" : \"_out\" ].call( this, event );\n\n\t\t\t// We just moved out of a greedy child\n\t\t\tif ( parentInstance && c === \"isout\" ) {\n\t\t\t\tparentInstance.isout = false;\n\t\t\t\tparentInstance.isover = true;\n\t\t\t\tparentInstance._over.call( parentInstance, event );\n\t\t\t}\n\t\t} );\n\n\t},\n\tdragStop: function( draggable, event ) {\n\t\tdraggable.element.parentsUntil( \"body\" ).off( \"scroll.droppable\" );\n\n\t\t// Call prepareOffsets one final time since IE does not fire return scroll events when\n\t\t// overflow was caused by drag (see #5003)\n\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\t}\n};\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for activeClass and hoverClass options\n\t$.widget( \"ui.droppable\", $.ui.droppable, {\n\t\toptions: {\n\t\t\thoverClass: false,\n\t\t\tactiveClass: false\n\t\t},\n\t\t_addActiveClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.addClass( this.options.activeClass );\n\t\t\t}\n\t\t},\n\t\t_removeActiveClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.removeClass( this.options.activeClass );\n\t\t\t}\n\t\t},\n\t\t_addHoverClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.addClass( this.options.hoverClass );\n\t\t\t}\n\t\t},\n\t\t_removeHoverClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.removeClass( this.options.hoverClass );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nvar widgetsDroppable = $.ui.droppable;\n\n\n/*!\n * jQuery UI Progressbar 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Progressbar\n//>>group: Widgets\n/* eslint-disable max-len */\n//>>description: Displays a status indicator for loading state, standard percentage, and other progress indicators.\n/* eslint-enable max-len */\n//>>docs: https://api.jqueryui.com/progressbar/\n//>>demos: https://jqueryui.com/progressbar/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/progressbar.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar widgetsProgressbar = $.widget( \"ui.progressbar\", {\n\tversion: \"1.13.3\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-progressbar\": \"ui-corner-all\",\n\t\t\t\"ui-progressbar-value\": \"ui-corner-left\",\n\t\t\t\"ui-progressbar-complete\": \"ui-corner-right\"\n\t\t},\n\t\tmax: 100,\n\t\tvalue: 0,\n\n\t\tchange: null,\n\t\tcomplete: null\n\t},\n\n\tmin: 0,\n\n\t_create: function() {\n\n\t\t// Constrain initial value\n\t\tthis.oldValue = this.options.value = this._constrainedValue();\n\n\t\tthis.element.attr( {\n\n\t\t\t// Only set static values; aria-valuenow and aria-valuemax are\n\t\t\t// set inside _refreshValue()\n\t\t\trole: \"progressbar\",\n\t\t\t\"aria-valuemin\": this.min\n\t\t} );\n\t\tthis._addClass( \"ui-progressbar\", \"ui-widget ui-widget-content\" );\n\n\t\tthis.valueDiv = $( \"<div>\" ).appendTo( this.element );\n\t\tthis._addClass( this.valueDiv, \"ui-progressbar-value\", \"ui-widget-header\" );\n\t\tthis._refreshValue();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeAttr( \"role aria-valuemin aria-valuemax aria-valuenow\" );\n\n\t\tthis.valueDiv.remove();\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\treturn this.options.value;\n\t\t}\n\n\t\tthis.options.value = this._constrainedValue( newValue );\n\t\tthis._refreshValue();\n\t},\n\n\t_constrainedValue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\tnewValue = this.options.value;\n\t\t}\n\n\t\tthis.indeterminate = newValue === false;\n\n\t\t// Sanitize value\n\t\tif ( typeof newValue !== \"number\" ) {\n\t\t\tnewValue = 0;\n\t\t}\n\n\t\treturn this.indeterminate ? false :\n\t\t\tMath.min( this.options.max, Math.max( this.min, newValue ) );\n\t},\n\n\t_setOptions: function( options ) {\n\n\t\t// Ensure \"value\" option is set after other values (like max)\n\t\tvar value = options.value;\n\t\tdelete options.value;\n\n\t\tthis._super( options );\n\n\t\tthis.options.value = this._constrainedValue( value );\n\t\tthis._refreshValue();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"max\" ) {\n\n\t\t\t// Don't allow a max less than min\n\t\t\tvalue = Math.max( this.min, value );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", value );\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\t_percentage: function() {\n\t\treturn this.indeterminate ?\n\t\t\t100 :\n\t\t\t100 * ( this.options.value - this.min ) / ( this.options.max - this.min );\n\t},\n\n\t_refreshValue: function() {\n\t\tvar value = this.options.value,\n\t\t\tpercentage = this._percentage();\n\n\t\tthis.valueDiv\n\t\t\t.toggle( this.indeterminate || value > this.min )\n\t\t\t.width( percentage.toFixed( 0 ) + \"%\" );\n\n\t\tthis\n\t\t\t._toggleClass( this.valueDiv, \"ui-progressbar-complete\", null,\n\t\t\t\tvalue === this.options.max )\n\t\t\t._toggleClass( \"ui-progressbar-indeterminate\", null, this.indeterminate );\n\n\t\tif ( this.indeterminate ) {\n\t\t\tthis.element.removeAttr( \"aria-valuenow\" );\n\t\t\tif ( !this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv = $( \"<div>\" ).appendTo( this.valueDiv );\n\t\t\t\tthis._addClass( this.overlayDiv, \"ui-progressbar-overlay\" );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.element.attr( {\n\t\t\t\t\"aria-valuemax\": this.options.max,\n\t\t\t\t\"aria-valuenow\": value\n\t\t\t} );\n\t\t\tif ( this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv.remove();\n\t\t\t\tthis.overlayDiv = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( this.oldValue !== value ) {\n\t\t\tthis.oldValue = value;\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t\tif ( value === this.options.max ) {\n\t\t\tthis._trigger( \"complete\" );\n\t\t}\n\t}\n} );\n\n\n/*!\n * jQuery UI Selectable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Selectable\n//>>group: Interactions\n//>>description: Allows groups of elements to be selected with the mouse.\n//>>docs: https://api.jqueryui.com/selectable/\n//>>demos: https://jqueryui.com/selectable/\n//>>css.structure: ../../themes/base/selectable.css\n\n\nvar widgetsSelectable = $.widget( \"ui.selectable\", $.ui.mouse, {\n\tversion: \"1.13.3\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoRefresh: true,\n\t\tdistance: 0,\n\t\tfilter: \"*\",\n\t\ttolerance: \"touch\",\n\n\t\t// Callbacks\n\t\tselected: null,\n\t\tselecting: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tunselected: null,\n\t\tunselecting: null\n\t},\n\t_create: function() {\n\t\tvar that = this;\n\n\t\tthis._addClass( \"ui-selectable\" );\n\n\t\tthis.dragged = false;\n\n\t\t// Cache selectee children based on filter\n\t\tthis.refresh = function() {\n\t\t\tthat.elementPos = $( that.element[ 0 ] ).offset();\n\t\t\tthat.selectees = $( that.options.filter, that.element[ 0 ] );\n\t\t\tthat._addClass( that.selectees, \"ui-selectee\" );\n\t\t\tthat.selectees.each( function() {\n\t\t\t\tvar $this = $( this ),\n\t\t\t\t\tselecteeOffset = $this.offset(),\n\t\t\t\t\tpos = {\n\t\t\t\t\t\tleft: selecteeOffset.left - that.elementPos.left,\n\t\t\t\t\t\ttop: selecteeOffset.top - that.elementPos.top\n\t\t\t\t\t};\n\t\t\t\t$.data( this, \"selectable-item\", {\n\t\t\t\t\telement: this,\n\t\t\t\t\t$element: $this,\n\t\t\t\t\tleft: pos.left,\n\t\t\t\t\ttop: pos.top,\n\t\t\t\t\tright: pos.left + $this.outerWidth(),\n\t\t\t\t\tbottom: pos.top + $this.outerHeight(),\n\t\t\t\t\tstartselected: false,\n\t\t\t\t\tselected: $this.hasClass( \"ui-selected\" ),\n\t\t\t\t\tselecting: $this.hasClass( \"ui-selecting\" ),\n\t\t\t\t\tunselecting: $this.hasClass( \"ui-unselecting\" )\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t\tthis.refresh();\n\n\t\tthis._mouseInit();\n\n\t\tthis.helper = $( \"<div>\" );\n\t\tthis._addClass( this.helper, \"ui-selectable-helper\" );\n\t},\n\n\t_destroy: function() {\n\t\tthis.selectees.removeData( \"selectable-item\" );\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseStart: function( event ) {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.opos = [ event.pageX, event.pageY ];\n\t\tthis.elementPos = $( this.element[ 0 ] ).offset();\n\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.selectees = $( options.filter, this.element[ 0 ] );\n\n\t\tthis._trigger( \"start\", event );\n\n\t\t$( options.appendTo ).append( this.helper );\n\n\t\t// position helper (lasso)\n\t\tthis.helper.css( {\n\t\t\t\"left\": event.pageX,\n\t\t\t\"top\": event.pageY,\n\t\t\t\"width\": 0,\n\t\t\t\"height\": 0\n\t\t} );\n\n\t\tif ( options.autoRefresh ) {\n\t\t\tthis.refresh();\n\t\t}\n\n\t\tthis.selectees.filter( \".ui-selected\" ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tselectee.startselected = true;\n\t\t\tif ( !event.metaKey && !event.ctrlKey ) {\n\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\tselectee.selected = false;\n\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\tselectee.unselecting = true;\n\n\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\t$( event.target ).parents().addBack().each( function() {\n\t\t\tvar doSelect,\n\t\t\t\tselectee = $.data( this, \"selectable-item\" );\n\t\t\tif ( selectee ) {\n\t\t\t\tdoSelect = ( !event.metaKey && !event.ctrlKey ) ||\n\t\t\t\t\t!selectee.$element.hasClass( \"ui-selected\" );\n\t\t\t\tthat._removeClass( selectee.$element, doSelect ? \"ui-unselecting\" : \"ui-selected\" )\n\t\t\t\t\t._addClass( selectee.$element, doSelect ? \"ui-selecting\" : \"ui-unselecting\" );\n\t\t\t\tselectee.unselecting = !doSelect;\n\t\t\t\tselectee.selecting = doSelect;\n\t\t\t\tselectee.selected = doSelect;\n\n\t\t\t\t// selectable (UN)SELECTING callback\n\t\t\t\tif ( doSelect ) {\n\t\t\t\t\tthat._trigger( \"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tthis.dragged = true;\n\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar tmp,\n\t\t\tthat = this,\n\t\t\toptions = this.options,\n\t\t\tx1 = this.opos[ 0 ],\n\t\t\ty1 = this.opos[ 1 ],\n\t\t\tx2 = event.pageX,\n\t\t\ty2 = event.pageY;\n\n\t\tif ( x1 > x2 ) {\n\t\t\ttmp = x2; x2 = x1; x1 = tmp;\n\t\t}\n\t\tif ( y1 > y2 ) {\n\t\t\ttmp = y2; y2 = y1; y1 = tmp;\n\t\t}\n\t\tthis.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } );\n\n\t\tthis.selectees.each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" ),\n\t\t\t\thit = false,\n\t\t\t\toffset = {};\n\n\t\t\t//prevent helper from being selected if appendTo: selectable\n\t\t\tif ( !selectee || selectee.element === that.element[ 0 ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\toffset.left   = selectee.left   + that.elementPos.left;\n\t\t\toffset.right  = selectee.right  + that.elementPos.left;\n\t\t\toffset.top    = selectee.top    + that.elementPos.top;\n\t\t\toffset.bottom = selectee.bottom + that.elementPos.top;\n\n\t\t\tif ( options.tolerance === \"touch\" ) {\n\t\t\t\thit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 ||\n                    offset.bottom < y1 ) );\n\t\t\t} else if ( options.tolerance === \"fit\" ) {\n\t\t\t\thit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 &&\n                    offset.bottom < y2 );\n\t\t\t}\n\n\t\t\tif ( hit ) {\n\n\t\t\t\t// SELECT\n\t\t\t\tif ( selectee.selected ) {\n\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\tselectee.selected = false;\n\t\t\t\t}\n\t\t\t\tif ( selectee.unselecting ) {\n\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\tselectee.unselecting = false;\n\t\t\t\t}\n\t\t\t\tif ( !selectee.selecting ) {\n\t\t\t\t\tthat._addClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\tselectee.selecting = true;\n\n\t\t\t\t\t// selectable SELECTING callback\n\t\t\t\t\tthat._trigger( \"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// UNSELECT\n\t\t\t\tif ( selectee.selecting ) {\n\t\t\t\t\tif ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\t\tselectee.selected = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tif ( selectee.startselected ) {\n\t\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\t\t\tselectee.unselecting = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( selectee.selected ) {\n\t\t\t\t\tif ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\t\tselectee.selected = false;\n\n\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\t\tselectee.unselecting = true;\n\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tvar that = this;\n\n\t\tthis.dragged = false;\n\n\t\t$( \".ui-unselecting\", this.element[ 0 ] ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tthat._removeClass( selectee.$element, \"ui-unselecting\" );\n\t\t\tselectee.unselecting = false;\n\t\t\tselectee.startselected = false;\n\t\t\tthat._trigger( \"unselected\", event, {\n\t\t\t\tunselected: selectee.element\n\t\t\t} );\n\t\t} );\n\t\t$( \".ui-selecting\", this.element[ 0 ] ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" )\n\t\t\t\t._addClass( selectee.$element, \"ui-selected\" );\n\t\t\tselectee.selecting = false;\n\t\t\tselectee.selected = true;\n\t\t\tselectee.startselected = true;\n\t\t\tthat._trigger( \"selected\", event, {\n\t\t\t\tselected: selectee.element\n\t\t\t} );\n\t\t} );\n\t\tthis._trigger( \"stop\", event );\n\n\t\tthis.helper.remove();\n\n\t\treturn false;\n\t}\n\n} );\n\n\n/*!\n * jQuery UI Selectmenu 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Selectmenu\n//>>group: Widgets\n/* eslint-disable max-len */\n//>>description: Duplicates and extends the functionality of a native HTML select element, allowing it to be customizable in behavior and appearance far beyond the limitations of a native select.\n/* eslint-enable max-len */\n//>>docs: https://api.jqueryui.com/selectmenu/\n//>>demos: https://jqueryui.com/selectmenu/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/selectmenu.css, ../../themes/base/button.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar widgetsSelectmenu = $.widget( \"ui.selectmenu\", [ $.ui.formResetMixin, {\n\tversion: \"1.13.3\",\n\tdefaultElement: \"<select>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tclasses: {\n\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-top\",\n\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-all\"\n\t\t},\n\t\tdisabled: null,\n\t\ticons: {\n\t\t\tbutton: \"ui-icon-triangle-1-s\"\n\t\t},\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\twidth: false,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tvar selectmenuId = this.element.uniqueId().attr( \"id\" );\n\t\tthis.ids = {\n\t\t\telement: selectmenuId,\n\t\t\tbutton: selectmenuId + \"-button\",\n\t\t\tmenu: selectmenuId + \"-menu\"\n\t\t};\n\n\t\tthis._drawButton();\n\t\tthis._drawMenu();\n\t\tthis._bindFormResetHandler();\n\n\t\tthis._rendered = false;\n\t\tthis.menuItems = $();\n\t},\n\n\t_drawButton: function() {\n\t\tvar icon,\n\t\t\tthat = this,\n\t\t\titem = this._parseOption(\n\t\t\t\tthis.element.find( \"option:selected\" ),\n\t\t\t\tthis.element[ 0 ].selectedIndex\n\t\t\t);\n\n\t\t// Associate existing label with the new button\n\t\tthis.labels = this.element.labels().attr( \"for\", this.ids.button );\n\t\tthis._on( this.labels, {\n\t\t\tclick: function( event ) {\n\t\t\t\tthis.button.trigger( \"focus\" );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t} );\n\n\t\t// Hide original select element\n\t\tthis.element.hide();\n\n\t\t// Create button\n\t\tthis.button = $( \"<span>\", {\n\t\t\ttabindex: this.options.disabled ? -1 : 0,\n\t\t\tid: this.ids.button,\n\t\t\trole: \"combobox\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\"aria-autocomplete\": \"list\",\n\t\t\t\"aria-owns\": this.ids.menu,\n\t\t\t\"aria-haspopup\": \"true\",\n\t\t\ttitle: this.element.attr( \"title\" )\n\t\t} )\n\t\t\t.insertAfter( this.element );\n\n\t\tthis._addClass( this.button, \"ui-selectmenu-button ui-selectmenu-button-closed\",\n\t\t\t\"ui-button ui-widget\" );\n\n\t\ticon = $( \"<span>\" ).appendTo( this.button );\n\t\tthis._addClass( icon, \"ui-selectmenu-icon\", \"ui-icon \" + this.options.icons.button );\n\t\tthis.buttonItem = this._renderButtonItem( item )\n\t\t\t.appendTo( this.button );\n\n\t\tif ( this.options.width !== false ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\n\t\tthis._on( this.button, this._buttonEvents );\n\t\tthis.button.one( \"focusin\", function() {\n\n\t\t\t// Delay rendering the menu items until the button receives focus.\n\t\t\t// The menu may have already been rendered via a programmatic open.\n\t\t\tif ( !that._rendered ) {\n\t\t\t\tthat._refreshMenu();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_drawMenu: function() {\n\t\tvar that = this;\n\n\t\t// Create menu\n\t\tthis.menu = $( \"<ul>\", {\n\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\"aria-labelledby\": this.ids.button,\n\t\t\tid: this.ids.menu\n\t\t} );\n\n\t\t// Wrap menu\n\t\tthis.menuWrap = $( \"<div>\" ).append( this.menu );\n\t\tthis._addClass( this.menuWrap, \"ui-selectmenu-menu\", \"ui-front\" );\n\t\tthis.menuWrap.appendTo( this._appendTo() );\n\n\t\t// Initialize menu widget\n\t\tthis.menuInstance = this.menu\n\t\t\t.menu( {\n\t\t\t\tclasses: {\n\t\t\t\t\t\"ui-menu\": \"ui-corner-bottom\"\n\t\t\t\t},\n\t\t\t\trole: \"listbox\",\n\t\t\t\tselect: function( event, ui ) {\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t// Support: IE8\n\t\t\t\t\t// If the item was selected via a click, the text selection\n\t\t\t\t\t// will be destroyed in IE\n\t\t\t\t\tthat._setSelection();\n\n\t\t\t\t\tthat._select( ui.item.data( \"ui-selectmenu-item\" ), event );\n\t\t\t\t},\n\t\t\t\tfocus: function( event, ui ) {\n\t\t\t\t\tvar item = ui.item.data( \"ui-selectmenu-item\" );\n\n\t\t\t\t\t// Prevent inital focus from firing and check if its a newly focused item\n\t\t\t\t\tif ( that.focusIndex != null && item.index !== that.focusIndex ) {\n\t\t\t\t\t\tthat._trigger( \"focus\", event, { item: item } );\n\t\t\t\t\t\tif ( !that.isOpen ) {\n\t\t\t\t\t\t\tthat._select( item, event );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthat.focusIndex = item.index;\n\n\t\t\t\t\tthat.button.attr( \"aria-activedescendant\",\n\t\t\t\t\t\tthat.menuItems.eq( item.index ).attr( \"id\" ) );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.menu( \"instance\" );\n\n\t\t// Don't close the menu on mouseleave\n\t\tthis.menuInstance._off( this.menu, \"mouseleave\" );\n\n\t\t// Cancel the menu's collapseAll on document click\n\t\tthis.menuInstance._closeOnDocumentClick = function() {\n\t\t\treturn false;\n\t\t};\n\n\t\t// Selects often contain empty items, but never contain dividers\n\t\tthis.menuInstance._isDivider = function() {\n\t\t\treturn false;\n\t\t};\n\t},\n\n\trefresh: function() {\n\t\tthis._refreshMenu();\n\t\tthis.buttonItem.replaceWith(\n\t\t\tthis.buttonItem = this._renderButtonItem(\n\n\t\t\t\t// Fall back to an empty object in case there are no options\n\t\t\t\tthis._getSelectedItem().data( \"ui-selectmenu-item\" ) || {}\n\t\t\t)\n\t\t);\n\t\tif ( this.options.width === null ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_refreshMenu: function() {\n\t\tvar item,\n\t\t\toptions = this.element.find( \"option\" );\n\n\t\tthis.menu.empty();\n\n\t\tthis._parseOptions( options );\n\t\tthis._renderMenu( this.menu, this.items );\n\n\t\tthis.menuInstance.refresh();\n\t\tthis.menuItems = this.menu.find( \"li\" )\n\t\t\t.not( \".ui-selectmenu-optgroup\" )\n\t\t\t\t.find( \".ui-menu-item-wrapper\" );\n\n\t\tthis._rendered = true;\n\n\t\tif ( !options.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\titem = this._getSelectedItem();\n\n\t\t// Update the menu to have the correct item focused\n\t\tthis.menuInstance.focus( null, item );\n\t\tthis._setAria( item.data( \"ui-selectmenu-item\" ) );\n\n\t\t// Set disabled state\n\t\tthis._setOption( \"disabled\", this.element.prop( \"disabled\" ) );\n\t},\n\n\topen: function( event ) {\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If this is the first time the menu is being opened, render the items\n\t\tif ( !this._rendered ) {\n\t\t\tthis._refreshMenu();\n\t\t} else {\n\n\t\t\t// Menu clears focus on close, reset focus to selected item\n\t\t\tthis._removeClass( this.menu.find( \".ui-state-active\" ), null, \"ui-state-active\" );\n\t\t\tthis.menuInstance.focus( null, this._getSelectedItem() );\n\t\t}\n\n\t\t// If there are no options, don't open the menu\n\t\tif ( !this.menuItems.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen = true;\n\t\tthis._toggleAttr();\n\t\tthis._resizeMenu();\n\t\tthis._position();\n\n\t\tthis._on( this.document, this._documentClick );\n\n\t\tthis._trigger( \"open\", event );\n\t},\n\n\t_position: function() {\n\t\tthis.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );\n\t},\n\n\tclose: function( event ) {\n\t\tif ( !this.isOpen ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen = false;\n\t\tthis._toggleAttr();\n\n\t\tthis.range = null;\n\t\tthis._off( this.document );\n\n\t\tthis._trigger( \"close\", event );\n\t},\n\n\twidget: function() {\n\t\treturn this.button;\n\t},\n\n\tmenuWidget: function() {\n\t\treturn this.menu;\n\t},\n\n\t_renderButtonItem: function( item ) {\n\t\tvar buttonItem = $( \"<span>\" );\n\n\t\tthis._setText( buttonItem, item.label );\n\t\tthis._addClass( buttonItem, \"ui-selectmenu-text\" );\n\n\t\treturn buttonItem;\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this,\n\t\t\tcurrentOptgroup = \"\";\n\n\t\t$.each( items, function( index, item ) {\n\t\t\tvar li;\n\n\t\t\tif ( item.optgroup !== currentOptgroup ) {\n\t\t\t\tli = $( \"<li>\", {\n\t\t\t\t\ttext: item.optgroup\n\t\t\t\t} );\n\t\t\t\tthat._addClass( li, \"ui-selectmenu-optgroup\", \"ui-menu-divider\" +\n\t\t\t\t\t( item.element.parent( \"optgroup\" ).prop( \"disabled\" ) ?\n\t\t\t\t\t\t\" ui-state-disabled\" :\n\t\t\t\t\t\t\"\" ) );\n\n\t\t\t\tli.appendTo( ul );\n\n\t\t\t\tcurrentOptgroup = item.optgroup;\n\t\t\t}\n\n\t\t\tthat._renderItemData( ul, item );\n\t\t} );\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-selectmenu-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\tvar li = $( \"<li>\" ),\n\t\t\twrapper = $( \"<div>\", {\n\t\t\t\ttitle: item.element.attr( \"title\" )\n\t\t\t} );\n\n\t\tif ( item.disabled ) {\n\t\t\tthis._addClass( li, null, \"ui-state-disabled\" );\n\t\t}\n\n\t\tif ( item.hidden ) {\n\t\t\tli.prop( \"hidden\", true );\n\t\t} else {\n\t\t\tthis._setText( wrapper, item.label );\n\t\t}\n\n\t\treturn li.append( wrapper ).appendTo( ul );\n\t},\n\n\t_setText: function( element, value ) {\n\t\tif ( value ) {\n\t\t\telement.text( value );\n\t\t} else {\n\t\t\telement.html( \"&#160;\" );\n\t\t}\n\t},\n\n\t_move: function( direction, event ) {\n\t\tvar item, next,\n\t\t\tfilter = \".ui-menu-item\";\n\n\t\tif ( this.isOpen ) {\n\t\t\titem = this.menuItems.eq( this.focusIndex ).parent( \"li\" );\n\t\t} else {\n\t\t\titem = this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( \"li\" );\n\t\t\tfilter += \":not(.ui-state-disabled)\";\n\t\t}\n\n\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\tnext = item[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( filter ).eq( -1 );\n\t\t} else {\n\t\t\tnext = item[ direction + \"All\" ]( filter ).eq( 0 );\n\t\t}\n\n\t\tif ( next.length ) {\n\t\t\tthis.menuInstance.focus( event, next );\n\t\t}\n\t},\n\n\t_getSelectedItem: function() {\n\t\treturn this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( \"li\" );\n\t},\n\n\t_toggle: function( event ) {\n\t\tthis[ this.isOpen ? \"close\" : \"open\" ]( event );\n\t},\n\n\t_setSelection: function() {\n\t\tvar selection;\n\n\t\tif ( !this.range ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( window.getSelection ) {\n\t\t\tselection = window.getSelection();\n\t\t\tselection.removeAllRanges();\n\t\t\tselection.addRange( this.range );\n\n\t\t// Support: IE8\n\t\t} else {\n\t\t\tthis.range.select();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Setting the text selection kills the button focus in IE, but\n\t\t// restoring the focus doesn't kill the selection.\n\t\tthis.button.trigger( \"focus\" );\n\t},\n\n\t_documentClick: {\n\t\tmousedown: function( event ) {\n\t\t\tif ( !this.isOpen ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( !$( event.target ).closest( \".ui-selectmenu-menu, #\" +\n\t\t\t\t$.escapeSelector( this.ids.button ) ).length ) {\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t}\n\t},\n\n\t_buttonEvents: {\n\n\t\t// Prevent text selection from being reset when interacting with the selectmenu (#10144)\n\t\tmousedown: function() {\n\t\t\tvar selection;\n\n\t\t\tif ( window.getSelection ) {\n\t\t\t\tselection = window.getSelection();\n\t\t\t\tif ( selection.rangeCount ) {\n\t\t\t\t\tthis.range = selection.getRangeAt( 0 );\n\t\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t} else {\n\t\t\t\tthis.range = document.selection.createRange();\n\t\t\t}\n\t\t},\n\n\t\tclick: function( event ) {\n\t\t\tthis._setSelection();\n\t\t\tthis._toggle( event );\n\t\t},\n\n\t\tkeydown: function( event ) {\n\t\t\tvar preventDefault = true;\n\t\t\tswitch ( event.keyCode ) {\n\t\t\tcase $.ui.keyCode.TAB:\n\t\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\t\tthis.close( event );\n\t\t\t\tpreventDefault = false;\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.ENTER:\n\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._move( \"prev\", event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._move( \"next\", event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.SPACE:\n\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\tthis._move( \"prev\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tthis._move( \"next\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.HOME:\n\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tthis._move( \"first\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.END:\n\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tthis._move( \"last\", event );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.menu.trigger( event );\n\t\t\t\tpreventDefault = false;\n\t\t\t}\n\n\t\t\tif ( preventDefault ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t},\n\n\t_selectFocusedItem: function( event ) {\n\t\tvar item = this.menuItems.eq( this.focusIndex ).parent( \"li\" );\n\t\tif ( !item.hasClass( \"ui-state-disabled\" ) ) {\n\t\t\tthis._select( item.data( \"ui-selectmenu-item\" ), event );\n\t\t}\n\t},\n\n\t_select: function( item, event ) {\n\t\tvar oldIndex = this.element[ 0 ].selectedIndex;\n\n\t\t// Change native select element\n\t\tthis.element[ 0 ].selectedIndex = item.index;\n\t\tthis.buttonItem.replaceWith( this.buttonItem = this._renderButtonItem( item ) );\n\t\tthis._setAria( item );\n\t\tthis._trigger( \"select\", event, { item: item } );\n\n\t\tif ( item.index !== oldIndex ) {\n\t\t\tthis._trigger( \"change\", event, { item: item } );\n\t\t}\n\n\t\tthis.close( event );\n\t},\n\n\t_setAria: function( item ) {\n\t\tvar id = this.menuItems.eq( item.index ).attr( \"id\" );\n\n\t\tthis.button.attr( {\n\t\t\t\"aria-labelledby\": id,\n\t\t\t\"aria-activedescendant\": id\n\t\t} );\n\t\tthis.menu.attr( \"aria-activedescendant\", id );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tvar icon = this.button.find( \"span.ui-icon\" );\n\t\t\tthis._removeClass( icon, null, this.options.icons.button )\n\t\t\t\t._addClass( icon, null, value.button );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menuWrap.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"width\" ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.menuInstance.option( \"disabled\", value );\n\t\tthis.button.attr( \"aria-disabled\", value );\n\t\tthis._toggleClass( this.button, null, \"ui-state-disabled\", value );\n\n\t\tthis.element.prop( \"disabled\", value );\n\t\tif ( value ) {\n\t\t\tthis.button.attr( \"tabindex\", -1 );\n\t\t\tthis.close();\n\t\t} else {\n\t\t\tthis.button.attr( \"tabindex\", 0 );\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front, dialog\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_toggleAttr: function() {\n\t\tthis.button.attr( \"aria-expanded\", this.isOpen );\n\n\t\t// We can't use two _toggleClass() calls here, because we need to make sure\n\t\t// we always remove classes first and add them second, otherwise if both classes have the\n\t\t// same theme class, it will be removed after we add it.\n\t\tthis._removeClass( this.button, \"ui-selectmenu-button-\" +\n\t\t\t( this.isOpen ? \"closed\" : \"open\" ) )\n\t\t\t._addClass( this.button, \"ui-selectmenu-button-\" +\n\t\t\t\t( this.isOpen ? \"open\" : \"closed\" ) )\n\t\t\t._toggleClass( this.menuWrap, \"ui-selectmenu-open\", null, this.isOpen );\n\n\t\tthis.menu.attr( \"aria-hidden\", !this.isOpen );\n\t},\n\n\t_resizeButton: function() {\n\t\tvar width = this.options.width;\n\n\t\t// For `width: false`, just remove inline style and stop\n\t\tif ( width === false ) {\n\t\t\tthis.button.css( \"width\", \"\" );\n\t\t\treturn;\n\t\t}\n\n\t\t// For `width: null`, match the width of the original element\n\t\tif ( width === null ) {\n\t\t\twidth = this.element.show().outerWidth();\n\t\t\tthis.element.hide();\n\t\t}\n\n\t\tthis.button.outerWidth( width );\n\t},\n\n\t_resizeMenu: function() {\n\t\tthis.menu.outerWidth( Math.max(\n\t\t\tthis.button.outerWidth(),\n\n\t\t\t// Support: IE10\n\t\t\t// IE10 wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping\n\t\t\tthis.menu.width( \"\" ).outerWidth() + 1\n\t\t) );\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = this._super();\n\n\t\toptions.disabled = this.element.prop( \"disabled\" );\n\n\t\treturn options;\n\t},\n\n\t_parseOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tdata = [];\n\t\toptions.each( function( index, item ) {\n\t\t\tdata.push( that._parseOption( $( item ), index ) );\n\t\t} );\n\t\tthis.items = data;\n\t},\n\n\t_parseOption: function( option, index ) {\n\t\tvar optgroup = option.parent( \"optgroup\" );\n\n\t\treturn {\n\t\t\telement: option,\n\t\t\tindex: index,\n\t\t\tvalue: option.val(),\n\t\t\tlabel: option.text(),\n\t\t\thidden: optgroup.prop( \"hidden\" ) || option.prop( \"hidden\" ),\n\t\t\toptgroup: optgroup.attr( \"label\" ) || \"\",\n\t\t\tdisabled: optgroup.prop( \"disabled\" ) || option.prop( \"disabled\" )\n\t\t};\n\t},\n\n\t_destroy: function() {\n\t\tthis._unbindFormResetHandler();\n\t\tthis.menuWrap.remove();\n\t\tthis.button.remove();\n\t\tthis.element.show();\n\t\tthis.element.removeUniqueId();\n\t\tthis.labels.attr( \"for\", this.ids.element );\n\t}\n} ] );\n\n\n/*!\n * jQuery UI Slider 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Slider\n//>>group: Widgets\n//>>description: Displays a flexible slider with ranges and accessibility via keyboard.\n//>>docs: https://api.jqueryui.com/slider/\n//>>demos: https://jqueryui.com/slider/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/slider.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar widgetsSlider = $.widget( \"ui.slider\", $.ui.mouse, {\n\tversion: \"1.13.3\",\n\twidgetEventPrefix: \"slide\",\n\n\toptions: {\n\t\tanimate: false,\n\t\tclasses: {\n\t\t\t\"ui-slider\": \"ui-corner-all\",\n\t\t\t\"ui-slider-handle\": \"ui-corner-all\",\n\n\t\t\t// Note: ui-widget-header isn't the most fittingly semantic framework class for this\n\t\t\t// element, but worked best visually with a variety of themes\n\t\t\t\"ui-slider-range\": \"ui-corner-all ui-widget-header\"\n\t\t},\n\t\tdistance: 0,\n\t\tmax: 100,\n\t\tmin: 0,\n\t\torientation: \"horizontal\",\n\t\trange: false,\n\t\tstep: 1,\n\t\tvalue: 0,\n\t\tvalues: null,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tslide: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t// Number of pages in a slider\n\t// (how many times can you page up/down to go through the whole range)\n\tnumPages: 5,\n\n\t_create: function() {\n\t\tthis._keySliding = false;\n\t\tthis._mouseSliding = false;\n\t\tthis._animateOff = true;\n\t\tthis._handleIndex = null;\n\t\tthis._detectOrientation();\n\t\tthis._mouseInit();\n\t\tthis._calculateNewMax();\n\n\t\tthis._addClass( \"ui-slider ui-slider-\" + this.orientation,\n\t\t\t\"ui-widget ui-widget-content\" );\n\n\t\tthis._refresh();\n\n\t\tthis._animateOff = false;\n\t},\n\n\t_refresh: function() {\n\t\tthis._createRange();\n\t\tthis._createHandles();\n\t\tthis._setupEvents();\n\t\tthis._refreshValue();\n\t},\n\n\t_createHandles: function() {\n\t\tvar i, handleCount,\n\t\t\toptions = this.options,\n\t\t\texistingHandles = this.element.find( \".ui-slider-handle\" ),\n\t\t\thandle = \"<span tabindex='0'></span>\",\n\t\t\thandles = [];\n\n\t\thandleCount = ( options.values && options.values.length ) || 1;\n\n\t\tif ( existingHandles.length > handleCount ) {\n\t\t\texistingHandles.slice( handleCount ).remove();\n\t\t\texistingHandles = existingHandles.slice( 0, handleCount );\n\t\t}\n\n\t\tfor ( i = existingHandles.length; i < handleCount; i++ ) {\n\t\t\thandles.push( handle );\n\t\t}\n\n\t\tthis.handles = existingHandles.add( $( handles.join( \"\" ) ).appendTo( this.element ) );\n\n\t\tthis._addClass( this.handles, \"ui-slider-handle\", \"ui-state-default\" );\n\n\t\tthis.handle = this.handles.eq( 0 );\n\n\t\tthis.handles.each( function( i ) {\n\t\t\t$( this )\n\t\t\t\t.data( \"ui-slider-handle-index\", i )\n\t\t\t\t.attr( \"tabIndex\", 0 );\n\t\t} );\n\t},\n\n\t_createRange: function() {\n\t\tvar options = this.options;\n\n\t\tif ( options.range ) {\n\t\t\tif ( options.range === true ) {\n\t\t\t\tif ( !options.values ) {\n\t\t\t\t\toptions.values = [ this._valueMin(), this._valueMin() ];\n\t\t\t\t} else if ( options.values.length && options.values.length !== 2 ) {\n\t\t\t\t\toptions.values = [ options.values[ 0 ], options.values[ 0 ] ];\n\t\t\t\t} else if ( Array.isArray( options.values ) ) {\n\t\t\t\t\toptions.values = options.values.slice( 0 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !this.range || !this.range.length ) {\n\t\t\t\tthis.range = $( \"<div>\" )\n\t\t\t\t\t.appendTo( this.element );\n\n\t\t\t\tthis._addClass( this.range, \"ui-slider-range\" );\n\t\t\t} else {\n\t\t\t\tthis._removeClass( this.range, \"ui-slider-range-min ui-slider-range-max\" );\n\n\t\t\t\t// Handle range switching from true to min/max\n\t\t\t\tthis.range.css( {\n\t\t\t\t\t\"left\": \"\",\n\t\t\t\t\t\"bottom\": \"\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( options.range === \"min\" || options.range === \"max\" ) {\n\t\t\t\tthis._addClass( this.range, \"ui-slider-range-\" + options.range );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.range ) {\n\t\t\t\tthis.range.remove();\n\t\t\t}\n\t\t\tthis.range = null;\n\t\t}\n\t},\n\n\t_setupEvents: function() {\n\t\tthis._off( this.handles );\n\t\tthis._on( this.handles, this._handleEvents );\n\t\tthis._hoverable( this.handles );\n\t\tthis._focusable( this.handles );\n\t},\n\n\t_destroy: function() {\n\t\tthis.handles.remove();\n\t\tif ( this.range ) {\n\t\t\tthis.range.remove();\n\t\t}\n\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,\n\t\t\tthat = this,\n\t\t\to = this.options;\n\n\t\tif ( o.disabled ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.elementSize = {\n\t\t\twidth: this.element.outerWidth(),\n\t\t\theight: this.element.outerHeight()\n\t\t};\n\t\tthis.elementOffset = this.element.offset();\n\n\t\tposition = { x: event.pageX, y: event.pageY };\n\t\tnormValue = this._normValueFromMouse( position );\n\t\tdistance = this._valueMax() - this._valueMin() + 1;\n\t\tthis.handles.each( function( i ) {\n\t\t\tvar thisDistance = Math.abs( normValue - that.values( i ) );\n\t\t\tif ( ( distance > thisDistance ) ||\n\t\t\t\t( distance === thisDistance &&\n\t\t\t\t\t( i === that._lastChangedValue || that.values( i ) === o.min ) ) ) {\n\t\t\t\tdistance = thisDistance;\n\t\t\t\tclosestHandle = $( this );\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t} );\n\n\t\tallowed = this._start( event, index );\n\t\tif ( allowed === false ) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._mouseSliding = true;\n\n\t\tthis._handleIndex = index;\n\n\t\tthis._addClass( closestHandle, null, \"ui-state-active\" );\n\t\tclosestHandle.trigger( \"focus\" );\n\n\t\toffset = closestHandle.offset();\n\t\tmouseOverHandle = !$( event.target ).parents().addBack().is( \".ui-slider-handle\" );\n\t\tthis._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {\n\t\t\tleft: event.pageX - offset.left - ( closestHandle.width() / 2 ),\n\t\t\ttop: event.pageY - offset.top -\n\t\t\t\t( closestHandle.height() / 2 ) -\n\t\t\t\t( parseInt( closestHandle.css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( closestHandle.css( \"borderBottomWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( closestHandle.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\n\t\tif ( !this.handles.hasClass( \"ui-state-hover\" ) ) {\n\t\t\tthis._slide( event, index, normValue );\n\t\t}\n\t\tthis._animateOff = true;\n\t\treturn true;\n\t},\n\n\t_mouseStart: function() {\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar position = { x: event.pageX, y: event.pageY },\n\t\t\tnormValue = this._normValueFromMouse( position );\n\n\t\tthis._slide( event, this._handleIndex, normValue );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tthis._removeClass( this.handles, null, \"ui-state-active\" );\n\t\tthis._mouseSliding = false;\n\n\t\tthis._stop( event, this._handleIndex );\n\t\tthis._change( event, this._handleIndex );\n\n\t\tthis._handleIndex = null;\n\t\tthis._clickOffset = null;\n\t\tthis._animateOff = false;\n\n\t\treturn false;\n\t},\n\n\t_detectOrientation: function() {\n\t\tthis.orientation = ( this.options.orientation === \"vertical\" ) ? \"vertical\" : \"horizontal\";\n\t},\n\n\t_normValueFromMouse: function( position ) {\n\t\tvar pixelTotal,\n\t\t\tpixelMouse,\n\t\t\tpercentMouse,\n\t\t\tvalueTotal,\n\t\t\tvalueMouse;\n\n\t\tif ( this.orientation === \"horizontal\" ) {\n\t\t\tpixelTotal = this.elementSize.width;\n\t\t\tpixelMouse = position.x - this.elementOffset.left -\n\t\t\t\t( this._clickOffset ? this._clickOffset.left : 0 );\n\t\t} else {\n\t\t\tpixelTotal = this.elementSize.height;\n\t\t\tpixelMouse = position.y - this.elementOffset.top -\n\t\t\t\t( this._clickOffset ? this._clickOffset.top : 0 );\n\t\t}\n\n\t\tpercentMouse = ( pixelMouse / pixelTotal );\n\t\tif ( percentMouse > 1 ) {\n\t\t\tpercentMouse = 1;\n\t\t}\n\t\tif ( percentMouse < 0 ) {\n\t\t\tpercentMouse = 0;\n\t\t}\n\t\tif ( this.orientation === \"vertical\" ) {\n\t\t\tpercentMouse = 1 - percentMouse;\n\t\t}\n\n\t\tvalueTotal = this._valueMax() - this._valueMin();\n\t\tvalueMouse = this._valueMin() + percentMouse * valueTotal;\n\n\t\treturn this._trimAlignValue( valueMouse );\n\t},\n\n\t_uiHash: function( index, value, values ) {\n\t\tvar uiHash = {\n\t\t\thandle: this.handles[ index ],\n\t\t\thandleIndex: index,\n\t\t\tvalue: value !== undefined ? value : this.value()\n\t\t};\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tuiHash.value = value !== undefined ? value : this.values( index );\n\t\t\tuiHash.values = values || this.values();\n\t\t}\n\n\t\treturn uiHash;\n\t},\n\n\t_hasMultipleValues: function() {\n\t\treturn this.options.values && this.options.values.length;\n\t},\n\n\t_start: function( event, index ) {\n\t\treturn this._trigger( \"start\", event, this._uiHash( index ) );\n\t},\n\n\t_slide: function( event, index, newVal ) {\n\t\tvar allowed, otherVal,\n\t\t\tcurrentValue = this.value(),\n\t\t\tnewValues = this.values();\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\totherVal = this.values( index ? 0 : 1 );\n\t\t\tcurrentValue = this.values( index );\n\n\t\t\tif ( this.options.values.length === 2 && this.options.range === true ) {\n\t\t\t\tnewVal =  index === 0 ? Math.min( otherVal, newVal ) : Math.max( otherVal, newVal );\n\t\t\t}\n\n\t\t\tnewValues[ index ] = newVal;\n\t\t}\n\n\t\tif ( newVal === currentValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tallowed = this._trigger( \"slide\", event, this._uiHash( index, newVal, newValues ) );\n\n\t\t// A slide can be canceled by returning false from the slide callback\n\t\tif ( allowed === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tthis.values( index, newVal );\n\t\t} else {\n\t\t\tthis.value( newVal );\n\t\t}\n\t},\n\n\t_stop: function( event, index ) {\n\t\tthis._trigger( \"stop\", event, this._uiHash( index ) );\n\t},\n\n\t_change: function( event, index ) {\n\t\tif ( !this._keySliding && !this._mouseSliding ) {\n\n\t\t\t//store the last changed value index for reference when handles overlap\n\t\t\tthis._lastChangedValue = index;\n\t\t\tthis._trigger( \"change\", event, this._uiHash( index ) );\n\t\t}\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( arguments.length ) {\n\t\t\tthis.options.value = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, 0 );\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._value();\n\t},\n\n\tvalues: function( index, newValue ) {\n\t\tvar vals,\n\t\t\tnewValues,\n\t\t\ti;\n\n\t\tif ( arguments.length > 1 ) {\n\t\t\tthis.options.values[ index ] = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, index );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( arguments.length ) {\n\t\t\tif ( Array.isArray( arguments[ 0 ] ) ) {\n\t\t\t\tvals = this.options.values;\n\t\t\t\tnewValues = arguments[ 0 ];\n\t\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\t\tvals[ i ] = this._trimAlignValue( newValues[ i ] );\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._refreshValue();\n\t\t\t} else {\n\t\t\t\tif ( this._hasMultipleValues() ) {\n\t\t\t\t\treturn this._values( index );\n\t\t\t\t} else {\n\t\t\t\t\treturn this.value();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn this._values();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar i,\n\t\t\tvalsLength = 0;\n\n\t\tif ( key === \"range\" && this.options.range === true ) {\n\t\t\tif ( value === \"min\" ) {\n\t\t\t\tthis.options.value = this._values( 0 );\n\t\t\t\tthis.options.values = null;\n\t\t\t} else if ( value === \"max\" ) {\n\t\t\t\tthis.options.value = this._values( this.options.values.length - 1 );\n\t\t\t\tthis.options.values = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( Array.isArray( this.options.values ) ) {\n\t\t\tvalsLength = this.options.values.length;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\t\tcase \"orientation\":\n\t\t\t\tthis._detectOrientation();\n\t\t\t\tthis._removeClass( \"ui-slider-horizontal ui-slider-vertical\" )\n\t\t\t\t\t._addClass( \"ui-slider-\" + this.orientation );\n\t\t\t\tthis._refreshValue();\n\t\t\t\tif ( this.options.range ) {\n\t\t\t\t\tthis._refreshRange( value );\n\t\t\t\t}\n\n\t\t\t\t// Reset positioning from previous orientation\n\t\t\t\tthis.handles.css( value === \"horizontal\" ? \"bottom\" : \"left\", \"\" );\n\t\t\t\tbreak;\n\t\t\tcase \"value\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._change( null, 0 );\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"values\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\n\t\t\t\t// Start from the last handle to prevent unreachable handles (#9046)\n\t\t\t\tfor ( i = valsLength - 1; i >= 0; i-- ) {\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"step\":\n\t\t\tcase \"min\":\n\t\t\tcase \"max\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._calculateNewMax();\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"range\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refresh();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\t//internal value getter\n\t// _value() returns value trimmed by min and max, aligned by step\n\t_value: function() {\n\t\tvar val = this.options.value;\n\t\tval = this._trimAlignValue( val );\n\n\t\treturn val;\n\t},\n\n\t//internal values getter\n\t// _values() returns array of values trimmed by min and max, aligned by step\n\t// _values( index ) returns single value trimmed by min and max, aligned by step\n\t_values: function( index ) {\n\t\tvar val,\n\t\t\tvals,\n\t\t\ti;\n\n\t\tif ( arguments.length ) {\n\t\t\tval = this.options.values[ index ];\n\t\t\tval = this._trimAlignValue( val );\n\n\t\t\treturn val;\n\t\t} else if ( this._hasMultipleValues() ) {\n\n\t\t\t// .slice() creates a copy of the array\n\t\t\t// this copy gets trimmed by min and max and then returned\n\t\t\tvals = this.options.values.slice();\n\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\tvals[ i ] = this._trimAlignValue( vals[ i ] );\n\t\t\t}\n\n\t\t\treturn vals;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t},\n\n\t// Returns the step-aligned value that val is closest to, between (inclusive) min and max\n\t_trimAlignValue: function( val ) {\n\t\tif ( val <= this._valueMin() ) {\n\t\t\treturn this._valueMin();\n\t\t}\n\t\tif ( val >= this._valueMax() ) {\n\t\t\treturn this._valueMax();\n\t\t}\n\t\tvar step = ( this.options.step > 0 ) ? this.options.step : 1,\n\t\t\tvalModStep = ( val - this._valueMin() ) % step,\n\t\t\talignValue = val - valModStep;\n\n\t\tif ( Math.abs( valModStep ) * 2 >= step ) {\n\t\t\talignValue += ( valModStep > 0 ) ? step : ( -step );\n\t\t}\n\n\t\t// Since JavaScript has problems with large floats, round\n\t\t// the final value to 5 digits after the decimal point (see #4124)\n\t\treturn parseFloat( alignValue.toFixed( 5 ) );\n\t},\n\n\t_calculateNewMax: function() {\n\t\tvar max = this.options.max,\n\t\t\tmin = this._valueMin(),\n\t\t\tstep = this.options.step,\n\t\t\taboveMin = Math.round( ( max - min ) / step ) * step;\n\t\tmax = aboveMin + min;\n\t\tif ( max > this.options.max ) {\n\n\t\t\t//If max is not divisible by step, rounding off may increase its value\n\t\t\tmax -= step;\n\t\t}\n\t\tthis.max = parseFloat( max.toFixed( this._precision() ) );\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_valueMin: function() {\n\t\treturn this.options.min;\n\t},\n\n\t_valueMax: function() {\n\t\treturn this.max;\n\t},\n\n\t_refreshRange: function( orientation ) {\n\t\tif ( orientation === \"vertical\" ) {\n\t\t\tthis.range.css( { \"width\": \"\", \"left\": \"\" } );\n\t\t}\n\t\tif ( orientation === \"horizontal\" ) {\n\t\t\tthis.range.css( { \"height\": \"\", \"bottom\": \"\" } );\n\t\t}\n\t},\n\n\t_refreshValue: function() {\n\t\tvar lastValPercent, valPercent, value, valueMin, valueMax,\n\t\t\toRange = this.options.range,\n\t\t\to = this.options,\n\t\t\tthat = this,\n\t\t\tanimate = ( !this._animateOff ) ? o.animate : false,\n\t\t\t_set = {};\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tthis.handles.each( function( i ) {\n\t\t\t\tvalPercent = ( that.values( i ) - that._valueMin() ) / ( that._valueMax() -\n\t\t\t\t\tthat._valueMin() ) * 100;\n\t\t\t\t_set[ that.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\t\t$( this ).stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\t\t\t\tif ( that.options.range === true ) {\n\t\t\t\t\tif ( that.orientation === \"horizontal\" ) {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\tleft: valPercent + \"%\"\n\t\t\t\t\t\t\t}, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\twidth: ( valPercent - lastValPercent ) + \"%\"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tqueue: false,\n\t\t\t\t\t\t\t\tduration: o.animate\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\tbottom: ( valPercent ) + \"%\"\n\t\t\t\t\t\t\t}, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\theight: ( valPercent - lastValPercent ) + \"%\"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tqueue: false,\n\t\t\t\t\t\t\t\tduration: o.animate\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastValPercent = valPercent;\n\t\t\t} );\n\t\t} else {\n\t\t\tvalue = this.value();\n\t\t\tvalueMin = this._valueMin();\n\t\t\tvalueMax = this._valueMax();\n\t\t\tvalPercent = ( valueMax !== valueMin ) ?\n\t\t\t\t\t( value - valueMin ) / ( valueMax - valueMin ) * 100 :\n\t\t\t\t\t0;\n\t\t\t_set[ this.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\tthis.handle.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\n\t\t\tif ( oRange === \"min\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\twidth: valPercent + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\twidth: ( 100 - valPercent ) + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"min\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\theight: valPercent + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\theight: ( 100 - valPercent ) + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleEvents: {\n\t\tkeydown: function( event ) {\n\t\t\tvar allowed, curVal, newVal, step,\n\t\t\t\tindex = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif ( !this._keySliding ) {\n\t\t\t\t\t\tthis._keySliding = true;\n\t\t\t\t\t\tthis._addClass( $( event.target ), null, \"ui-state-active\" );\n\t\t\t\t\t\tallowed = this._start( event, index );\n\t\t\t\t\t\tif ( allowed === false ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tstep = this.options.step;\n\t\t\tif ( this._hasMultipleValues() ) {\n\t\t\t\tcurVal = newVal = this.values( index );\n\t\t\t} else {\n\t\t\t\tcurVal = newVal = this.value();\n\t\t\t}\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\t\tnewVal = this._valueMin();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\t\tnewVal = this._valueMax();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal - ( ( this._valueMax() - this._valueMin() ) / this.numPages ) );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\t\tif ( curVal === this._valueMax() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal + step );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tif ( curVal === this._valueMin() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal - step );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis._slide( event, index, newVal );\n\t\t},\n\t\tkeyup: function( event ) {\n\t\t\tvar index = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tif ( this._keySliding ) {\n\t\t\t\tthis._keySliding = false;\n\t\t\t\tthis._stop( event, index );\n\t\t\t\tthis._change( event, index );\n\t\t\t\tthis._removeClass( $( event.target ), null, \"ui-state-active\" );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n\n/*!\n * jQuery UI Sortable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Sortable\n//>>group: Interactions\n//>>description: Enables items in a list to be sorted using the mouse.\n//>>docs: https://api.jqueryui.com/sortable/\n//>>demos: https://jqueryui.com/sortable/\n//>>css.structure: ../../themes/base/sortable.css\n\n\nvar widgetsSortable = $.widget( \"ui.sortable\", $.ui.mouse, {\n\tversion: \"1.13.3\",\n\twidgetEventPrefix: \"sort\",\n\tready: false,\n\toptions: {\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectWith: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tdropOnEmpty: true,\n\t\tforcePlaceholderSize: false,\n\t\tforceHelperSize: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\titems: \"> *\",\n\t\topacity: false,\n\t\tplaceholder: false,\n\t\trevert: false,\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\t\tzIndex: 1000,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeStop: null,\n\t\tchange: null,\n\t\tdeactivate: null,\n\t\tout: null,\n\t\tover: null,\n\t\treceive: null,\n\t\tremove: null,\n\t\tsort: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tupdate: null\n\t},\n\n\t_isOverAxis: function( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t},\n\n\t_isFloating: function( item ) {\n\t\treturn ( /left|right/ ).test( item.css( \"float\" ) ) ||\n\t\t\t( /inline|table-cell/ ).test( item.css( \"display\" ) );\n\t},\n\n\t_create: function() {\n\t\tthis.containerCache = {};\n\t\tthis._addClass( \"ui-sortable\" );\n\n\t\t//Get the items\n\t\tthis.refresh();\n\n\t\t//Let's determine the parent's offset\n\t\tthis.offset = this.element.offset();\n\n\t\t//Initialize mouse events for interaction\n\t\tthis._mouseInit();\n\n\t\tthis._setHandleClassName();\n\n\t\t//We're ready to go\n\t\tthis.ready = true;\n\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_setHandleClassName: function() {\n\t\tvar that = this;\n\t\tthis._removeClass( this.element.find( \".ui-sortable-handle\" ), \"ui-sortable-handle\" );\n\t\t$.each( this.items, function() {\n\t\t\tthat._addClass(\n\t\t\t\tthis.instance.options.handle ?\n\t\t\t\t\tthis.item.find( this.instance.options.handle ) :\n\t\t\t\t\tthis.item,\n\t\t\t\t\"ui-sortable-handle\"\n\t\t\t);\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tthis._mouseDestroy();\n\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\tthis.items[ i ].item.removeData( this.widgetName + \"-item\" );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function( event, overrideHandle ) {\n\t\tvar currentItem = null,\n\t\t\tvalidHandle = false,\n\t\t\tthat = this;\n\n\t\tif ( this.reverting ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.options.disabled || this.options.type === \"static\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//We have to refresh the items data once first\n\t\tthis._refreshItems( event );\n\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\n\t\t$( event.target ).parents().each( function() {\n\t\t\tif ( $.data( this, that.widgetName + \"-item\" ) === that ) {\n\t\t\t\tcurrentItem = $( this );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t\tif ( $.data( event.target, that.widgetName + \"-item\" ) === that ) {\n\t\t\tcurrentItem = $( event.target );\n\t\t}\n\n\t\tif ( !currentItem ) {\n\t\t\treturn false;\n\t\t}\n\t\tif ( this.options.handle && !overrideHandle ) {\n\t\t\t$( this.options.handle, currentItem ).find( \"*\" ).addBack().each( function() {\n\t\t\t\tif ( this === event.target ) {\n\t\t\t\t\tvalidHandle = true;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !validHandle ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.currentItem = currentItem;\n\t\tthis._removeCurrentsFromItems();\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function( event, overrideHandle, noActivation ) {\n\n\t\tvar i, body,\n\t\t\to = this.options;\n\n\t\tthis.currentContainer = this;\n\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to\n\t\t// mouseCapture\n\t\tthis.refreshPositions();\n\n\t\t//Prepare the dragged items parent\n\t\tthis.appendTo = $( o.appendTo !== \"parent\" ?\n\t\t\t\to.appendTo :\n\t\t\t\tthis.currentItem.parent() );\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.offset = this.currentItem.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend( this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\n\t\t\t// This is a relative to absolute position minus the actual position calculation -\n\t\t\t// only used for relative positioned helper\n\t\t\trelative: this._getRelativeOffset()\n\t\t} );\n\n\t\t// After we get the helper offset, but before we get the parent offset we can\n\t\t// change the helper's position to absolute\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\n\t\tthis.helper.css( \"position\", \"absolute\" );\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\tif ( o.cursorAt ) {\n\t\t\tthis._adjustOffsetFromHelper( o.cursorAt );\n\t\t}\n\n\t\t//Cache the former DOM position\n\t\tthis.domPosition = {\n\t\t\tprev: this.currentItem.prev()[ 0 ],\n\t\t\tparent: this.currentItem.parent()[ 0 ]\n\t\t};\n\n\t\t// If the helper is not the original, hide the original so it's not playing any role during\n\t\t// the drag, won't cause anything bad this way\n\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\tthis.currentItem.hide();\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthis._createPlaceholder();\n\n\t\t//Get the next scrolling parent\n\t\tthis.scrollParent = this.placeholder.scrollParent();\n\n\t\t$.extend( this.offset, {\n\t\t\tparent: this._getParentOffset()\n\t\t} );\n\n\t\t//Set a containment if given in the options\n\t\tif ( o.containment ) {\n\t\t\tthis._setContainment();\n\t\t}\n\n\t\tif ( o.cursor && o.cursor !== \"auto\" ) { // cursor option\n\t\t\tbody = this.document.find( \"body\" );\n\n\t\t\t// Support: IE\n\t\t\tthis.storedCursor = body.css( \"cursor\" );\n\t\t\tbody.css( \"cursor\", o.cursor );\n\n\t\t\tthis.storedStylesheet =\n\t\t\t\t$( \"<style>*{ cursor: \" + o.cursor + \" !important; }</style>\" ).appendTo( body );\n\t\t}\n\n\t\t// We need to make sure to grab the zIndex before setting the\n\t\t// opacity, because setting the opacity to anything lower than 1\n\t\t// causes the zIndex to change from \"auto\" to 0.\n\t\tif ( o.zIndex ) { // zIndex option\n\t\t\tif ( this.helper.css( \"zIndex\" ) ) {\n\t\t\t\tthis._storedZIndex = this.helper.css( \"zIndex\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"zIndex\", o.zIndex );\n\t\t}\n\n\t\tif ( o.opacity ) { // opacity option\n\t\t\tif ( this.helper.css( \"opacity\" ) ) {\n\t\t\t\tthis._storedOpacity = this.helper.css( \"opacity\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"opacity\", o.opacity );\n\t\t}\n\n\t\t//Prepare scrolling\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"start\", event, this._uiHash() );\n\n\t\t//Recache the helper size\n\t\tif ( !this._preserveHelperProportions ) {\n\t\t\tthis._cacheHelperProportions();\n\t\t}\n\n\t\t//Post \"activate\" events to possible containers\n\t\tif ( !noActivation ) {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"activate\", event, this._uiHash( this ) );\n\t\t\t}\n\t\t}\n\n\t\t//Prepare possible droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\tthis._addClass( this.helper, \"ui-sortable-helper\" );\n\n\t\t//Move the helper, if needed\n\t\tif ( !this.helper.parent().is( this.appendTo ) ) {\n\t\t\tthis.helper.detach().appendTo( this.appendTo );\n\n\t\t\t//Update position\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Generate the original position\n\t\tthis.position = this.originalPosition = this._generatePosition( event );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\t\tthis.lastPositionAbs = this.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\tthis._mouseDrag( event );\n\n\t\treturn true;\n\n\t},\n\n\t_scroll: function( event ) {\n\t\tvar o = this.options,\n\t\t\tscrolled = false;\n\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\n\t\t\tif ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -\n\t\t\t\t\tevent.pageY < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;\n\t\t\t} else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;\n\t\t\t}\n\n\t\t\tif ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -\n\t\t\t\t\tevent.pageX < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;\n\t\t\t} else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );\n\t\t\t} else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <\n\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );\n\t\t\t}\n\n\t\t\tif ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\tthis.document.scrollLeft() - o.scrollSpeed\n\t\t\t\t);\n\t\t\t} else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <\n\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\tthis.document.scrollLeft() + o.scrollSpeed\n\t\t\t\t);\n\t\t\t}\n\n\t\t}\n\n\t\treturn scrolled;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar i, item, itemElement, intersection,\n\t\t\to = this.options;\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Set the helper position\n\t\tif ( !this.options.axis || this.options.axis !== \"y\" ) {\n\t\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( !this.options.axis || this.options.axis !== \"x\" ) {\n\t\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\t\t}\n\n\t\t//Do scrolling\n\t\tif ( o.scroll ) {\n\t\t\tif ( this._scroll( event ) !== false ) {\n\n\t\t\t\t//Update item positions used in position checks\n\t\t\t\tthis._refreshItemPositions( true );\n\n\t\t\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.dragDirection = {\n\t\t\tvertical: this._getDragVerticalDirection(),\n\t\t\thorizontal: this._getDragHorizontalDirection()\n\t\t};\n\n\t\t//Rearrange\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\n\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\titem = this.items[ i ];\n\t\t\titemElement = item.item[ 0 ];\n\t\t\tintersection = this._intersectsWithPointer( item );\n\t\t\tif ( !intersection ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t// items from other containers. This works because when moving\n\t\t\t// an item from one container to another the\n\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t//\n\t\t\t// Without this, moving items in \"sub-sortables\" can cause\n\t\t\t// the placeholder to jitter between the outer and inner container.\n\t\t\tif ( item.instance !== this.currentContainer ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Cannot intersect with itself\n\t\t\t// no useless actions that have been done before\n\t\t\t// no action if the item moved is the parent of the item checked\n\t\t\tif ( itemElement !== this.currentItem[ 0 ] &&\n\t\t\t\tthis.placeholder[ intersection === 1 ?\n\t\t\t\t\"next\" : \"prev\" ]()[ 0 ] !== itemElement &&\n\t\t\t\t!$.contains( this.placeholder[ 0 ], itemElement ) &&\n\t\t\t\t( this.options.type === \"semi-dynamic\" ?\n\t\t\t\t\t!$.contains( this.element[ 0 ], itemElement ) :\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tthis.direction = intersection === 1 ? \"down\" : \"up\";\n\n\t\t\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\t\t\t\tthis._intersectsWithSides( item ) ) {\n\t\t\t\t\tthis._rearrange( event, item );\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tthis._contactContainers( event );\n\n\t\t//Interconnect with droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"sort\", event, this._uiHash() );\n\n\t\tthis.lastPositionAbs = this.positionAbs;\n\t\treturn false;\n\n\t},\n\n\t_mouseStop: function( event, noPropagation ) {\n\n\t\tif ( !event ) {\n\t\t\treturn;\n\t\t}\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\tif ( this.options.revert ) {\n\t\t\tvar that = this,\n\t\t\t\tcur = this.placeholder.offset(),\n\t\t\t\taxis = this.options.axis,\n\t\t\t\tanimation = {};\n\n\t\t\tif ( !axis || axis === \"x\" ) {\n\t\t\t\tanimation.left = cur.left - this.offset.parent.left - this.margins.left +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollLeft\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tif ( !axis || axis === \"y\" ) {\n\t\t\t\tanimation.top = cur.top - this.offset.parent.top - this.margins.top +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollTop\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tthis.reverting = true;\n\t\t\t$( this.helper ).animate(\n\t\t\t\tanimation,\n\t\t\t\tparseInt( this.options.revert, 10 ) || 500,\n\t\t\t\tfunction() {\n\t\t\t\t\tthat._clear( event );\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tthis._clear( event, noPropagation );\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.dragging ) {\n\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: null } ) );\n\n\t\t\tif ( this.options.helper === \"original\" ) {\n\t\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t\t} else {\n\t\t\t\tthis.currentItem.show();\n\t\t\t}\n\n\t\t\t//Post deactivating events to containers\n\t\t\tfor ( var i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"deactivate\", null, this._uiHash( this ) );\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", null, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.placeholder ) {\n\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t\t// it unbinds ALL events from the original node!\n\t\t\tif ( this.placeholder[ 0 ].parentNode ) {\n\t\t\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\t\t\t}\n\t\t\tif ( this.options.helper !== \"original\" && this.helper &&\n\t\t\t\t\tthis.helper[ 0 ].parentNode ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\n\t\t\t$.extend( this, {\n\t\t\t\thelper: null,\n\t\t\t\tdragging: false,\n\t\t\t\treverting: false,\n\t\t\t\t_noFinalSort: null\n\t\t\t} );\n\n\t\t\tif ( this.domPosition.prev ) {\n\t\t\t\t$( this.domPosition.prev ).after( this.currentItem );\n\t\t\t} else {\n\t\t\t\t$( this.domPosition.parent ).prepend( this.currentItem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tserialize: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tstr = [];\n\t\to = o || {};\n\n\t\t$( items ).each( function() {\n\t\t\tvar res = ( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" )\n\t\t\t\t.match( o.expression || ( /(.+)[\\-=_](.+)/ ) );\n\t\t\tif ( res ) {\n\t\t\t\tstr.push(\n\t\t\t\t\t( o.key || res[ 1 ] + \"[]\" ) +\n\t\t\t\t\t\"=\" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );\n\t\t\t}\n\t\t} );\n\n\t\tif ( !str.length && o.key ) {\n\t\t\tstr.push( o.key + \"=\" );\n\t\t}\n\n\t\treturn str.join( \"&\" );\n\n\t},\n\n\ttoArray: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tret = [];\n\n\t\to = o || {};\n\n\t\titems.each( function() {\n\t\t\tret.push( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" );\n\t\t} );\n\t\treturn ret;\n\n\t},\n\n\t/* Be careful with the following core functions */\n\t_intersectsWith: function( item ) {\n\n\t\tvar x1 = this.positionAbs.left,\n\t\t\tx2 = x1 + this.helperProportions.width,\n\t\t\ty1 = this.positionAbs.top,\n\t\t\ty2 = y1 + this.helperProportions.height,\n\t\t\tl = item.left,\n\t\t\tr = l + item.width,\n\t\t\tt = item.top,\n\t\t\tb = t + item.height,\n\t\t\tdyClick = this.offset.click.top,\n\t\t\tdxClick = this.offset.click.left,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) || ( ( y1 + dyClick ) > t &&\n\t\t\t\t( y1 + dyClick ) < b ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) || ( ( x1 + dxClick ) > l &&\n\t\t\t\t( x1 + dxClick ) < r ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\tthis.options.forcePointerForContainers ||\n\t\t\t( this.options.tolerance !== \"pointer\" &&\n\t\t\t\tthis.helperProportions[ this.floating ? \"width\" : \"height\" ] >\n\t\t\t\titem[ this.floating ? \"width\" : \"height\" ] )\n\t\t) {\n\t\t\treturn isOverElement;\n\t\t} else {\n\n\t\t\treturn ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( this.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( this.helperProportions.height / 2 ) < b ); // Top Half\n\n\t\t}\n\t},\n\n\t_intersectsWithPointer: function( item ) {\n\t\tvar verticalDirection, horizontalDirection,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.top + this.offset.click.top, item.top, item.height ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.left + this.offset.click.left, item.left, item.width ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( !isOverElement ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tverticalDirection = this.dragDirection.vertical;\n\t\thorizontalDirection = this.dragDirection.horizontal;\n\n\t\treturn this.floating ?\n\t\t\t( ( horizontalDirection === \"right\" || verticalDirection === \"down\" ) ? 2 : 1 ) :\n\t\t\t( verticalDirection && ( verticalDirection === \"down\" ? 2 : 1 ) );\n\n\t},\n\n\t_intersectsWithSides: function( item ) {\n\n\t\tvar isOverBottomHalf = this._isOverAxis( this.positionAbs.top +\n\t\t\t\tthis.offset.click.top, item.top + ( item.height / 2 ), item.height ),\n\t\t\tisOverRightHalf = this._isOverAxis( this.positionAbs.left +\n\t\t\t\tthis.offset.click.left, item.left + ( item.width / 2 ), item.width ),\n\t\t\tverticalDirection = this.dragDirection.vertical,\n\t\t\thorizontalDirection = this.dragDirection.horizontal;\n\n\t\tif ( this.floating && horizontalDirection ) {\n\t\t\treturn ( ( horizontalDirection === \"right\" && isOverRightHalf ) ||\n\t\t\t\t( horizontalDirection === \"left\" && !isOverRightHalf ) );\n\t\t} else {\n\t\t\treturn verticalDirection && ( ( verticalDirection === \"down\" && isOverBottomHalf ) ||\n\t\t\t\t( verticalDirection === \"up\" && !isOverBottomHalf ) );\n\t\t}\n\n\t},\n\n\t_getDragVerticalDirection: function() {\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\n\t\treturn delta !== 0 && ( delta > 0 ? \"down\" : \"up\" );\n\t},\n\n\t_getDragHorizontalDirection: function() {\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\n\t\treturn delta !== 0 && ( delta > 0 ? \"right\" : \"left\" );\n\t},\n\n\trefresh: function( event ) {\n\t\tthis._refreshItems( event );\n\t\tthis._setHandleClassName();\n\t\tthis.refreshPositions();\n\t\treturn this;\n\t},\n\n\t_connectWith: function() {\n\t\tvar options = this.options;\n\t\treturn options.connectWith.constructor === String ?\n\t\t\t[ options.connectWith ] :\n\t\t\toptions.connectWith;\n\t},\n\n\t_getItemsAsjQuery: function( connected ) {\n\n\t\tvar i, j, cur, inst,\n\t\t\titems = [],\n\t\t\tqueries = [],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif ( connectWith && connected ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ typeof inst.options.items === \"function\" ?\n\t\t\t\t\t\t\tinst.options.items.call( inst.element ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-placeholder\" ), inst ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tqueries.push( [ typeof this.options.items === \"function\" ?\n\t\t\tthis.options.items\n\t\t\t\t.call( this.element, null, { options: this.options, item: this.currentItem } ) :\n\t\t\t$( this.options.items, this.element )\n\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t.not( \".ui-sortable-placeholder\" ), this ] );\n\n\t\tfunction addItems() {\n\t\t\titems.push( this );\n\t\t}\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\tqueries[ i ][ 0 ].each( addItems );\n\t\t}\n\n\t\treturn $( items );\n\n\t},\n\n\t_removeCurrentsFromItems: function() {\n\n\t\tvar list = this.currentItem.find( \":data(\" + this.widgetName + \"-item)\" );\n\n\t\tthis.items = $.grep( this.items, function( item ) {\n\t\t\tfor ( var j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === item.item[ 0 ] ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t},\n\n\t_refreshItems: function( event ) {\n\n\t\tthis.items = [];\n\t\tthis.containers = [ this ];\n\n\t\tvar i, j, cur, inst, targetData, _queries, item, queriesLength,\n\t\t\titems = this.items,\n\t\t\tqueries = [ [ typeof this.options.items === \"function\" ?\n\t\t\t\tthis.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t$( this.options.items, this.element ), this ] ],\n\t\t\tconnectWith = this._connectWith();\n\n\t\t//Shouldn't be run the first time through due to massive slow-down\n\t\tif ( connectWith && this.ready ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ typeof inst.options.items === \"function\" ?\n\t\t\t\t\t\t\tinst.options.items\n\t\t\t\t\t\t\t\t.call( inst.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element ), inst ] );\n\t\t\t\t\t\tthis.containers.push( inst );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\ttargetData = queries[ i ][ 1 ];\n\t\t\t_queries = queries[ i ][ 0 ];\n\n\t\t\tfor ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {\n\t\t\t\titem = $( _queries[ j ] );\n\n\t\t\t\t// Data for target checking (mouse manager)\n\t\t\t\titem.data( this.widgetName + \"-item\", targetData );\n\n\t\t\t\titems.push( {\n\t\t\t\t\titem: item,\n\t\t\t\t\tinstance: targetData,\n\t\t\t\t\twidth: 0, height: 0,\n\t\t\t\t\tleft: 0, top: 0\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t_refreshItemPositions: function( fast ) {\n\t\tvar i, item, t, p;\n\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\titem = this.items[ i ];\n\n\t\t\t//We ignore calculating positions of all connected containers when we're not over them\n\t\t\tif ( this.currentContainer && item.instance !== this.currentContainer &&\n\t\t\t\t\titem.item[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tt = this.options.toleranceElement ?\n\t\t\t\t$( this.options.toleranceElement, item.item ) :\n\t\t\t\titem.item;\n\n\t\t\tif ( !fast ) {\n\t\t\t\titem.width = t.outerWidth();\n\t\t\t\titem.height = t.outerHeight();\n\t\t\t}\n\n\t\t\tp = t.offset();\n\t\t\titem.left = p.left;\n\t\t\titem.top = p.top;\n\t\t}\n\t},\n\n\trefreshPositions: function( fast ) {\n\n\t\t// Determine whether items are being displayed horizontally\n\t\tthis.floating = this.items.length ?\n\t\t\tthis.options.axis === \"x\" || this._isFloating( this.items[ 0 ].item ) :\n\t\t\tfalse;\n\n\t\t// This has to be redone because due to the item being moved out/into the offsetParent,\n\t\t// the offsetParent's position will change\n\t\tif ( this.offsetParent && this.helper ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\tthis._refreshItemPositions( fast );\n\n\t\tvar i, p;\n\n\t\tif ( this.options.custom && this.options.custom.refreshContainers ) {\n\t\t\tthis.options.custom.refreshContainers.call( this );\n\t\t} else {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tp = this.containers[ i ].element.offset();\n\t\t\t\tthis.containers[ i ].containerCache.left = p.left;\n\t\t\t\tthis.containers[ i ].containerCache.top = p.top;\n\t\t\t\tthis.containers[ i ].containerCache.width =\n\t\t\t\t\tthis.containers[ i ].element.outerWidth();\n\t\t\t\tthis.containers[ i ].containerCache.height =\n\t\t\t\t\tthis.containers[ i ].element.outerHeight();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_createPlaceholder: function( that ) {\n\t\tthat = that || this;\n\t\tvar className, nodeName,\n\t\t\to = that.options;\n\n\t\tif ( !o.placeholder || o.placeholder.constructor === String ) {\n\t\t\tclassName = o.placeholder;\n\t\t\tnodeName = that.currentItem[ 0 ].nodeName.toLowerCase();\n\t\t\to.placeholder = {\n\t\t\t\telement: function() {\n\n\t\t\t\t\tvar element = $( \"<\" + nodeName + \">\", that.document[ 0 ] );\n\n\t\t\t\t\tthat._addClass( element, \"ui-sortable-placeholder\",\n\t\t\t\t\t\t\tclassName || that.currentItem[ 0 ].className )\n\t\t\t\t\t\t._removeClass( element, \"ui-sortable-helper\" );\n\n\t\t\t\t\tif ( nodeName === \"tbody\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder(\n\t\t\t\t\t\t\tthat.currentItem.find( \"tr\" ).eq( 0 ),\n\t\t\t\t\t\t\t$( \"<tr>\", that.document[ 0 ] ).appendTo( element )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( nodeName === \"tr\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder( that.currentItem, element );\n\t\t\t\t\t} else if ( nodeName === \"img\" ) {\n\t\t\t\t\t\telement.attr( \"src\", that.currentItem.attr( \"src\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !className ) {\n\t\t\t\t\t\telement.css( \"visibility\", \"hidden\" );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\tupdate: function( container, p ) {\n\n\t\t\t\t\t// 1. If a className is set as 'placeholder option, we don't force sizes -\n\t\t\t\t\t// the class is responsible for that\n\t\t\t\t\t// 2. The option 'forcePlaceholderSize can be enabled to force it even if a\n\t\t\t\t\t// class name is specified\n\t\t\t\t\tif ( className && !o.forcePlaceholderSize ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element doesn't have a actual height or width by itself (without\n\t\t\t\t\t// styles coming from a stylesheet), it receives the inline height and width\n\t\t\t\t\t// from the dragged item. Or, if it's a tbody or tr, it's going to have a height\n\t\t\t\t\t// anyway since we're populating them with <td>s above, but they're unlikely to\n\t\t\t\t\t// be the correct height on their own if the row heights are dynamic, so we'll\n\t\t\t\t\t// always assign the height of the dragged item given forcePlaceholderSize\n\t\t\t\t\t// is true.\n\t\t\t\t\tif ( !p.height() || ( o.forcePlaceholderSize &&\n\t\t\t\t\t\t\t( nodeName === \"tbody\" || nodeName === \"tr\" ) ) ) {\n\t\t\t\t\t\tp.height(\n\t\t\t\t\t\t\tthat.currentItem.innerHeight() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingTop\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingBottom\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t\tif ( !p.width() ) {\n\t\t\t\t\t\tp.width(\n\t\t\t\t\t\t\tthat.currentItem.innerWidth() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingLeft\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingRight\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthat.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );\n\n\t\t//Append it after the actual current item\n\t\tthat.currentItem.after( that.placeholder );\n\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\n\t\to.placeholder.update( that, that.placeholder );\n\n\t},\n\n\t_createTrPlaceholder: function( sourceTr, targetTr ) {\n\t\tvar that = this;\n\n\t\tsourceTr.children().each( function() {\n\t\t\t$( \"<td>&#160;</td>\", that.document[ 0 ] )\n\t\t\t\t.attr( \"colspan\", $( this ).attr( \"colspan\" ) || 1 )\n\t\t\t\t.appendTo( targetTr );\n\t\t} );\n\t},\n\n\t_contactContainers: function( event ) {\n\t\tvar i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,\n\t\t\tfloating, axis,\n\t\t\tinnermostContainer = null,\n\t\t\tinnermostIndex = null;\n\n\t\t// Get innermost container that intersects with item\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\n\t\t\t// Never consider a container that's located within the item itself\n\t\t\tif ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( this._intersectsWith( this.containers[ i ].containerCache ) ) {\n\n\t\t\t\t// If we've already found a container and it's more \"inner\" than this, then continue\n\t\t\t\tif ( innermostContainer &&\n\t\t\t\t\t\t$.contains(\n\t\t\t\t\t\t\tthis.containers[ i ].element[ 0 ],\n\t\t\t\t\t\t\tinnermostContainer.element[ 0 ] ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tinnermostContainer = this.containers[ i ];\n\t\t\t\tinnermostIndex = i;\n\n\t\t\t} else {\n\n\t\t\t\t// container doesn't intersect. trigger \"out\" event if necessary\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", event, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t// If no intersecting containers found, return\n\t\tif ( !innermostContainer ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Move the item into the container if it's not there already\n\t\tif ( this.containers.length === 1 ) {\n\t\t\tif ( !this.containers[ innermostIndex ].containerCache.over ) {\n\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\t// When entering a new container, we will find the item with the least distance and\n\t\t\t// append our item near it\n\t\t\tdist = 10000;\n\t\t\titemWithLeastDistance = null;\n\t\t\tfloating = innermostContainer.floating || this._isFloating( this.currentItem );\n\t\t\tposProperty = floating ? \"left\" : \"top\";\n\t\t\tsizeProperty = floating ? \"width\" : \"height\";\n\t\t\taxis = floating ? \"pageX\" : \"pageY\";\n\n\t\t\tfor ( j = this.items.length - 1; j >= 0; j-- ) {\n\t\t\t\tif ( !$.contains(\n\t\t\t\t\t\tthis.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcur = this.items[ j ].item.offset()[ posProperty ];\n\t\t\t\tnearBottom = false;\n\t\t\t\tif ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {\n\t\t\t\t\tnearBottom = true;\n\t\t\t\t}\n\n\t\t\t\tif ( Math.abs( event[ axis ] - cur ) < dist ) {\n\t\t\t\t\tdist = Math.abs( event[ axis ] - cur );\n\t\t\t\t\titemWithLeastDistance = this.items[ j ];\n\t\t\t\t\tthis.direction = nearBottom ? \"up\" : \"down\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Check if dropOnEmpty is enabled\n\t\t\tif ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.currentContainer === this.containers[ innermostIndex ] ) {\n\t\t\t\tif ( !this.currentContainer.containerCache.over ) {\n\t\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash() );\n\t\t\t\t\tthis.currentContainer.containerCache.over = 1;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( itemWithLeastDistance ) {\n\t\t\t\tthis._rearrange( event, itemWithLeastDistance, null, true );\n\t\t\t} else {\n\t\t\t\tthis._rearrange( event, null, this.containers[ innermostIndex ].element, true );\n\t\t\t}\n\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"change\", event, this._uiHash( this ) );\n\t\t\tthis.currentContainer = this.containers[ innermostIndex ];\n\n\t\t\t//Update the placeholder\n\t\t\tthis.options.placeholder.update( this.currentContainer, this.placeholder );\n\n\t\t\t//Update scrollParent\n\t\t\tthis.scrollParent = this.placeholder.scrollParent();\n\n\t\t\t//Update overflowOffset\n\t\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t\t}\n\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t}\n\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelper = typeof o.helper === \"function\" ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ? this.currentItem.clone() : this.currentItem );\n\n\t\t//Add the helper to the DOM if that didn't happen already\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\tthis.appendTo[ 0 ].appendChild( helper[ 0 ] );\n\t\t}\n\n\t\tif ( helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tthis._storedCSS = {\n\t\t\t\twidth: this.currentItem[ 0 ].style.width,\n\t\t\t\theight: this.currentItem[ 0 ].style.height,\n\t\t\t\tposition: this.currentItem.css( \"position\" ),\n\t\t\t\ttop: this.currentItem.css( \"top\" ),\n\t\t\t\tleft: this.currentItem.css( \"left\" )\n\t\t\t};\n\t\t}\n\n\t\tif ( !helper[ 0 ].style.width || o.forceHelperSize ) {\n\t\t\thelper.width( this.currentItem.width() );\n\t\t}\n\t\tif ( !helper[ 0 ].style.height || o.forceHelperSize ) {\n\t\t\thelper.height( this.currentItem.height() );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( Array.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\t// This needs to be actually done for all browsers, since pageX/pageY includes this\n\t\t// information with an ugly IE fix\n\t\tif ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||\n\t\t\t\t( this.offsetParent[ 0 ].tagName &&\n\t\t\t\tthis.offsetParent[ 0 ].tagName.toLowerCase() === \"html\" && $.ui.ie ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif ( this.cssPosition === \"relative\" ) {\n\t\t\tvar p = this.currentItem.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.currentItem.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.currentItem.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar ce, co, over,\n\t\t\to = this.options;\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\t\tif ( o.containment === \"document\" || o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\to.containment === \"document\" ?\n\t\t\t\t\tthis.document.width() :\n\t\t\t\t\tthis.window.width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( o.containment === \"document\" ?\n\t\t\t\t\t( this.document.height() || document.body.parentNode.scrollHeight ) :\n\t\t\t\t\tthis.window.height() || this.document[ 0 ].body.parentNode.scrollHeight\n\t\t\t\t) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t\tif ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {\n\t\t\tce = $( o.containment )[ 0 ];\n\t\t\tco = $( o.containment ).offset();\n\t\t\tover = ( $( ce ).css( \"overflow\" ) !== \"hidden\" );\n\n\t\t\tthis.containment = [\n\t\t\t\tco.left + ( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingLeft\" ), 10 ) || 0 ) - this.margins.left,\n\t\t\t\tco.top + ( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingTop\" ), 10 ) || 0 ) - this.margins.top,\n\t\t\t\tco.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\tco.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :\n\t\t\t\t\tscroll.scrollLeft() ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event ) {\n\n\t\tvar top, left,\n\t\t\to = this.options,\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\t// This is another very weird special case that only happens for relative elements:\n\t\t// 1. If the css position is relative\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\n\t\tif ( this.cssPosition === \"relative\" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {\n\t\t\tthis.offset.relative = this._getRelativeOffset();\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif ( this.originalPosition ) { //If we are not dragging yet, we won't check for options\n\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {\n\t\t\t\t\tpageX = this.containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {\n\t\t\t\t\tpageY = this.containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {\n\t\t\t\t\tpageX = this.containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {\n\t\t\t\t\tpageY = this.containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\t\t\t\ttop = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /\n\t\t\t\t\to.grid[ 1 ] ) * o.grid[ 1 ];\n\t\t\t\tpageY = this.containment ?\n\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] &&\n\t\t\t\t\t\ttop - this.offset.click.top <= this.containment[ 3 ] ) ?\n\t\t\t\t\t\t\ttop :\n\t\t\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?\n\t\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :\n\t\t\t\t\t\t\t\ttop;\n\n\t\t\t\tleft = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /\n\t\t\t\t\to.grid[ 0 ] ) * o.grid[ 0 ];\n\t\t\t\tpageX = this.containment ?\n\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] &&\n\t\t\t\t\t\tleft - this.offset.click.left <= this.containment[ 2 ] ) ?\n\t\t\t\t\t\t\tleft :\n\t\t\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?\n\t\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :\n\t\t\t\t\t\t\t\tleft;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() :\n\t\t\t\t\tscrollIsRootNode ? 0 : scroll.scrollLeft() ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_rearrange: function( event, i, a, hardRefresh ) {\n\n\t\tif ( a ) {\n\t\t\ta[ 0 ].appendChild( this.placeholder[ 0 ] );\n\t\t} else {\n\t\t\ti.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],\n\t\t\t\t( this.direction === \"down\" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );\n\t\t}\n\n\t\t//Various things done here to improve the performance:\n\t\t// 1. we create a setTimeout, that calls refreshPositions\n\t\t// 2. on the instance, we have a counter variable, that get's higher after every append\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout,\n\t\t// if it's still the same\n\t\t// 4. this lets only the last addition to the timeout stack through\n\t\tthis.counter = this.counter ? ++this.counter : 1;\n\t\tvar counter = this.counter;\n\n\t\tthis._delay( function() {\n\t\t\tif ( counter === this.counter ) {\n\n\t\t\t\t//Precompute after each DOM insertion, NOT on mousemove\n\t\t\t\tthis.refreshPositions( !hardRefresh );\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_clear: function( event, noPropagation ) {\n\n\t\tthis.reverting = false;\n\n\t\t// We delay all events that have to be triggered to after the point where the placeholder\n\t\t// has been removed and everything else normalized again\n\t\tvar i,\n\t\t\tdelayedTriggers = [];\n\n\t\t// We first have to update the dom position of the actual currentItem\n\t\t// Note: don't do it if the current item is already removed (by a user), or it gets\n\t\t// reappended (see #4088)\n\t\tif ( !this._noFinalSort && this.currentItem.parent().length ) {\n\t\t\tthis.placeholder.before( this.currentItem );\n\t\t}\n\t\tthis._noFinalSort = null;\n\n\t\tif ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tfor ( i in this._storedCSS ) {\n\t\t\t\tif ( this._storedCSS[ i ] === \"auto\" || this._storedCSS[ i ] === \"static\" ) {\n\t\t\t\t\tthis._storedCSS[ i ] = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t} else {\n\t\t\tthis.currentItem.show();\n\t\t}\n\n\t\tif ( this.fromOutside && !noPropagation ) {\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"receive\", event, this._uiHash( this.fromOutside ) );\n\t\t\t} );\n\t\t}\n\t\tif ( ( this.fromOutside ||\n\t\t\t\tthis.domPosition.prev !==\n\t\t\t\tthis.currentItem.prev().not( \".ui-sortable-helper\" )[ 0 ] ||\n\t\t\t\tthis.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {\n\n\t\t\t// Trigger update callback if the DOM position has changed\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"update\", event, this._uiHash() );\n\t\t\t} );\n\t\t}\n\n\t\t// Check if the items Container has Changed and trigger appropriate\n\t\t// events.\n\t\tif ( this !== this.currentContainer ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\t\tthis._trigger( \"remove\", event, this._uiHash() );\n\t\t\t\t} );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"receive\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"update\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tfunction delayEvent( type, instance, container ) {\n\t\t\treturn function( event ) {\n\t\t\t\tcontainer._trigger( type, event, instance._uiHash( instance ) );\n\t\t\t};\n\t\t}\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"deactivate\", this, this.containers[ i ] ) );\n\t\t\t}\n\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"out\", this, this.containers[ i ] ) );\n\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t}\n\t\t}\n\n\t\t//Do what was originally in plugins\n\t\tif ( this.storedCursor ) {\n\t\t\tthis.document.find( \"body\" ).css( \"cursor\", this.storedCursor );\n\t\t\tthis.storedStylesheet.remove();\n\t\t}\n\t\tif ( this._storedOpacity ) {\n\t\t\tthis.helper.css( \"opacity\", this._storedOpacity );\n\t\t}\n\t\tif ( this._storedZIndex ) {\n\t\t\tthis.helper.css( \"zIndex\", this._storedZIndex === \"auto\" ? \"\" : this._storedZIndex );\n\t\t}\n\n\t\tthis.dragging = false;\n\n\t\tif ( !noPropagation ) {\n\t\t\tthis._trigger( \"beforeStop\", event, this._uiHash() );\n\t\t}\n\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t// it unbinds ALL events from the original node!\n\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\n\t\tif ( !this.cancelHelperRemoval ) {\n\t\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\t\t\tthis.helper = null;\n\t\t}\n\n\t\tif ( !noPropagation ) {\n\t\t\tfor ( i = 0; i < delayedTriggers.length; i++ ) {\n\n\t\t\t\t// Trigger all delayed events\n\t\t\t\tdelayedTriggers[ i ].call( this, event );\n\t\t\t}\n\t\t\tthis._trigger( \"stop\", event, this._uiHash() );\n\t\t}\n\n\t\tthis.fromOutside = false;\n\t\treturn !this.cancelHelperRemoval;\n\n\t},\n\n\t_trigger: function() {\n\t\tif ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {\n\t\t\tthis.cancel();\n\t\t}\n\t},\n\n\t_uiHash: function( _inst ) {\n\t\tvar inst = _inst || this;\n\t\treturn {\n\t\t\thelper: inst.helper,\n\t\t\tplaceholder: inst.placeholder || $( [] ),\n\t\t\tposition: inst.position,\n\t\t\toriginalPosition: inst.originalPosition,\n\t\t\toffset: inst.positionAbs,\n\t\t\titem: inst.currentItem,\n\t\t\tsender: _inst ? _inst.element : null\n\t\t};\n\t}\n\n} );\n\n\n/*!\n * jQuery UI Spinner 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Spinner\n//>>group: Widgets\n//>>description: Displays buttons to easily input numbers via the keyboard or mouse.\n//>>docs: https://api.jqueryui.com/spinner/\n//>>demos: https://jqueryui.com/spinner/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/spinner.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nfunction spinnerModifier( fn ) {\n\treturn function() {\n\t\tvar previous = this.element.val();\n\t\tfn.apply( this, arguments );\n\t\tthis._refresh();\n\t\tif ( previous !== this.element.val() ) {\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t};\n}\n\n$.widget( \"ui.spinner\", {\n\tversion: \"1.13.3\",\n\tdefaultElement: \"<input>\",\n\twidgetEventPrefix: \"spin\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-spinner\": \"ui-corner-all\",\n\t\t\t\"ui-spinner-down\": \"ui-corner-br\",\n\t\t\t\"ui-spinner-up\": \"ui-corner-tr\"\n\t\t},\n\t\tculture: null,\n\t\ticons: {\n\t\t\tdown: \"ui-icon-triangle-1-s\",\n\t\t\tup: \"ui-icon-triangle-1-n\"\n\t\t},\n\t\tincremental: true,\n\t\tmax: null,\n\t\tmin: null,\n\t\tnumberFormat: null,\n\t\tpage: 10,\n\t\tstep: 1,\n\n\t\tchange: null,\n\t\tspin: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_create: function() {\n\n\t\t// handle string values that need to be parsed\n\t\tthis._setOption( \"max\", this.options.max );\n\t\tthis._setOption( \"min\", this.options.min );\n\t\tthis._setOption( \"step\", this.options.step );\n\n\t\t// Only format if there is a value, prevents the field from being marked\n\t\t// as invalid in Firefox, see #9573.\n\t\tif ( this.value() !== \"\" ) {\n\n\t\t\t// Format the value, but don't constrain.\n\t\t\tthis._value( this.element.val(), true );\n\t\t}\n\n\t\tthis._draw();\n\t\tthis._on( this._events );\n\t\tthis._refresh();\n\n\t\t// Turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = this._super();\n\t\tvar element = this.element;\n\n\t\t$.each( [ \"min\", \"max\", \"step\" ], function( i, option ) {\n\t\t\tvar value = element.attr( option );\n\t\t\tif ( value != null && value.length ) {\n\t\t\t\toptions[ option ] = value;\n\t\t\t}\n\t\t} );\n\n\t\treturn options;\n\t},\n\n\t_events: {\n\t\tkeydown: function( event ) {\n\t\t\tif ( this._start( event ) && this._keydown( event ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\tkeyup: \"_stop\",\n\t\tfocus: function() {\n\t\t\tthis.previous = this.element.val();\n\t\t},\n\t\tblur: function( event ) {\n\t\t\tif ( this.cancelBlur ) {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._stop();\n\t\t\tthis._refresh();\n\t\t\tif ( this.previous !== this.element.val() ) {\n\t\t\t\tthis._trigger( \"change\", event );\n\t\t\t}\n\t\t},\n\t\tmousewheel: function( event, delta ) {\n\t\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] );\n\t\t\tvar isActive = this.element[ 0 ] === activeElement;\n\n\t\t\tif ( !isActive || !delta ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( !this.spinning && !this._start( event ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis._spin( ( delta > 0 ? 1 : -1 ) * this.options.step, event );\n\t\t\tclearTimeout( this.mousewheelTimer );\n\t\t\tthis.mousewheelTimer = this._delay( function() {\n\t\t\t\tif ( this.spinning ) {\n\t\t\t\t\tthis._stop( event );\n\t\t\t\t}\n\t\t\t}, 100 );\n\t\t\tevent.preventDefault();\n\t\t},\n\t\t\"mousedown .ui-spinner-button\": function( event ) {\n\t\t\tvar previous;\n\n\t\t\t// We never want the buttons to have focus; whenever the user is\n\t\t\t// interacting with the spinner, the focus should be on the input.\n\t\t\t// If the input is focused then this.previous is properly set from\n\t\t\t// when the input first received focus. If the input is not focused\n\t\t\t// then we need to set this.previous based on the value before spinning.\n\t\t\tprevious = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] ) ?\n\t\t\t\tthis.previous : this.element.val();\n\t\t\tfunction checkFocus() {\n\t\t\t\tvar isActive = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] );\n\t\t\t\tif ( !isActive ) {\n\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\tthis.previous = previous;\n\n\t\t\t\t\t// support: IE\n\t\t\t\t\t// IE sets focus asynchronously, so we need to check if focus\n\t\t\t\t\t// moved off of the input because the user clicked on the button.\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Ensure focus is on (or stays on) the text field\n\t\t\tevent.preventDefault();\n\t\t\tcheckFocus.call( this );\n\n\t\t\t// Support: IE\n\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\n\t\t\t// so we set a flag to know when we should ignore the blur event\n\t\t\t// and check (again) if focus moved off of the input.\n\t\t\tthis.cancelBlur = true;\n\t\t\tthis._delay( function() {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\tcheckFocus.call( this );\n\t\t\t} );\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._repeat( null, $( event.currentTarget )\n\t\t\t\t.hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\t\t\"mouseup .ui-spinner-button\": \"_stop\",\n\t\t\"mouseenter .ui-spinner-button\": function( event ) {\n\n\t\t\t// button will add ui-state-active if mouse was down while mouseleave and kept down\n\t\t\tif ( !$( event.currentTarget ).hasClass( \"ui-state-active\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._repeat( null, $( event.currentTarget )\n\t\t\t\t.hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\n\t\t// TODO: do we really want to consider this a stop?\n\t\t// shouldn't we just stop the repeater and wait until mouseup before\n\t\t// we trigger the stop event?\n\t\t\"mouseleave .ui-spinner-button\": \"_stop\"\n\t},\n\n\t// Support mobile enhanced option and make backcompat more sane\n\t_enhance: function() {\n\t\tthis.uiSpinner = this.element\n\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t.wrap( \"<span>\" )\n\t\t\t.parent()\n\n\t\t\t\t// Add buttons\n\t\t\t\t.append(\n\t\t\t\t\t\"<a></a><a></a>\"\n\t\t\t\t);\n\t},\n\n\t_draw: function() {\n\t\tthis._enhance();\n\n\t\tthis._addClass( this.uiSpinner, \"ui-spinner\", \"ui-widget ui-widget-content\" );\n\t\tthis._addClass( \"ui-spinner-input\" );\n\n\t\tthis.element.attr( \"role\", \"spinbutton\" );\n\n\t\t// Button bindings\n\t\tthis.buttons = this.uiSpinner.children( \"a\" )\n\t\t\t.attr( \"tabIndex\", -1 )\n\t\t\t.attr( \"aria-hidden\", true )\n\t\t\t.button( {\n\t\t\t\tclasses: {\n\t\t\t\t\t\"ui-button\": \"\"\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// TODO: Right now button does not support classes this is already updated in button PR\n\t\tthis._removeClass( this.buttons, \"ui-corner-all\" );\n\n\t\tthis._addClass( this.buttons.first(), \"ui-spinner-button ui-spinner-up\" );\n\t\tthis._addClass( this.buttons.last(), \"ui-spinner-button ui-spinner-down\" );\n\t\tthis.buttons.first().button( {\n\t\t\t\"icon\": this.options.icons.up,\n\t\t\t\"showLabel\": false\n\t\t} );\n\t\tthis.buttons.last().button( {\n\t\t\t\"icon\": this.options.icons.down,\n\t\t\t\"showLabel\": false\n\t\t} );\n\n\t\t// IE 6 doesn't understand height: 50% for the buttons\n\t\t// unless the wrapper has an explicit height\n\t\tif ( this.buttons.height() > Math.ceil( this.uiSpinner.height() * 0.5 ) &&\n\t\t\t\tthis.uiSpinner.height() > 0 ) {\n\t\t\tthis.uiSpinner.height( this.uiSpinner.height() );\n\t\t}\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar options = this.options,\n\t\t\tkeyCode = $.ui.keyCode;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.UP:\n\t\t\tthis._repeat( null, 1, event );\n\t\t\treturn true;\n\t\tcase keyCode.DOWN:\n\t\t\tthis._repeat( null, -1, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_UP:\n\t\t\tthis._repeat( null, options.page, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_DOWN:\n\t\t\tthis._repeat( null, -options.page, event );\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_start: function( event ) {\n\t\tif ( !this.spinning && this._trigger( \"start\", event ) === false ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\t\tthis.spinning = true;\n\t\treturn true;\n\t},\n\n\t_repeat: function( i, steps, event ) {\n\t\ti = i || 500;\n\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._repeat( 40, steps, event );\n\t\t}, i );\n\n\t\tthis._spin( steps * this.options.step, event );\n\t},\n\n\t_spin: function( step, event ) {\n\t\tvar value = this.value() || 0;\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\n\t\tvalue = this._adjustValue( value + step * this._increment( this.counter ) );\n\n\t\tif ( !this.spinning || this._trigger( \"spin\", event, { value: value } ) !== false ) {\n\t\t\tthis._value( value );\n\t\t\tthis.counter++;\n\t\t}\n\t},\n\n\t_increment: function( i ) {\n\t\tvar incremental = this.options.incremental;\n\n\t\tif ( incremental ) {\n\t\t\treturn typeof incremental === \"function\" ?\n\t\t\t\tincremental( i ) :\n\t\t\t\tMath.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );\n\t\t}\n\n\t\treturn 1;\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_adjustValue: function( value ) {\n\t\tvar base, aboveMin,\n\t\t\toptions = this.options;\n\n\t\t// Make sure we're at a valid step\n\t\t// - find out where we are relative to the base (min or 0)\n\t\tbase = options.min !== null ? options.min : 0;\n\t\taboveMin = value - base;\n\n\t\t// - round to the nearest step\n\t\taboveMin = Math.round( aboveMin / options.step ) * options.step;\n\n\t\t// - rounding is based on 0, so adjust back to our base\n\t\tvalue = base + aboveMin;\n\n\t\t// Fix precision from bad JS floating point math\n\t\tvalue = parseFloat( value.toFixed( this._precision() ) );\n\n\t\t// Clamp the value\n\t\tif ( options.max !== null && value > options.max ) {\n\t\t\treturn options.max;\n\t\t}\n\t\tif ( options.min !== null && value < options.min ) {\n\t\t\treturn options.min;\n\t\t}\n\n\t\treturn value;\n\t},\n\n\t_stop: function( event ) {\n\t\tif ( !this.spinning ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( this.timer );\n\t\tclearTimeout( this.mousewheelTimer );\n\t\tthis.counter = 0;\n\t\tthis.spinning = false;\n\t\tthis._trigger( \"stop\", event );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar prevValue, first, last;\n\n\t\tif ( key === \"culture\" || key === \"numberFormat\" ) {\n\t\t\tprevValue = this._parse( this.element.val() );\n\t\t\tthis.options[ key ] = value;\n\t\t\tthis.element.val( this._format( prevValue ) );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"max\" || key === \"min\" || key === \"step\" ) {\n\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\tvalue = this._parse( value );\n\t\t\t}\n\t\t}\n\t\tif ( key === \"icons\" ) {\n\t\t\tfirst = this.buttons.first().find( \".ui-icon\" );\n\t\t\tthis._removeClass( first, null, this.options.icons.up );\n\t\t\tthis._addClass( first, null, value.up );\n\t\t\tlast = this.buttons.last().find( \".ui-icon\" );\n\t\t\tthis._removeClass( last, null, this.options.icons.down );\n\t\t\tthis._addClass( last, null, value.down );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis._toggleClass( this.uiSpinner, null, \"ui-state-disabled\", !!value );\n\t\tthis.element.prop( \"disabled\", !!value );\n\t\tthis.buttons.button( value ? \"disable\" : \"enable\" );\n\t},\n\n\t_setOptions: spinnerModifier( function( options ) {\n\t\tthis._super( options );\n\t} ),\n\n\t_parse: function( val ) {\n\t\tif ( typeof val === \"string\" && val !== \"\" ) {\n\t\t\tval = window.Globalize && this.options.numberFormat ?\n\t\t\t\tGlobalize.parseFloat( val, 10, this.options.culture ) : +val;\n\t\t}\n\t\treturn val === \"\" || isNaN( val ) ? null : val;\n\t},\n\n\t_format: function( value ) {\n\t\tif ( value === \"\" ) {\n\t\t\treturn \"\";\n\t\t}\n\t\treturn window.Globalize && this.options.numberFormat ?\n\t\t\tGlobalize.format( value, this.options.numberFormat, this.options.culture ) :\n\t\t\tvalue;\n\t},\n\n\t_refresh: function() {\n\t\tthis.element.attr( {\n\t\t\t\"aria-valuemin\": this.options.min,\n\t\t\t\"aria-valuemax\": this.options.max,\n\n\t\t\t// TODO: what should we do with values that can't be parsed?\n\t\t\t\"aria-valuenow\": this._parse( this.element.val() )\n\t\t} );\n\t},\n\n\tisValid: function() {\n\t\tvar value = this.value();\n\n\t\t// Null is invalid\n\t\tif ( value === null ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If value gets adjusted, it's invalid\n\t\treturn value === this._adjustValue( value );\n\t},\n\n\t// Update the value without triggering change\n\t_value: function( value, allowAny ) {\n\t\tvar parsed;\n\t\tif ( value !== \"\" ) {\n\t\t\tparsed = this._parse( value );\n\t\t\tif ( parsed !== null ) {\n\t\t\t\tif ( !allowAny ) {\n\t\t\t\t\tparsed = this._adjustValue( parsed );\n\t\t\t\t}\n\t\t\t\tvalue = this._format( parsed );\n\t\t\t}\n\t\t}\n\t\tthis.element.val( value );\n\t\tthis._refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element\n\t\t\t.prop( \"disabled\", false )\n\t\t\t.removeAttr( \"autocomplete role aria-valuemin aria-valuemax aria-valuenow\" );\n\n\t\tthis.uiSpinner.replaceWith( this.element );\n\t},\n\n\tstepUp: spinnerModifier( function( steps ) {\n\t\tthis._stepUp( steps );\n\t} ),\n\t_stepUp: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( ( steps || 1 ) * this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tstepDown: spinnerModifier( function( steps ) {\n\t\tthis._stepDown( steps );\n\t} ),\n\t_stepDown: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( ( steps || 1 ) * -this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tpageUp: spinnerModifier( function( pages ) {\n\t\tthis._stepUp( ( pages || 1 ) * this.options.page );\n\t} ),\n\n\tpageDown: spinnerModifier( function( pages ) {\n\t\tthis._stepDown( ( pages || 1 ) * this.options.page );\n\t} ),\n\n\tvalue: function( newVal ) {\n\t\tif ( !arguments.length ) {\n\t\t\treturn this._parse( this.element.val() );\n\t\t}\n\t\tspinnerModifier( this._value ).call( this, newVal );\n\t},\n\n\twidget: function() {\n\t\treturn this.uiSpinner;\n\t}\n} );\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for spinner html extension points\n\t$.widget( \"ui.spinner\", $.ui.spinner, {\n\t\t_enhance: function() {\n\t\t\tthis.uiSpinner = this.element\n\t\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t\t.wrap( this._uiSpinnerHtml() )\n\t\t\t\t.parent()\n\n\t\t\t\t\t// Add buttons\n\t\t\t\t\t.append( this._buttonHtml() );\n\t\t},\n\t\t_uiSpinnerHtml: function() {\n\t\t\treturn \"<span>\";\n\t\t},\n\n\t\t_buttonHtml: function() {\n\t\t\treturn \"<a></a><a></a>\";\n\t\t}\n\t} );\n}\n\nvar widgetsSpinner = $.ui.spinner;\n\n\n/*!\n * jQuery UI Tabs 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Tabs\n//>>group: Widgets\n//>>description: Transforms a set of container elements into a tab structure.\n//>>docs: https://api.jqueryui.com/tabs/\n//>>demos: https://jqueryui.com/tabs/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/tabs.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.tabs\", {\n\tversion: \"1.13.3\",\n\tdelay: 300,\n\toptions: {\n\t\tactive: null,\n\t\tclasses: {\n\t\t\t\"ui-tabs\": \"ui-corner-all\",\n\t\t\t\"ui-tabs-nav\": \"ui-corner-all\",\n\t\t\t\"ui-tabs-panel\": \"ui-corner-bottom\",\n\t\t\t\"ui-tabs-tab\": \"ui-corner-top\"\n\t\t},\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theightStyle: \"content\",\n\t\thide: null,\n\t\tshow: null,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null,\n\t\tbeforeLoad: null,\n\t\tload: null\n\t},\n\n\t_isLocal: ( function() {\n\t\tvar rhash = /#.*$/;\n\n\t\treturn function( anchor ) {\n\t\t\tvar anchorUrl, locationUrl;\n\n\t\t\tanchorUrl = anchor.href.replace( rhash, \"\" );\n\t\t\tlocationUrl = location.href.replace( rhash, \"\" );\n\n\t\t\t// Decoding may throw an error if the URL isn't UTF-8 (#9518)\n\t\t\ttry {\n\t\t\t\tanchorUrl = decodeURIComponent( anchorUrl );\n\t\t\t} catch ( error ) {}\n\t\t\ttry {\n\t\t\t\tlocationUrl = decodeURIComponent( locationUrl );\n\t\t\t} catch ( error ) {}\n\n\t\t\treturn anchor.hash.length > 1 && anchorUrl === locationUrl;\n\t\t};\n\t} )(),\n\n\t_create: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.running = false;\n\n\t\tthis._addClass( \"ui-tabs\", \"ui-widget ui-widget-content\" );\n\t\tthis._toggleClass( \"ui-tabs-collapsible\", null, options.collapsible );\n\n\t\tthis._processTabs();\n\t\toptions.active = this._initialActive();\n\n\t\t// Take disabling tabs via class attribute from HTML\n\t\t// into account and update option properly.\n\t\tif ( Array.isArray( options.disabled ) ) {\n\t\t\toptions.disabled = $.uniqueSort( options.disabled.concat(\n\t\t\t\t$.map( this.tabs.filter( \".ui-state-disabled\" ), function( li ) {\n\t\t\t\t\treturn that.tabs.index( li );\n\t\t\t\t} )\n\t\t\t) ).sort();\n\t\t}\n\n\t\t// Check for length avoids error when initializing empty list\n\t\tif ( this.options.active !== false && this.anchors.length ) {\n\t\t\tthis.active = this._findActive( options.active );\n\t\t} else {\n\t\t\tthis.active = $();\n\t\t}\n\n\t\tthis._refresh();\n\n\t\tif ( this.active.length ) {\n\t\t\tthis.load( options.active );\n\t\t}\n\t},\n\n\t_initialActive: function() {\n\t\tvar active = this.options.active,\n\t\t\tcollapsible = this.options.collapsible,\n\t\t\tlocationHash = location.hash.substring( 1 );\n\n\t\tif ( active === null ) {\n\n\t\t\t// check the fragment identifier in the URL\n\t\t\tif ( locationHash ) {\n\t\t\t\tthis.tabs.each( function( i, tab ) {\n\t\t\t\t\tif ( $( tab ).attr( \"aria-controls\" ) === locationHash ) {\n\t\t\t\t\t\tactive = i;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Check for a tab marked active via a class\n\t\t\tif ( active === null ) {\n\t\t\t\tactive = this.tabs.index( this.tabs.filter( \".ui-tabs-active\" ) );\n\t\t\t}\n\n\t\t\t// No active tab, set to false\n\t\t\tif ( active === null || active === -1 ) {\n\t\t\t\tactive = this.tabs.length ? 0 : false;\n\t\t\t}\n\t\t}\n\n\t\t// Handle numbers: negative, out of range\n\t\tif ( active !== false ) {\n\t\t\tactive = this.tabs.index( this.tabs.eq( active ) );\n\t\t\tif ( active === -1 ) {\n\t\t\t\tactive = collapsible ? false : 0;\n\t\t\t}\n\t\t}\n\n\t\t// Don't allow collapsible: false and active: false\n\t\tif ( !collapsible && active === false && this.anchors.length ) {\n\t\t\tactive = 0;\n\t\t}\n\n\t\treturn active;\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\ttab: this.active,\n\t\t\tpanel: !this.active.length ? $() : this._getPanelForTab( this.active )\n\t\t};\n\t},\n\n\t_tabKeydown: function( event ) {\n\t\tvar focusedTab = $( $.ui.safeActiveElement( this.document[ 0 ] ) ).closest( \"li\" ),\n\t\t\tselectedIndex = this.tabs.index( focusedTab ),\n\t\t\tgoingForward = true;\n\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.RIGHT:\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tselectedIndex++;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tgoingForward = false;\n\t\t\tselectedIndex--;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tselectedIndex = this.anchors.length - 1;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tselectedIndex = 0;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.SPACE:\n\n\t\t\t// Activate only, no collapsing\n\t\t\tevent.preventDefault();\n\t\t\tclearTimeout( this.activating );\n\t\t\tthis._activate( selectedIndex );\n\t\t\treturn;\n\t\tcase $.ui.keyCode.ENTER:\n\n\t\t\t// Toggle (cancel delayed activation, allow collapsing)\n\t\t\tevent.preventDefault();\n\t\t\tclearTimeout( this.activating );\n\n\t\t\t// Determine if we should collapse or activate\n\t\t\tthis._activate( selectedIndex === this.options.active ? false : selectedIndex );\n\t\t\treturn;\n\t\tdefault:\n\t\t\treturn;\n\t\t}\n\n\t\t// Focus the appropriate tab, based on which key was pressed\n\t\tevent.preventDefault();\n\t\tclearTimeout( this.activating );\n\t\tselectedIndex = this._focusNextTab( selectedIndex, goingForward );\n\n\t\t// Navigating with control/command key will prevent automatic activation\n\t\tif ( !event.ctrlKey && !event.metaKey ) {\n\n\t\t\t// Update aria-selected immediately so that AT think the tab is already selected.\n\t\t\t// Otherwise AT may confuse the user by stating that they need to activate the tab,\n\t\t\t// but the tab will already be activated by the time the announcement finishes.\n\t\t\tfocusedTab.attr( \"aria-selected\", \"false\" );\n\t\t\tthis.tabs.eq( selectedIndex ).attr( \"aria-selected\", \"true\" );\n\n\t\t\tthis.activating = this._delay( function() {\n\t\t\t\tthis.option( \"active\", selectedIndex );\n\t\t\t}, this.delay );\n\t\t}\n\t},\n\n\t_panelKeydown: function( event ) {\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ctrl+up moves focus to the current tab\n\t\tif ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.active.trigger( \"focus\" );\n\t\t}\n\t},\n\n\t// Alt+page up/down moves focus to the previous/next tab (and activates)\n\t_handlePageNav: function( event ) {\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active - 1, false ) );\n\t\t\treturn true;\n\t\t}\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active + 1, true ) );\n\t\t\treturn true;\n\t\t}\n\t},\n\n\t_findNextTab: function( index, goingForward ) {\n\t\tvar lastTabIndex = this.tabs.length - 1;\n\n\t\tfunction constrain() {\n\t\t\tif ( index > lastTabIndex ) {\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\tif ( index < 0 ) {\n\t\t\t\tindex = lastTabIndex;\n\t\t\t}\n\t\t\treturn index;\n\t\t}\n\n\t\twhile ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {\n\t\t\tindex = goingForward ? index + 1 : index - 1;\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_focusNextTab: function( index, goingForward ) {\n\t\tindex = this._findNextTab( index, goingForward );\n\t\tthis.tabs.eq( index ).trigger( \"focus\" );\n\t\treturn index;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"collapsible\" ) {\n\t\t\tthis._toggleClass( \"ui-tabs-collapsible\", null, value );\n\n\t\t\t// Setting collapsible: false while collapsed; open first panel\n\t\t\tif ( !value && this.options.active === false ) {\n\t\t\t\tthis._activate( 0 );\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tif ( key === \"heightStyle\" ) {\n\t\t\tthis._setupHeightStyle( value );\n\t\t}\n\t},\n\n\t_sanitizeSelector: function( hash ) {\n\t\treturn hash ? hash.replace( /[!\"$%&'()*+,.\\/:;<=>?@\\[\\]\\^`{|}~]/g, \"\\\\$&\" ) : \"\";\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options,\n\t\t\tlis = this.tablist.children( \":has(a[href])\" );\n\n\t\t// Get disabled tabs from class attribute from HTML\n\t\t// this will get converted to a boolean if needed in _refresh()\n\t\toptions.disabled = $.map( lis.filter( \".ui-state-disabled\" ), function( tab ) {\n\t\t\treturn lis.index( tab );\n\t\t} );\n\n\t\tthis._processTabs();\n\n\t\t// Was collapsed or no tabs\n\t\tif ( options.active === false || !this.anchors.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\n\t\t// was active, but active tab is gone\n\t\t} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {\n\n\t\t\t// all remaining tabs are disabled\n\t\t\tif ( this.tabs.length === options.disabled.length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\n\t\t\t// activate previous tab\n\t\t\t} else {\n\t\t\t\tthis._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );\n\t\t\t}\n\n\t\t// was active, active tab still exists\n\t\t} else {\n\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.tabs.index( this.active );\n\t\t}\n\n\t\tthis._refresh();\n\t},\n\n\t_refresh: function() {\n\t\tthis._setOptionDisabled( this.options.disabled );\n\t\tthis._setupEvents( this.options.event );\n\t\tthis._setupHeightStyle( this.options.heightStyle );\n\n\t\tthis.tabs.not( this.active ).attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\ttabIndex: -1\n\t\t} );\n\t\tthis.panels.not( this._getPanelForTab( this.active ) )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t} );\n\n\t\t// Make sure one tab is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.tabs.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t} );\n\t\t\tthis._addClass( this.active, \"ui-tabs-active\", \"ui-state-active\" );\n\t\t\tthis._getPanelForTab( this.active )\n\t\t\t\t.show()\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_processTabs: function() {\n\t\tvar that = this,\n\t\t\tprevTabs = this.tabs,\n\t\t\tprevAnchors = this.anchors,\n\t\t\tprevPanels = this.panels;\n\n\t\tthis.tablist = this._getList().attr( \"role\", \"tablist\" );\n\t\tthis._addClass( this.tablist, \"ui-tabs-nav\",\n\t\t\t\"ui-helper-reset ui-helper-clearfix ui-widget-header\" );\n\n\t\t// Prevent users from focusing disabled tabs via click\n\t\tthis.tablist\n\t\t\t.on( \"mousedown\" + this.eventNamespace, \"> li\", function( event ) {\n\t\t\t\tif ( $( this ).is( \".ui-state-disabled\" ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} )\n\n\t\t\t// Support: IE <9\n\t\t\t// Preventing the default action in mousedown doesn't prevent IE\n\t\t\t// from focusing the element, so if the anchor gets focused, blur.\n\t\t\t// We don't have to worry about focusing the previously focused\n\t\t\t// element since clicking on a non-focusable element should focus\n\t\t\t// the body anyway.\n\t\t\t.on( \"focus\" + this.eventNamespace, \".ui-tabs-anchor\", function() {\n\t\t\t\tif ( $( this ).closest( \"li\" ).is( \".ui-state-disabled\" ) ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.tabs = this.tablist.find( \"> li:has(a[href])\" )\n\t\t\t.attr( {\n\t\t\t\trole: \"tab\",\n\t\t\t\ttabIndex: -1\n\t\t\t} );\n\t\tthis._addClass( this.tabs, \"ui-tabs-tab\", \"ui-state-default\" );\n\n\t\tthis.anchors = this.tabs.map( function() {\n\t\t\treturn $( \"a\", this )[ 0 ];\n\t\t} )\n\t\t\t.attr( {\n\t\t\t\ttabIndex: -1\n\t\t\t} );\n\t\tthis._addClass( this.anchors, \"ui-tabs-anchor\" );\n\n\t\tthis.panels = $();\n\n\t\tthis.anchors.each( function( i, anchor ) {\n\t\t\tvar selector, panel, panelId,\n\t\t\t\tanchorId = $( anchor ).uniqueId().attr( \"id\" ),\n\t\t\t\ttab = $( anchor ).closest( \"li\" ),\n\t\t\t\toriginalAriaControls = tab.attr( \"aria-controls\" );\n\n\t\t\t// Inline tab\n\t\t\tif ( that._isLocal( anchor ) ) {\n\t\t\t\tselector = anchor.hash;\n\t\t\t\tpanelId = selector.substring( 1 );\n\t\t\t\tpanel = that.element.find( that._sanitizeSelector( selector ) );\n\n\t\t\t// remote tab\n\t\t\t} else {\n\n\t\t\t\t// If the tab doesn't already have aria-controls,\n\t\t\t\t// generate an id by using a throw-away element\n\t\t\t\tpanelId = tab.attr( \"aria-controls\" ) || $( {} ).uniqueId()[ 0 ].id;\n\t\t\t\tselector = \"#\" + panelId;\n\t\t\t\tpanel = that.element.find( selector );\n\t\t\t\tif ( !panel.length ) {\n\t\t\t\t\tpanel = that._createPanel( panelId );\n\t\t\t\t\tpanel.insertAfter( that.panels[ i - 1 ] || that.tablist );\n\t\t\t\t}\n\t\t\t\tpanel.attr( \"aria-live\", \"polite\" );\n\t\t\t}\n\n\t\t\tif ( panel.length ) {\n\t\t\t\tthat.panels = that.panels.add( panel );\n\t\t\t}\n\t\t\tif ( originalAriaControls ) {\n\t\t\t\ttab.data( \"ui-tabs-aria-controls\", originalAriaControls );\n\t\t\t}\n\t\t\ttab.attr( {\n\t\t\t\t\"aria-controls\": panelId,\n\t\t\t\t\"aria-labelledby\": anchorId\n\t\t\t} );\n\t\t\tpanel.attr( \"aria-labelledby\", anchorId );\n\t\t} );\n\n\t\tthis.panels.attr( \"role\", \"tabpanel\" );\n\t\tthis._addClass( this.panels, \"ui-tabs-panel\", \"ui-widget-content\" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevTabs ) {\n\t\t\tthis._off( prevTabs.not( this.tabs ) );\n\t\t\tthis._off( prevAnchors.not( this.anchors ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t// Allow overriding how to find the list for rare usage scenarios (#7715)\n\t_getList: function() {\n\t\treturn this.tablist || this.element.find( \"ol, ul\" ).eq( 0 );\n\t},\n\n\t_createPanel: function( id ) {\n\t\treturn $( \"<div>\" )\n\t\t\t.attr( \"id\", id )\n\t\t\t.data( \"ui-tabs-destroy\", true );\n\t},\n\n\t_setOptionDisabled: function( disabled ) {\n\t\tvar currentItem, li, i;\n\n\t\tif ( Array.isArray( disabled ) ) {\n\t\t\tif ( !disabled.length ) {\n\t\t\t\tdisabled = false;\n\t\t\t} else if ( disabled.length === this.anchors.length ) {\n\t\t\t\tdisabled = true;\n\t\t\t}\n\t\t}\n\n\t\t// Disable tabs\n\t\tfor ( i = 0; ( li = this.tabs[ i ] ); i++ ) {\n\t\t\tcurrentItem = $( li );\n\t\t\tif ( disabled === true || $.inArray( i, disabled ) !== -1 ) {\n\t\t\t\tcurrentItem.attr( \"aria-disabled\", \"true\" );\n\t\t\t\tthis._addClass( currentItem, null, \"ui-state-disabled\" );\n\t\t\t} else {\n\t\t\t\tcurrentItem.removeAttr( \"aria-disabled\" );\n\t\t\t\tthis._removeClass( currentItem, null, \"ui-state-disabled\" );\n\t\t\t}\n\t\t}\n\n\t\tthis.options.disabled = disabled;\n\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null,\n\t\t\tdisabled === true );\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( \" \" ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t} );\n\t\t}\n\n\t\tthis._off( this.anchors.add( this.tabs ).add( this.panels ) );\n\n\t\t// Always prevent the default action, even when disabled\n\t\tthis._on( true, this.anchors, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t} );\n\t\tthis._on( this.anchors, events );\n\t\tthis._on( this.tabs, { keydown: \"_tabKeydown\" } );\n\t\tthis._on( this.panels, { keydown: \"_panelKeydown\" } );\n\n\t\tthis._focusable( this.tabs );\n\t\tthis._hoverable( this.tabs );\n\t},\n\n\t_setupHeightStyle: function( heightStyle ) {\n\t\tvar maxHeight,\n\t\t\tparent = this.element.parent();\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tmaxHeight -= this.element.outerHeight() - this.element.height();\n\n\t\t\tthis.element.siblings( \":visible\" ).each( function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.element.children().not( this.panels ).each( function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.panels.each( function() {\n\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t} )\n\t\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.panels.each( function() {\n\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).height( \"\" ).height() );\n\t\t\t} ).height( maxHeight );\n\t\t}\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar options = this.options,\n\t\t\tactive = this.active,\n\t\t\tanchor = $( event.currentTarget ),\n\t\t\ttab = anchor.closest( \"li\" ),\n\t\t\tclickedIsActive = tab[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : this._getPanelForTab( tab ),\n\t\t\ttoHide = !active.length ? $() : this._getPanelForTab( active ),\n\t\t\teventData = {\n\t\t\t\toldTab: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewTab: collapsing ? $() : tab,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif ( tab.hasClass( \"ui-state-disabled\" ) ||\n\n\t\t\t\t// tab is already loading\n\t\t\t\ttab.hasClass( \"ui-tabs-loading\" ) ||\n\n\t\t\t\t// can't switch durning an animation\n\t\t\t\tthis.running ||\n\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.tabs.index( tab );\n\n\t\tthis.active = clickedIsActive ? $() : tab;\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tif ( !toHide.length && !toShow.length ) {\n\t\t\t$.error( \"jQuery UI Tabs: Mismatching fragment identifier.\" );\n\t\t}\n\n\t\tif ( toShow.length ) {\n\t\t\tthis.load( this.tabs.index( tab ), event );\n\t\t}\n\t\tthis._toggle( event, eventData );\n\t},\n\n\t// Handles show/hide for selecting tabs\n\t_toggle: function( event, eventData ) {\n\t\tvar that = this,\n\t\t\ttoShow = eventData.newPanel,\n\t\t\ttoHide = eventData.oldPanel;\n\n\t\tthis.running = true;\n\n\t\tfunction complete() {\n\t\t\tthat.running = false;\n\t\t\tthat._trigger( \"activate\", event, eventData );\n\t\t}\n\n\t\tfunction show() {\n\t\t\tthat._addClass( eventData.newTab.closest( \"li\" ), \"ui-tabs-active\", \"ui-state-active\" );\n\n\t\t\tif ( toShow.length && that.options.show ) {\n\t\t\t\tthat._show( toShow, that.options.show, complete );\n\t\t\t} else {\n\t\t\t\ttoShow.show();\n\t\t\t\tcomplete();\n\t\t\t}\n\t\t}\n\n\t\t// Start out by hiding, then showing, then completing\n\t\tif ( toHide.length && this.options.hide ) {\n\t\t\tthis._hide( toHide, this.options.hide, function() {\n\t\t\t\tthat._removeClass( eventData.oldTab.closest( \"li\" ),\n\t\t\t\t\t\"ui-tabs-active\", \"ui-state-active\" );\n\t\t\t\tshow();\n\t\t\t} );\n\t\t} else {\n\t\t\tthis._removeClass( eventData.oldTab.closest( \"li\" ),\n\t\t\t\t\"ui-tabs-active\", \"ui-state-active\" );\n\t\t\ttoHide.hide();\n\t\t\tshow();\n\t\t}\n\n\t\ttoHide.attr( \"aria-hidden\", \"true\" );\n\t\teventData.oldTab.attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t} );\n\n\t\t// If we're switching tabs, remove the old tab from the tab order.\n\t\t// If we're opening from collapsed state, remove the previous tab from the tab order.\n\t\t// If we're collapsing, then keep the collapsing tab in the tab order.\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\teventData.oldTab.attr( \"tabIndex\", -1 );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.tabs.filter( function() {\n\t\t\t\treturn $( this ).attr( \"tabIndex\" ) === 0;\n\t\t\t} )\n\t\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow.attr( \"aria-hidden\", \"false\" );\n\t\teventData.newTab.attr( {\n\t\t\t\"aria-selected\": \"true\",\n\t\t\t\"aria-expanded\": \"true\",\n\t\t\ttabIndex: 0\n\t\t} );\n\t},\n\n\t_activate: function( index ) {\n\t\tvar anchor,\n\t\t\tactive = this._findActive( index );\n\n\t\t// Trying to activate the already active panel\n\t\tif ( active[ 0 ] === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Trying to collapse, simulate a click on the current active header\n\t\tif ( !active.length ) {\n\t\t\tactive = this.active;\n\t\t}\n\n\t\tanchor = active.find( \".ui-tabs-anchor\" )[ 0 ];\n\t\tthis._eventHandler( {\n\t\t\ttarget: anchor,\n\t\t\tcurrentTarget: anchor,\n\t\t\tpreventDefault: $.noop\n\t\t} );\n\t},\n\n\t_findActive: function( index ) {\n\t\treturn index === false ? $() : this.tabs.eq( index );\n\t},\n\n\t_getIndex: function( index ) {\n\n\t\t// meta-function to give users option to provide a href string instead of a numerical index.\n\t\tif ( typeof index === \"string\" ) {\n\t\t\tindex = this.anchors.index( this.anchors.filter( \"[href$='\" +\n\t\t\t\t$.escapeSelector( index ) + \"']\" ) );\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_destroy: function() {\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tthis.tablist\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.off( this.eventNamespace );\n\n\t\tthis.anchors\n\t\t\t.removeAttr( \"role tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis.tabs.add( this.panels ).each( function() {\n\t\t\tif ( $.data( this, \"ui-tabs-destroy\" ) ) {\n\t\t\t\t$( this ).remove();\n\t\t\t} else {\n\t\t\t\t$( this ).removeAttr( \"role tabIndex \" +\n\t\t\t\t\t\"aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded\" );\n\t\t\t}\n\t\t} );\n\n\t\tthis.tabs.each( function() {\n\t\t\tvar li = $( this ),\n\t\t\t\tprev = li.data( \"ui-tabs-aria-controls\" );\n\t\t\tif ( prev ) {\n\t\t\t\tli\n\t\t\t\t\t.attr( \"aria-controls\", prev )\n\t\t\t\t\t.removeData( \"ui-tabs-aria-controls\" );\n\t\t\t} else {\n\t\t\t\tli.removeAttr( \"aria-controls\" );\n\t\t\t}\n\t\t} );\n\n\t\tthis.panels.show();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tthis.panels.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\tenable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = false;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( Array.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.map( disabled, function( num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tdisabled = $.map( this.tabs, function( li, num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\tthis._setOptionDisabled( disabled );\n\t},\n\n\tdisable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === true ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = true;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( $.inArray( index, disabled ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( Array.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.merge( [ index ], disabled ).sort();\n\t\t\t} else {\n\t\t\t\tdisabled = [ index ];\n\t\t\t}\n\t\t}\n\t\tthis._setOptionDisabled( disabled );\n\t},\n\n\tload: function( index, event ) {\n\t\tindex = this._getIndex( index );\n\t\tvar that = this,\n\t\t\ttab = this.tabs.eq( index ),\n\t\t\tanchor = tab.find( \".ui-tabs-anchor\" ),\n\t\t\tpanel = this._getPanelForTab( tab ),\n\t\t\teventData = {\n\t\t\t\ttab: tab,\n\t\t\t\tpanel: panel\n\t\t\t},\n\t\t\tcomplete = function( jqXHR, status ) {\n\t\t\t\tif ( status === \"abort\" ) {\n\t\t\t\t\tthat.panels.stop( false, true );\n\t\t\t\t}\n\n\t\t\t\tthat._removeClass( tab, \"ui-tabs-loading\" );\n\t\t\t\tpanel.removeAttr( \"aria-busy\" );\n\n\t\t\t\tif ( jqXHR === that.xhr ) {\n\t\t\t\t\tdelete that.xhr;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Not remote\n\t\tif ( this._isLocal( anchor[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );\n\n\t\t// Support: jQuery <1.8\n\t\t// jQuery <1.8 returns false if the request is canceled in beforeSend,\n\t\t// but as of 1.8, $.ajax() always returns a jqXHR object.\n\t\tif ( this.xhr && this.xhr.statusText !== \"canceled\" ) {\n\t\t\tthis._addClass( tab, \"ui-tabs-loading\" );\n\t\t\tpanel.attr( \"aria-busy\", \"true\" );\n\n\t\t\tthis.xhr\n\t\t\t\t.done( function( response, status, jqXHR ) {\n\n\t\t\t\t\t// support: jQuery <1.8\n\t\t\t\t\t// https://bugs.jquery.com/ticket/11778\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tpanel.html( response );\n\t\t\t\t\t\tthat._trigger( \"load\", event, eventData );\n\n\t\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t\t}, 1 );\n\t\t\t\t} )\n\t\t\t\t.fail( function( jqXHR, status ) {\n\n\t\t\t\t\t// support: jQuery <1.8\n\t\t\t\t\t// https://bugs.jquery.com/ticket/11778\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t\t}, 1 );\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_ajaxSettings: function( anchor, event, eventData ) {\n\t\tvar that = this;\n\t\treturn {\n\n\t\t\t// Support: IE <11 only\n\t\t\t// Strip any hash that exists to prevent errors with the Ajax request\n\t\t\turl: anchor.attr( \"href\" ).replace( /#.*$/, \"\" ),\n\t\t\tbeforeSend: function( jqXHR, settings ) {\n\t\t\t\treturn that._trigger( \"beforeLoad\", event,\n\t\t\t\t\t$.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );\n\t\t\t}\n\t\t};\n\t},\n\n\t_getPanelForTab: function( tab ) {\n\t\tvar id = $( tab ).attr( \"aria-controls\" );\n\t\treturn this.element.find( this._sanitizeSelector( \"#\" + id ) );\n\t}\n} );\n\n// DEPRECATED\n// TODO: Switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for ui-tab class (now ui-tabs-tab)\n\t$.widget( \"ui.tabs\", $.ui.tabs, {\n\t\t_processTabs: function() {\n\t\t\tthis._superApply( arguments );\n\t\t\tthis._addClass( this.tabs, \"ui-tab\" );\n\t\t}\n\t} );\n}\n\nvar widgetsTabs = $.ui.tabs;\n\n\n/*!\n * jQuery UI Tooltip 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Tooltip\n//>>group: Widgets\n//>>description: Shows additional information for any element on hover or focus.\n//>>docs: https://api.jqueryui.com/tooltip/\n//>>demos: https://jqueryui.com/tooltip/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/tooltip.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.tooltip\", {\n\tversion: \"1.13.3\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-tooltip\": \"ui-corner-all ui-widget-shadow\"\n\t\t},\n\t\tcontent: function() {\n\t\t\tvar title = $( this ).attr( \"title\" );\n\n\t\t\t// Escape title, since we're going from an attribute to raw HTML\n\t\t\treturn $( \"<a>\" ).text( title ).html();\n\t\t},\n\t\thide: true,\n\n\t\t// Disabled elements have inconsistent behavior across browsers (#8661)\n\t\titems: \"[title]:not([disabled])\",\n\t\tposition: {\n\t\t\tmy: \"left top+15\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"flipfit flip\"\n\t\t},\n\t\tshow: true,\n\t\ttrack: false,\n\n\t\t// Callbacks\n\t\tclose: null,\n\t\topen: null\n\t},\n\n\t_addDescribedBy: function( elem, id ) {\n\t\tvar describedby = ( elem.attr( \"aria-describedby\" ) || \"\" ).split( /\\s+/ );\n\t\tdescribedby.push( id );\n\t\telem\n\t\t\t.data( \"ui-tooltip-id\", id )\n\t\t\t.attr( \"aria-describedby\", String.prototype.trim.call( describedby.join( \" \" ) ) );\n\t},\n\n\t_removeDescribedBy: function( elem ) {\n\t\tvar id = elem.data( \"ui-tooltip-id\" ),\n\t\t\tdescribedby = ( elem.attr( \"aria-describedby\" ) || \"\" ).split( /\\s+/ ),\n\t\t\tindex = $.inArray( id, describedby );\n\n\t\tif ( index !== -1 ) {\n\t\t\tdescribedby.splice( index, 1 );\n\t\t}\n\n\t\telem.removeData( \"ui-tooltip-id\" );\n\t\tdescribedby = String.prototype.trim.call( describedby.join( \" \" ) );\n\t\tif ( describedby ) {\n\t\t\telem.attr( \"aria-describedby\", describedby );\n\t\t} else {\n\t\t\telem.removeAttr( \"aria-describedby\" );\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._on( {\n\t\t\tmouseover: \"open\",\n\t\t\tfocusin: \"open\"\n\t\t} );\n\n\t\t// IDs of generated tooltips, needed for destroy\n\t\tthis.tooltips = {};\n\n\t\t// IDs of parent tooltips where we removed the title attribute\n\t\tthis.parents = {};\n\n\t\t// Append the aria-live region so tooltips announce correctly\n\t\tthis.liveRegion = $( \"<div>\" )\n\t\t\t.attr( {\n\t\t\t\trole: \"log\",\n\t\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\t\"aria-relevant\": \"additions\"\n\t\t\t} )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\t\tthis._addClass( this.liveRegion, null, \"ui-helper-hidden-accessible\" );\n\n\t\tthis.disabledTitles = $( [] );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar that = this;\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"content\" ) {\n\t\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\t\tthat._updateContent( tooltipData.element );\n\t\t\t} );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis[ value ? \"_disable\" : \"_enable\" ]();\n\t},\n\n\t_disable: function() {\n\t\tvar that = this;\n\n\t\t// Close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\tvar event = $.Event( \"blur\" );\n\t\t\tevent.target = event.currentTarget = tooltipData.element[ 0 ];\n\t\t\tthat.close( event, true );\n\t\t} );\n\n\t\t// Remove title attributes to prevent native tooltips\n\t\tthis.disabledTitles = this.disabledTitles.add(\n\t\t\tthis.element.find( this.options.items ).addBack()\n\t\t\t\t.filter( function() {\n\t\t\t\t\tvar element = $( this );\n\t\t\t\t\tif ( element.is( \"[title]\" ) ) {\n\t\t\t\t\t\treturn element\n\t\t\t\t\t\t\t.data( \"ui-tooltip-title\", element.attr( \"title\" ) )\n\t\t\t\t\t\t\t.removeAttr( \"title\" );\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t);\n\t},\n\n\t_enable: function() {\n\n\t\t// restore title attributes\n\t\tthis.disabledTitles.each( function() {\n\t\t\tvar element = $( this );\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\n\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\n\t\t\t}\n\t\t} );\n\t\tthis.disabledTitles = $( [] );\n\t},\n\n\topen: function( event ) {\n\t\tvar that = this,\n\t\t\ttarget = $( event ? event.target : this.element )\n\n\t\t\t\t// we need closest here due to mouseover bubbling,\n\t\t\t\t// but always pointing at the same event target\n\t\t\t\t.closest( this.options.items );\n\n\t\t// No element to show a tooltip for or the tooltip is already open\n\t\tif ( !target.length || target.data( \"ui-tooltip-id\" ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( target.attr( \"title\" ) ) {\n\t\t\ttarget.data( \"ui-tooltip-title\", target.attr( \"title\" ) );\n\t\t}\n\n\t\ttarget.data( \"ui-tooltip-open\", true );\n\n\t\t// Kill parent tooltips, custom or native, for hover\n\t\tif ( event && event.type === \"mouseover\" ) {\n\t\t\ttarget.parents().each( function() {\n\t\t\t\tvar parent = $( this ),\n\t\t\t\t\tblurEvent;\n\t\t\t\tif ( parent.data( \"ui-tooltip-open\" ) ) {\n\t\t\t\t\tblurEvent = $.Event( \"blur\" );\n\t\t\t\t\tblurEvent.target = blurEvent.currentTarget = this;\n\t\t\t\t\tthat.close( blurEvent, true );\n\t\t\t\t}\n\t\t\t\tif ( parent.attr( \"title\" ) ) {\n\t\t\t\t\tparent.uniqueId();\n\t\t\t\t\tthat.parents[ this.id ] = {\n\t\t\t\t\t\telement: this,\n\t\t\t\t\t\ttitle: parent.attr( \"title\" )\n\t\t\t\t\t};\n\t\t\t\t\tparent.attr( \"title\", \"\" );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tthis._registerCloseHandlers( event, target );\n\t\tthis._updateContent( target, event );\n\t},\n\n\t_updateContent: function( target, event ) {\n\t\tvar content,\n\t\t\tcontentOption = this.options.content,\n\t\t\tthat = this,\n\t\t\teventType = event ? event.type : null;\n\n\t\tif ( typeof contentOption === \"string\" || contentOption.nodeType ||\n\t\t\t\tcontentOption.jquery ) {\n\t\t\treturn this._open( event, target, contentOption );\n\t\t}\n\n\t\tcontent = contentOption.call( target[ 0 ], function( response ) {\n\n\t\t\t// IE may instantly serve a cached response for ajax requests\n\t\t\t// delay this call to _open so the other call to _open runs first\n\t\t\tthat._delay( function() {\n\n\t\t\t\t// Ignore async response if tooltip was closed already\n\t\t\t\tif ( !target.data( \"ui-tooltip-open\" ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// JQuery creates a special event for focusin when it doesn't\n\t\t\t\t// exist natively. To improve performance, the native event\n\t\t\t\t// object is reused and the type is changed. Therefore, we can't\n\t\t\t\t// rely on the type being correct after the event finished\n\t\t\t\t// bubbling, so we set it back to the previous value. (#8740)\n\t\t\t\tif ( event ) {\n\t\t\t\t\tevent.type = eventType;\n\t\t\t\t}\n\t\t\t\tthis._open( event, target, response );\n\t\t\t} );\n\t\t} );\n\t\tif ( content ) {\n\t\t\tthis._open( event, target, content );\n\t\t}\n\t},\n\n\t_open: function( event, target, content ) {\n\t\tvar tooltipData, tooltip, delayedShow, a11yContent,\n\t\t\tpositionOption = $.extend( {}, this.options.position );\n\n\t\tif ( !content ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Content can be updated multiple times. If the tooltip already\n\t\t// exists, then just update the content and bail.\n\t\ttooltipData = this._find( target );\n\t\tif ( tooltipData ) {\n\t\t\ttooltipData.tooltip.find( \".ui-tooltip-content\" ).html( content );\n\t\t\treturn;\n\t\t}\n\n\t\t// If we have a title, clear it to prevent the native tooltip\n\t\t// we have to check first to avoid defining a title if none exists\n\t\t// (we don't want to cause an element to start matching [title])\n\t\t//\n\t\t// We use removeAttr only for key events, to allow IE to export the correct\n\t\t// accessible attributes. For mouse events, set to empty string to avoid\n\t\t// native tooltip showing up (happens only when removing inside mouseover).\n\t\tif ( target.is( \"[title]\" ) ) {\n\t\t\tif ( event && event.type === \"mouseover\" ) {\n\t\t\t\ttarget.attr( \"title\", \"\" );\n\t\t\t} else {\n\t\t\t\ttarget.removeAttr( \"title\" );\n\t\t\t}\n\t\t}\n\n\t\ttooltipData = this._tooltip( target );\n\t\ttooltip = tooltipData.tooltip;\n\t\tthis._addDescribedBy( target, tooltip.attr( \"id\" ) );\n\t\ttooltip.find( \".ui-tooltip-content\" ).html( content );\n\n\t\t// Support: Voiceover on OS X, JAWS on IE <= 9\n\t\t// JAWS announces deletions even when aria-relevant=\"additions\"\n\t\t// Voiceover will sometimes re-read the entire log region's contents from the beginning\n\t\tthis.liveRegion.children().hide();\n\t\ta11yContent = $( \"<div>\" ).html( tooltip.find( \".ui-tooltip-content\" ).html() );\n\t\ta11yContent.removeAttr( \"name\" ).find( \"[name]\" ).removeAttr( \"name\" );\n\t\ta11yContent.removeAttr( \"id\" ).find( \"[id]\" ).removeAttr( \"id\" );\n\t\ta11yContent.appendTo( this.liveRegion );\n\n\t\tfunction position( event ) {\n\t\t\tpositionOption.of = event;\n\t\t\tif ( tooltip.is( \":hidden\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttooltip.position( positionOption );\n\t\t}\n\t\tif ( this.options.track && event && /^mouse/.test( event.type ) ) {\n\t\t\tthis._on( this.document, {\n\t\t\t\tmousemove: position\n\t\t\t} );\n\n\t\t\t// trigger once to override element-relative positioning\n\t\t\tposition( event );\n\t\t} else {\n\t\t\ttooltip.position( $.extend( {\n\t\t\t\tof: target\n\t\t\t}, this.options.position ) );\n\t\t}\n\n\t\ttooltip.hide();\n\n\t\tthis._show( tooltip, this.options.show );\n\n\t\t// Handle tracking tooltips that are shown with a delay (#8644). As soon\n\t\t// as the tooltip is visible, position the tooltip using the most recent\n\t\t// event.\n\t\t// Adds the check to add the timers only when both delay and track options are set (#14682)\n\t\tif ( this.options.track && this.options.show && this.options.show.delay ) {\n\t\t\tdelayedShow = this.delayedShow = setInterval( function() {\n\t\t\t\tif ( tooltip.is( \":visible\" ) ) {\n\t\t\t\t\tposition( positionOption.of );\n\t\t\t\t\tclearInterval( delayedShow );\n\t\t\t\t}\n\t\t\t}, 13 );\n\t\t}\n\n\t\tthis._trigger( \"open\", event, { tooltip: tooltip } );\n\t},\n\n\t_registerCloseHandlers: function( event, target ) {\n\t\tvar events = {\n\t\t\tkeyup: function( event ) {\n\t\t\t\tif ( event.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tvar fakeEvent = $.Event( event );\n\t\t\t\t\tfakeEvent.currentTarget = target[ 0 ];\n\t\t\t\t\tthis.close( fakeEvent, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Only bind remove handler for delegated targets. Non-delegated\n\t\t// tooltips will handle this in destroy.\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tevents.remove = function() {\n\t\t\t\tvar targetElement = this._find( target );\n\t\t\t\tif ( targetElement ) {\n\t\t\t\t\tthis._removeTooltip( targetElement.tooltip );\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tif ( !event || event.type === \"mouseover\" ) {\n\t\t\tevents.mouseleave = \"close\";\n\t\t}\n\t\tif ( !event || event.type === \"focusin\" ) {\n\t\t\tevents.focusout = \"close\";\n\t\t}\n\t\tthis._on( true, target, events );\n\t},\n\n\tclose: function( event ) {\n\t\tvar tooltip,\n\t\t\tthat = this,\n\t\t\ttarget = $( event ? event.currentTarget : this.element ),\n\t\t\ttooltipData = this._find( target );\n\n\t\t// The tooltip may already be closed\n\t\tif ( !tooltipData ) {\n\n\t\t\t// We set ui-tooltip-open immediately upon open (in open()), but only set the\n\t\t\t// additional data once there's actually content to show (in _open()). So even if the\n\t\t\t// tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in\n\t\t\t// the period between open() and _open().\n\t\t\ttarget.removeData( \"ui-tooltip-open\" );\n\t\t\treturn;\n\t\t}\n\n\t\ttooltip = tooltipData.tooltip;\n\n\t\t// Disabling closes the tooltip, so we need to track when we're closing\n\t\t// to avoid an infinite loop in case the tooltip becomes disabled on close\n\t\tif ( tooltipData.closing ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clear the interval for delayed tracking tooltips\n\t\tclearInterval( this.delayedShow );\n\n\t\t// Only set title if we had one before (see comment in _open())\n\t\t// If the title attribute has changed since open(), don't restore\n\t\tif ( target.data( \"ui-tooltip-title\" ) && !target.attr( \"title\" ) ) {\n\t\t\ttarget.attr( \"title\", target.data( \"ui-tooltip-title\" ) );\n\t\t}\n\n\t\tthis._removeDescribedBy( target );\n\n\t\ttooltipData.hiding = true;\n\t\ttooltip.stop( true );\n\t\tthis._hide( tooltip, this.options.hide, function() {\n\t\t\tthat._removeTooltip( $( this ) );\n\t\t} );\n\n\t\ttarget.removeData( \"ui-tooltip-open\" );\n\t\tthis._off( target, \"mouseleave focusout keyup\" );\n\n\t\t// Remove 'remove' binding only on delegated targets\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tthis._off( target, \"remove\" );\n\t\t}\n\t\tthis._off( this.document, \"mousemove\" );\n\n\t\tif ( event && event.type === \"mouseleave\" ) {\n\t\t\t$.each( this.parents, function( id, parent ) {\n\t\t\t\t$( parent.element ).attr( \"title\", parent.title );\n\t\t\t\tdelete that.parents[ id ];\n\t\t\t} );\n\t\t}\n\n\t\ttooltipData.closing = true;\n\t\tthis._trigger( \"close\", event, { tooltip: tooltip } );\n\t\tif ( !tooltipData.hiding ) {\n\t\t\ttooltipData.closing = false;\n\t\t}\n\t},\n\n\t_tooltip: function( element ) {\n\t\tvar tooltip = $( \"<div>\" ).attr( \"role\", \"tooltip\" ),\n\t\t\tcontent = $( \"<div>\" ).appendTo( tooltip ),\n\t\t\tid = tooltip.uniqueId().attr( \"id\" );\n\n\t\tthis._addClass( content, \"ui-tooltip-content\" );\n\t\tthis._addClass( tooltip, \"ui-tooltip\", \"ui-widget ui-widget-content\" );\n\n\t\ttooltip.appendTo( this._appendTo( element ) );\n\n\t\treturn this.tooltips[ id ] = {\n\t\t\telement: element,\n\t\t\ttooltip: tooltip\n\t\t};\n\t},\n\n\t_find: function( target ) {\n\t\tvar id = target.data( \"ui-tooltip-id\" );\n\t\treturn id ? this.tooltips[ id ] : null;\n\t},\n\n\t_removeTooltip: function( tooltip ) {\n\n\t\t// Clear the interval for delayed tracking tooltips\n\t\tclearInterval( this.delayedShow );\n\n\t\ttooltip.remove();\n\t\tdelete this.tooltips[ tooltip.attr( \"id\" ) ];\n\t},\n\n\t_appendTo: function( target ) {\n\t\tvar element = target.closest( \".ui-front, dialog\" );\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_destroy: function() {\n\t\tvar that = this;\n\n\t\t// Close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\n\t\t\t// Delegate to close method to handle common cleanup\n\t\t\tvar event = $.Event( \"blur\" ),\n\t\t\t\telement = tooltipData.element;\n\t\t\tevent.target = event.currentTarget = element[ 0 ];\n\t\t\tthat.close( event, true );\n\n\t\t\t// Remove immediately; destroying an open tooltip doesn't use the\n\t\t\t// hide animation\n\t\t\t$( \"#\" + id ).remove();\n\n\t\t\t// Restore the title\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\n\n\t\t\t\t// If the title attribute has changed since open(), don't restore\n\t\t\t\tif ( !element.attr( \"title\" ) ) {\n\t\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\n\t\t\t\t}\n\t\t\t\telement.removeData( \"ui-tooltip-title\" );\n\t\t\t}\n\t\t} );\n\t\tthis.liveRegion.remove();\n\t}\n} );\n\n// DEPRECATED\n// TODO: Switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for tooltipClass option\n\t$.widget( \"ui.tooltip\", $.ui.tooltip, {\n\t\toptions: {\n\t\t\ttooltipClass: null\n\t\t},\n\t\t_tooltip: function() {\n\t\t\tvar tooltipData = this._superApply( arguments );\n\t\t\tif ( this.options.tooltipClass ) {\n\t\t\t\ttooltipData.tooltip.addClass( this.options.tooltipClass );\n\t\t\t}\n\t\t\treturn tooltipData;\n\t\t}\n\t} );\n}\n\nvar widgetsTooltip = $.ui.tooltip;\n\n\n\n\n} );","/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar version = \"3.7.1\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar pop = arr.pop;\n\n\nvar sort = arr.sort;\n\n\nvar splice = arr.splice;\n\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n// Note: an element does not contain itself\njQuery.contains = function( a, b ) {\n\tvar bup = b && b.parentNode;\n\n\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE doesn't have `contains` on SVG.\n\t\ta.contains ?\n\t\t\ta.contains( bup ) :\n\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t) );\n};\n\n\n\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\n\n\n\nvar preferredDoc = document,\n\tpushNative = push;\n\n( function() {\n\nvar i,\n\tExpr,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\tpush = pushNative,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\tmatches,\n\n\t// Instance-specific data\n\texpando = jQuery.expando,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\twhitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\t\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\tATTR: new RegExp( \"^\" + attributes ),\n\t\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\t\tCHILD: new RegExp(\n\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\tbool: new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE/Edge.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android <=4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = {\n\t\tapply: function( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t},\n\t\tcall: function( target ) {\n\t\t\tpushNative.apply( target, slice.call( arguments, 1 ) );\n\t\t}\n\t};\n}\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tfind.contains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: iOS 7 only, IE 9 - 11+\n\t// Older browsers didn't support unprefixed `matches`.\n\tmatches = documentElement.matches ||\n\t\tdocumentElement.webkitMatchesSelector ||\n\t\tdocumentElement.msMatchesSelector;\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors\n\t// (see trac-13936).\n\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n\tif ( documentElement.msMatchesSelector &&\n\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tpreferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n\n\t// Support: IE <10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocumentElement.appendChild( el ).id = jQuery.expando;\n\t\treturn !document.getElementsByName ||\n\t\t\t!document.getElementsByName( jQuery.expando ).length;\n\t} );\n\n\t// Support: IE 9 only\n\t// Check to see if it's possible to do matchesSelector\n\t// on a disconnected node.\n\tsupport.disconnectedMatch = assert( function( el ) {\n\t\treturn matches.call( el, \"*\" );\n\t} );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// IE/Edge don't support the :scope pseudo-class.\n\tsupport.scope = assert( function() {\n\t\treturn document.querySelectorAll( \":scope\" );\n\t} );\n\n\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t// We include `*` in the test to detect buggy implementations that are\n\t// _selectively_ forgiving (specifically when the list includes at least\n\t// one valid selector).\n\t// Note that we treat complete lack of support for `:has()` as if it were\n\t// spec-compliant support, which is fine because use of `:has()` in such\n\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t// anyway.\n\tsupport.cssHas = assert( function() {\n\t\ttry {\n\t\t\tdocument.querySelector( \":has(*,:jqfake)\" );\n\t\t\treturn false;\n\t\t} catch ( e ) {\n\t\t\treturn true;\n\t\t}\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter.ID =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find.TAG = function( tag, context ) {\n\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t// DocumentFragment nodes don't have gEBTN\n\t\t} else {\n\t\t\treturn context.querySelectorAll( tag );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find.CLASS = function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\trbuggyQSA = [];\n\n\t// Build QSA regex\n\t// Regex strategy adopted from Diego Perini\n\tassert( function( el ) {\n\n\t\tvar input;\n\n\t\tdocumentElement.appendChild( el ).innerHTML =\n\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\"<option selected=''></option></select>\";\n\n\t\t// Support: iOS <=7 - 8 only\n\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t}\n\n\t\t// Support: iOS <=7 - 8 only\n\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\trbuggyQSA.push( \"~=\" );\n\t\t}\n\n\t\t// Support: iOS 8 only\n\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t}\n\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\trbuggyQSA.push( \":checked\" );\n\t\t}\n\n\t\t// Support: Windows 8 Native Apps\n\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tdocumentElement.appendChild( el ).disabled = true;\n\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t}\n\n\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t// Adding a temporary attribute to the document before the selection works\n\t\t// around the issue.\n\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"name\", \"\" );\n\t\tel.appendChild( input );\n\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t}\n\t} );\n\n\tif ( !support.cssHas ) {\n\n\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\trbuggyQSA.push( \":has\" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = function( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t};\n\n\treturn document;\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\nfind.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn jQuery.contains( context, elem );\n};\n\n\nfind.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\tif ( val !== undefined ) {\n\t\treturn val;\n\t}\n\n\treturn elem.getAttribute( name );\n};\n\nfind.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\t//\n\t// Support: Android <=4.0+\n\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t// depend on duplicate detection in all browsers without a stable sort.\n\thasDuplicate = !support.sortStable;\n\tsortInput = !support.sortStable && slice.call( results, 0 );\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nExpr = jQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\tATTR: function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" )\n\t\t\t\t.replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\tCHILD: function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t\t);\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = find.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || ( parent[ expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tfind.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tfind.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !Expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos.nth = Expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tfind.error( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t// elements by id. (see trac-14142)\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find.ID(\n\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Support: Android <=4.0 - 4.1+\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Android <=4.0 - 4.1+\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\njQuery.find = find;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.unique = jQuery.uniqueSort;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfind.escape = jQuery.escapeSelector;\nfind.getText = jQuery.text;\nfind.isXML = jQuery.isXMLDoc;\nfind.selectors = jQuery.expr;\nfind.support = jQuery.support;\nfind.uniqueSort = jQuery.uniqueSort;\n\n\t/* eslint-enable */\n\n} )();\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t} else if ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message,\n\t\t\terror.stack, asyncError );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\tfunction focusMappedHandler( nativeEvent ) {\n\t\tif ( document.documentMode ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t// to change the `type` here.\n\t\t\tvar handle = dataPriv.get( this, \"handle\" ),\n\t\t\t\tevent = jQuery.event.fix( nativeEvent );\n\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\tevent.isSimulated = true;\n\n\t\t\t// First, handle focusin/focusout\n\t\t\thandle( nativeEvent );\n\n\t\t\t// ...then, handle focus/blur\n\t\t\t//\n\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t// invoking the handler at the lower level.\n\t\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t// by this point.\n\t\t\t\thandle( event );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t// while someone wants focusin/focusout.\n\t\t\tjQuery.event.simulate( delegateType, nativeEvent.target,\n\t\t\t\tjQuery.event.fix( nativeEvent ) );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\tvar attaches;\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( document.documentMode ) {\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tattaches = dataPriv.get( this, delegateType );\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t}\n\t\t\t\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tvar attaches;\n\n\t\t\tif ( document.documentMode ) {\n\t\t\t\tattaches = dataPriv.get( this, delegateType ) - 1;\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t\tdataPriv.remove( this, delegateType );\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set( this, delegateType, attaches );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n\n\t// Support: Firefox <=44\n\t// Firefox doesn't have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t//\n\t// Support: IE 9 - 11+\n\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t// attach a single handler for both events in IE.\n\tjQuery.event.special[ delegateType ] = {\n\t\tsetup: function() {\n\n\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType );\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.addEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\n\t\t},\n\t\tteardown: function() {\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\n\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.removeEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( dataHolder, delegateType );\n\t\t\t} else {\n\t\t\t\tdataPriv.set( dataHolder, delegateType, attaches );\n\t\t\t}\n\t\t}\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"box-sizing:content-box;border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is `display: block`\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, trac-12537)\n\t//   .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\tanimationIterationCount: true,\n\t\taspectRatio: true,\n\t\tborderImageSlice: true,\n\t\tcolumnCount: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\tscale: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true,\n\n\t\t// SVG-related\n\t\tfillOpacity: true,\n\t\tfloodOpacity: true,\n\t\tstopOpacity: true,\n\t\tstrokeMiterlimit: true,\n\t\tstrokeOpacity: true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\nvar _react = require(\"react\");\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nvar useDetectPrint = function useDetectPrint() {\n  var _useState = (0, _react.useState)(false),\n    _useState2 = _slicedToArray(_useState, 2),\n    isPrinting = _useState2[0],\n    setIsPrinting = _useState2[1];\n  var handleBeforeprint = function handleBeforeprint() {\n    return setIsPrinting(true);\n  };\n  var handleAfterprint = function handleAfterprint() {\n    return setIsPrinting(false);\n  };\n  (0, _react.useEffect)(function () {\n    window.addEventListener(\"beforeprint\", handleBeforeprint);\n    window.addEventListener(\"afterprint\", handleAfterprint);\n    return function () {\n      window.removeEventListener(\"beforeprint\", handleBeforeprint);\n      window.removeEventListener(\"afterprint\", handleAfterprint);\n    };\n  });\n  return isPrinting;\n};\nvar _default = useDetectPrint;\nexports[\"default\"] = _default;\n","/**\n * @license React\n * react-dom.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n\n          'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n    'function'\n) {\n  __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n          var React = require('react');\nvar Scheduler = require('scheduler');\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nvar suppressWarning = false;\nfunction setSuppressWarning(newSuppressWarning) {\n  {\n    suppressWarning = newSuppressWarning;\n  }\n} // In DEV, calls to console.warn and console.error get replaced\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n  {\n    if (!suppressWarning) {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      printWarning('warn', format, args);\n    }\n  }\n}\nfunction error(format) {\n  {\n    if (!suppressWarning) {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      printWarning('error', format, args);\n    }\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n    var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n    if (stack !== '') {\n      format += '%s';\n      args = args.concat([stack]);\n    } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n    var argsWithFormat = args.map(function (item) {\n      return String(item);\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n  }\n}\n\nvar FunctionComponent = 0;\nvar ClassComponent = 1;\nvar IndeterminateComponent = 2; // Before we know whether it is function or class\n\nvar HostRoot = 3; // Root of a host tree. Could be nested inside another node.\n\nvar HostPortal = 4; // A subtree. Could be an entry point to a different renderer.\n\nvar HostComponent = 5;\nvar HostText = 6;\nvar Fragment = 7;\nvar Mode = 8;\nvar ContextConsumer = 9;\nvar ContextProvider = 10;\nvar ForwardRef = 11;\nvar Profiler = 12;\nvar SuspenseComponent = 13;\nvar MemoComponent = 14;\nvar SimpleMemoComponent = 15;\nvar LazyComponent = 16;\nvar IncompleteClassComponent = 17;\nvar DehydratedFragment = 18;\nvar SuspenseListComponent = 19;\nvar ScopeComponent = 21;\nvar OffscreenComponent = 22;\nvar LegacyHiddenComponent = 23;\nvar CacheComponent = 24;\nvar TracingMarkerComponent = 25;\n\n// -----------------------------------------------------------------------------\n\nvar enableClientRenderFallbackOnTextMismatch = true; // TODO: Need to review this code one more time before landing\n// the react-reconciler package.\n\nvar enableNewReconciler = false; // Support legacy Primer support on internal FB www\n\nvar enableLazyContextPropagation = false; // FB-only usage. The new API has different semantics.\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n\nvar enableSuspenseAvoidThisFallback = false; // Enables unstable_avoidThisFallback feature in Fizz\n// React DOM Chopping Block\n//\n// Similar to main Chopping Block but only flags related to React DOM. These are\n// grouped because we will likely batch all of them into a single major release.\n// -----------------------------------------------------------------------------\n// Disable support for comment nodes as React DOM containers. Already disabled\n// in open source, but www codebase still relies on it. Need to remove.\n\nvar disableCommentsAsDOMContainers = true; // Disable javascript: URL strings in href for XSS protection.\n// and client rendering, mostly to allow JSX attributes to apply to the custom\n// element's object properties instead of only HTML attributes.\n// https://github.com/facebook/react/issues/11347\n\nvar enableCustomElementPropertySupport = false; // Disables children for <textarea> elements\nvar warnAboutStringRefs = true; // -----------------------------------------------------------------------------\n// Debugging and DevTools\n// -----------------------------------------------------------------------------\n// Adds user timing marks for e.g. state updates, suspense, and work loop stuff,\n// for an experimental timeline tool.\n\nvar enableSchedulingProfiler = true; // Helps identify side effects in render-phase lifecycle hooks and setState\n\nvar enableProfilerTimer = true; // Record durations for commit and passive effects phases.\n\nvar enableProfilerCommitHooks = true; // Phase param passed to onRender callback differentiates between an \"update\" and a \"cascading-update\".\n\nvar allNativeEvents = new Set();\n/**\n * Mapping from registration name to event name\n */\n\n\nvar registrationNameDependencies = {};\n/**\n * Mapping from lowercase registration names to the properly cased version,\n * used to warn in the case of missing event handlers. Available\n * only in true.\n * @type {Object}\n */\n\nvar possibleRegistrationNames =  {} ; // Trust the developer to only use possibleRegistrationNames in true\n\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n  registerDirectEvent(registrationName, dependencies);\n  registerDirectEvent(registrationName + 'Capture', dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n  {\n    if (registrationNameDependencies[registrationName]) {\n      error('EventRegistry: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName);\n    }\n  }\n\n  registrationNameDependencies[registrationName] = dependencies;\n\n  {\n    var lowerCasedName = registrationName.toLowerCase();\n    possibleRegistrationNames[lowerCasedName] = registrationName;\n\n    if (registrationName === 'onDoubleClick') {\n      possibleRegistrationNames.ondblclick = registrationName;\n    }\n  }\n\n  for (var i = 0; i < dependencies.length; i++) {\n    allNativeEvents.add(dependencies[i]);\n  }\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n  {\n    // toStringTag is needed for namespaced types like Temporal.Instant\n    var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n    var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n    return type;\n  }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n  {\n    try {\n      testStringCoercion(value);\n      return false;\n    } catch (e) {\n      return true;\n    }\n  }\n}\n\nfunction testStringCoercion(value) {\n  // If you ended up here by following an exception call stack, here's what's\n  // happened: you supplied an object or symbol value to React (as a prop, key,\n  // DOM attribute, CSS property, string ref, etc.) and when React tried to\n  // coerce it to a string using `'' + value`, an exception was thrown.\n  //\n  // The most common types that will cause this exception are `Symbol` instances\n  // and Temporal objects like `Temporal.Instant`. But any object that has a\n  // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n  // exception. (Library authors do this to prevent users from using built-in\n  // numeric operators like `+` or comparison operators like `>=` because custom\n  // methods are needed to perform accurate arithmetic or comparison.)\n  //\n  // To fix the problem, coerce this object or symbol value to a string before\n  // passing it to React. The most reliable way is usually `String(value)`.\n  //\n  // To find which value is throwing, check the browser or debugger console.\n  // Before this exception was thrown, there should be `console.error` output\n  // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n  // problem and how that type was used: key, atrribute, input value prop, etc.\n  // In most cases, this console output also shows the component and its\n  // ancestor components where the exception happened.\n  //\n  // eslint-disable-next-line react-internal/safe-string-coercion\n  return '' + value;\n}\n\nfunction checkAttributeStringCoercion(value, attributeName) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided `%s` attribute is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', attributeName, typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\nfunction checkKeyStringCoercion(value) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\nfunction checkPropStringCoercion(value, propName) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided `%s` prop is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', propName, typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\nfunction checkCSSPropertyStringCoercion(value, propName) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided `%s` CSS property is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', propName, typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\nfunction checkHtmlStringCoercion(value) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided HTML markup uses a value of unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\nfunction checkFormFieldValueStringCoercion(value) {\n  {\n    if (willCoercionThrow(value)) {\n      error('Form field values (value, checked, defaultValue, or defaultChecked props)' + ' must be strings, not %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\n\n// A reserved attribute.\n// It is handled by React separately and shouldn't be written to the DOM.\nvar RESERVED = 0; // A simple string attribute.\n// Attributes that aren't in the filter are presumed to have this type.\n\nvar STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called\n// \"enumerated\" attributes with \"true\" and \"false\" as possible values.\n// When true, it should be set to a \"true\" string.\n// When false, it should be set to a \"false\" string.\n\nvar BOOLEANISH_STRING = 2; // A real boolean attribute.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n\nvar BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n// For any other value, should be present with that value.\n\nvar OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.\n// When falsy, it should be removed.\n\nvar NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.\n// When falsy, it should be removed.\n\nvar POSITIVE_NUMERIC = 6;\n\n/* eslint-disable max-len */\nvar ATTRIBUTE_NAME_START_CHAR = \":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n/* eslint-enable max-len */\n\nvar ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + \"\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {\n    return true;\n  }\n\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {\n    return false;\n  }\n\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n    validatedAttributeNameCache[attributeName] = true;\n    return true;\n  }\n\n  illegalAttributeNameCache[attributeName] = true;\n\n  {\n    error('Invalid attribute name: `%s`', attributeName);\n  }\n\n  return false;\n}\nfunction shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) {\n  if (propertyInfo !== null) {\n    return propertyInfo.type === RESERVED;\n  }\n\n  if (isCustomComponentTag) {\n    return false;\n  }\n\n  if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {\n    return true;\n  }\n\n  return false;\n}\nfunction shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {\n  if (propertyInfo !== null && propertyInfo.type === RESERVED) {\n    return false;\n  }\n\n  switch (typeof value) {\n    case 'function': // $FlowIssue symbol is perfectly valid here\n\n    case 'symbol':\n      // eslint-disable-line\n      return true;\n\n    case 'boolean':\n      {\n        if (isCustomComponentTag) {\n          return false;\n        }\n\n        if (propertyInfo !== null) {\n          return !propertyInfo.acceptsBooleans;\n        } else {\n          var prefix = name.toLowerCase().slice(0, 5);\n          return prefix !== 'data-' && prefix !== 'aria-';\n        }\n      }\n\n    default:\n      return false;\n  }\n}\nfunction shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) {\n  if (value === null || typeof value === 'undefined') {\n    return true;\n  }\n\n  if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) {\n    return true;\n  }\n\n  if (isCustomComponentTag) {\n\n    return false;\n  }\n\n  if (propertyInfo !== null) {\n\n    switch (propertyInfo.type) {\n      case BOOLEAN:\n        return !value;\n\n      case OVERLOADED_BOOLEAN:\n        return value === false;\n\n      case NUMERIC:\n        return isNaN(value);\n\n      case POSITIVE_NUMERIC:\n        return isNaN(value) || value < 1;\n    }\n  }\n\n  return false;\n}\nfunction getPropertyInfo(name) {\n  return properties.hasOwnProperty(name) ? properties[name] : null;\n}\n\nfunction PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL, removeEmptyString) {\n  this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;\n  this.attributeName = attributeName;\n  this.attributeNamespace = attributeNamespace;\n  this.mustUseProperty = mustUseProperty;\n  this.propertyName = name;\n  this.type = type;\n  this.sanitizeURL = sanitizeURL;\n  this.removeEmptyString = removeEmptyString;\n} // When adding attributes to this list, be sure to also add them to\n// the `possibleStandardNames` module to ensure casing and incorrect\n// name warnings.\n\n\nvar properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.\n\nvar reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular\n// elements (not just inputs). Now that ReactDOMInput assigns to the\n// defaultValue property -- do we need this?\n'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'];\n\nreservedProps.forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // A few React string attributes have a different name.\n// This is a mapping from React prop names to the attribute names.\n\n[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {\n  var name = _ref[0],\n      attributeName = _ref[1];\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are \"enumerated\" HTML attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n\n['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are \"enumerated\" SVG attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n// Since these are SVG attributes, their attribute names are case-sensitive.\n\n['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are HTML boolean attributes.\n\n['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM\n// on the client side because the browsers are inconsistent. Instead we call focus().\n'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'disableRemotePlayback', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata\n'itemScope'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are the few React props that we set as DOM properties\n// rather than attributes. These are all booleans.\n\n['checked', // Note: `option.selected` is not updated if `select.multiple` is\n// disabled with `removeAttribute`. We have special logic for handling this.\n'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are HTML attributes that are \"overloaded booleans\": they behave like\n// booleans, but can also accept a string value.\n\n['capture', 'download' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are HTML attributes that must be positive numbers.\n\n['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are HTML attributes that must be numbers.\n\n['rowSpan', 'start'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n});\nvar CAMELIZE = /[\\-\\:]([a-z])/g;\n\nvar capitalize = function (token) {\n  return token[1].toUpperCase();\n}; // This is a list of all SVG attributes that need special casing, namespacing,\n// or boolean value assignment. Regular attributes that just accept strings\n// and have the same names are omitted, just like in the HTML attribute filter.\n// Some of these attributes can be hard to find. This list was created by\n// scraping the MDN documentation.\n\n\n['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // String SVG attributes with the xlink namespace.\n\n['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, 'http://www.w3.org/1999/xlink', false, // sanitizeURL\n  false);\n}); // String SVG attributes with the xml namespace.\n\n['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, 'http://www.w3.org/XML/1998/namespace', false, // sanitizeURL\n  false);\n}); // These attribute exists both in HTML and SVG.\n// The attribute name is case-sensitive in SVG so we can't just use\n// the React name like we do for attributes that exist only in HTML.\n\n['tabIndex', 'crossOrigin'].forEach(function (attributeName) {\n  properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n  attributeName.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These attributes accept URLs. These must not allow javascript: URLS.\n// These will also need to accept Trusted Types object in the future.\n\nvar xlinkHref = 'xlinkHref';\nproperties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty\n'xlink:href', 'http://www.w3.org/1999/xlink', true, // sanitizeURL\nfalse);\n['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {\n  properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n  attributeName.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  true, // sanitizeURL\n  true);\n});\n\n// and any newline or tab are filtered out as if they're not part of the URL.\n// https://url.spec.whatwg.org/#url-parsing\n// Tab or newline are defined as \\r\\n\\t:\n// https://infra.spec.whatwg.org/#ascii-tab-or-newline\n// A C0 control is a code point in the range \\u0000 NULL to \\u001F\n// INFORMATION SEPARATOR ONE, inclusive:\n// https://infra.spec.whatwg.org/#c0-control-or-space\n\n/* eslint-disable max-len */\n\nvar isJavaScriptProtocol = /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*\\:/i;\nvar didWarn = false;\n\nfunction sanitizeURL(url) {\n  {\n    if (!didWarn && isJavaScriptProtocol.test(url)) {\n      didWarn = true;\n\n      error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url));\n    }\n  }\n}\n\n/**\n * Get the value for a property on a node. Only used in DEV for SSR validation.\n * The \"expected\" argument is used as a hint of what the expected value is.\n * Some properties have multiple equivalent values.\n */\nfunction getValueForProperty(node, name, expected, propertyInfo) {\n  {\n    if (propertyInfo.mustUseProperty) {\n      var propertyName = propertyInfo.propertyName;\n      return node[propertyName];\n    } else {\n      // This check protects multiple uses of `expected`, which is why the\n      // react-internal/safe-string-coercion rule is disabled in several spots\n      // below.\n      {\n        checkAttributeStringCoercion(expected, name);\n      }\n\n      if ( propertyInfo.sanitizeURL) {\n        // If we haven't fully disabled javascript: URLs, and if\n        // the hydration is successful of a javascript: URL, we\n        // still want to warn on the client.\n        // eslint-disable-next-line react-internal/safe-string-coercion\n        sanitizeURL('' + expected);\n      }\n\n      var attributeName = propertyInfo.attributeName;\n      var stringValue = null;\n\n      if (propertyInfo.type === OVERLOADED_BOOLEAN) {\n        if (node.hasAttribute(attributeName)) {\n          var value = node.getAttribute(attributeName);\n\n          if (value === '') {\n            return true;\n          }\n\n          if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n            return value;\n          } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n          if (value === '' + expected) {\n            return expected;\n          }\n\n          return value;\n        }\n      } else if (node.hasAttribute(attributeName)) {\n        if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n          // We had an attribute but shouldn't have had one, so read it\n          // for the error message.\n          return node.getAttribute(attributeName);\n        }\n\n        if (propertyInfo.type === BOOLEAN) {\n          // If this was a boolean, it doesn't matter what the value is\n          // the fact that we have it is the same as the expected.\n          return expected;\n        } // Even if this property uses a namespace we use getAttribute\n        // because we assume its namespaced name is the same as our config.\n        // To use getAttributeNS we need the local name which we don't have\n        // in our config atm.\n\n\n        stringValue = node.getAttribute(attributeName);\n      }\n\n      if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n        return stringValue === null ? expected : stringValue; // eslint-disable-next-line react-internal/safe-string-coercion\n      } else if (stringValue === '' + expected) {\n        return expected;\n      } else {\n        return stringValue;\n      }\n    }\n  }\n}\n/**\n * Get the value for a attribute on a node. Only used in DEV for SSR validation.\n * The third argument is used as a hint of what the expected value is. Some\n * attributes have multiple equivalent values.\n */\n\nfunction getValueForAttribute(node, name, expected, isCustomComponentTag) {\n  {\n    if (!isAttributeNameSafe(name)) {\n      return;\n    }\n\n    if (!node.hasAttribute(name)) {\n      return expected === undefined ? undefined : null;\n    }\n\n    var value = node.getAttribute(name);\n\n    {\n      checkAttributeStringCoercion(expected, name);\n    }\n\n    if (value === '' + expected) {\n      return expected;\n    }\n\n    return value;\n  }\n}\n/**\n * Sets the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n * @param {*} value\n */\n\nfunction setValueForProperty(node, name, value, isCustomComponentTag) {\n  var propertyInfo = getPropertyInfo(name);\n\n  if (shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag)) {\n    return;\n  }\n\n  if (shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag)) {\n    value = null;\n  }\n\n\n  if (isCustomComponentTag || propertyInfo === null) {\n    if (isAttributeNameSafe(name)) {\n      var _attributeName = name;\n\n      if (value === null) {\n        node.removeAttribute(_attributeName);\n      } else {\n        {\n          checkAttributeStringCoercion(value, name);\n        }\n\n        node.setAttribute(_attributeName,  '' + value);\n      }\n    }\n\n    return;\n  }\n\n  var mustUseProperty = propertyInfo.mustUseProperty;\n\n  if (mustUseProperty) {\n    var propertyName = propertyInfo.propertyName;\n\n    if (value === null) {\n      var type = propertyInfo.type;\n      node[propertyName] = type === BOOLEAN ? false : '';\n    } else {\n      // Contrary to `setAttribute`, object properties are properly\n      // `toString`ed by IE8/9.\n      node[propertyName] = value;\n    }\n\n    return;\n  } // The rest are treated as attributes with special cases.\n\n\n  var attributeName = propertyInfo.attributeName,\n      attributeNamespace = propertyInfo.attributeNamespace;\n\n  if (value === null) {\n    node.removeAttribute(attributeName);\n  } else {\n    var _type = propertyInfo.type;\n    var attributeValue;\n\n    if (_type === BOOLEAN || _type === OVERLOADED_BOOLEAN && value === true) {\n      // If attribute type is boolean, we know for sure it won't be an execution sink\n      // and we won't require Trusted Type here.\n      attributeValue = '';\n    } else {\n      // `setAttribute` with objects becomes only `[object]` in IE8/9,\n      // ('' + value) makes it output the correct toString()-value.\n      {\n        {\n          checkAttributeStringCoercion(value, attributeName);\n        }\n\n        attributeValue = '' + value;\n      }\n\n      if (propertyInfo.sanitizeURL) {\n        sanitizeURL(attributeValue.toString());\n      }\n    }\n\n    if (attributeNamespace) {\n      node.setAttributeNS(attributeNamespace, attributeName, attributeValue);\n    } else {\n      node.setAttribute(attributeName, attributeValue);\n    }\n  }\n}\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_SCOPE_TYPE = Symbol.for('react.scope');\nvar REACT_DEBUG_TRACING_MODE_TYPE = Symbol.for('react.debug_trace_mode');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar REACT_LEGACY_HIDDEN_TYPE = Symbol.for('react.legacy_hidden');\nvar REACT_CACHE_TYPE = Symbol.for('react.cache');\nvar REACT_TRACING_MARKER_TYPE = Symbol.for('react.tracing_marker');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n  {\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      prevLog = console.log;\n      prevInfo = console.info;\n      prevWarn = console.warn;\n      prevError = console.error;\n      prevGroup = console.group;\n      prevGroupCollapsed = console.groupCollapsed;\n      prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n      var props = {\n        configurable: true,\n        enumerable: true,\n        value: disabledLog,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        info: props,\n        log: props,\n        warn: props,\n        error: props,\n        group: props,\n        groupCollapsed: props,\n        groupEnd: props\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    disabledDepth++;\n  }\n}\nfunction reenableLogs() {\n  {\n    disabledDepth--;\n\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      var props = {\n        configurable: true,\n        enumerable: true,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        log: assign({}, props, {\n          value: prevLog\n        }),\n        info: assign({}, props, {\n          value: prevInfo\n        }),\n        warn: assign({}, props, {\n          value: prevWarn\n        }),\n        error: assign({}, props, {\n          value: prevError\n        }),\n        group: assign({}, props, {\n          value: prevGroup\n        }),\n        groupCollapsed: assign({}, props, {\n          value: prevGroupCollapsed\n        }),\n        groupEnd: assign({}, props, {\n          value: prevGroupEnd\n        })\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    if (disabledDepth < 0) {\n      error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n    }\n  }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n  {\n    if (prefix === undefined) {\n      // Extract the VM specific prefix used by each line.\n      try {\n        throw Error();\n      } catch (x) {\n        var match = x.stack.trim().match(/\\n( *(at )?)/);\n        prefix = match && match[1] || '';\n      }\n    } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n    return '\\n' + prefix + name;\n  }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n  var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n  componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n  // If something asked for a stack inside a fake render, it should get ignored.\n  if ( !fn || reentry) {\n    return '';\n  }\n\n  {\n    var frame = componentFrameCache.get(fn);\n\n    if (frame !== undefined) {\n      return frame;\n    }\n  }\n\n  var control;\n  reentry = true;\n  var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n  Error.prepareStackTrace = undefined;\n  var previousDispatcher;\n\n  {\n    previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n    // for warnings.\n\n    ReactCurrentDispatcher.current = null;\n    disableLogs();\n  }\n\n  try {\n    // This should throw.\n    if (construct) {\n      // Something should be setting the props in the constructor.\n      var Fake = function () {\n        throw Error();\n      }; // $FlowFixMe\n\n\n      Object.defineProperty(Fake.prototype, 'props', {\n        set: function () {\n          // We use a throwing setter instead of frozen or non-writable props\n          // because that won't throw in a non-strict mode function.\n          throw Error();\n        }\n      });\n\n      if (typeof Reflect === 'object' && Reflect.construct) {\n        // We construct a different control for this case to include any extra\n        // frames added by the construct call.\n        try {\n          Reflect.construct(Fake, []);\n        } catch (x) {\n          control = x;\n        }\n\n        Reflect.construct(fn, [], Fake);\n      } else {\n        try {\n          Fake.call();\n        } catch (x) {\n          control = x;\n        }\n\n        fn.call(Fake.prototype);\n      }\n    } else {\n      try {\n        throw Error();\n      } catch (x) {\n        control = x;\n      }\n\n      fn();\n    }\n  } catch (sample) {\n    // This is inlined manually because closure doesn't do it for us.\n    if (sample && control && typeof sample.stack === 'string') {\n      // This extracts the first frame from the sample that isn't also in the control.\n      // Skipping one frame that we assume is the frame that calls the two.\n      var sampleLines = sample.stack.split('\\n');\n      var controlLines = control.stack.split('\\n');\n      var s = sampleLines.length - 1;\n      var c = controlLines.length - 1;\n\n      while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n        // We expect at least one stack frame to be shared.\n        // Typically this will be the root most one. However, stack frames may be\n        // cut off due to maximum stack limits. In this case, one maybe cut off\n        // earlier than the other. We assume that the sample is longer or the same\n        // and there for cut off earlier. So we should find the root most frame in\n        // the sample somewhere in the control.\n        c--;\n      }\n\n      for (; s >= 1 && c >= 0; s--, c--) {\n        // Next we find the first one that isn't the same which should be the\n        // frame that called our sample function and the control.\n        if (sampleLines[s] !== controlLines[c]) {\n          // In V8, the first line is describing the message but other VMs don't.\n          // If we're about to return the first line, and the control is also on the same\n          // line, that's a pretty good indicator that our sample threw at same line as\n          // the control. I.e. before we entered the sample frame. So we ignore this result.\n          // This can happen if you passed a class to function component, or non-function.\n          if (s !== 1 || c !== 1) {\n            do {\n              s--;\n              c--; // We may still have similar intermediate frames from the construct call.\n              // The next one that isn't the same should be our match though.\n\n              if (c < 0 || sampleLines[s] !== controlLines[c]) {\n                // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n                var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n                // but we have a user-provided \"displayName\"\n                // splice it in to make the stack more readable.\n\n\n                if (fn.displayName && _frame.includes('<anonymous>')) {\n                  _frame = _frame.replace('<anonymous>', fn.displayName);\n                }\n\n                {\n                  if (typeof fn === 'function') {\n                    componentFrameCache.set(fn, _frame);\n                  }\n                } // Return the line we found.\n\n\n                return _frame;\n              }\n            } while (s >= 1 && c >= 0);\n          }\n\n          break;\n        }\n      }\n    }\n  } finally {\n    reentry = false;\n\n    {\n      ReactCurrentDispatcher.current = previousDispatcher;\n      reenableLogs();\n    }\n\n    Error.prepareStackTrace = previousPrepareStackTrace;\n  } // Fallback to just using the name if we couldn't make it throw.\n\n\n  var name = fn ? fn.displayName || fn.name : '';\n  var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n  {\n    if (typeof fn === 'function') {\n      componentFrameCache.set(fn, syntheticFrame);\n    }\n  }\n\n  return syntheticFrame;\n}\n\nfunction describeClassComponentFrame(ctor, source, ownerFn) {\n  {\n    return describeNativeComponentFrame(ctor, true);\n  }\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n  {\n    return describeNativeComponentFrame(fn, false);\n  }\n}\n\nfunction shouldConstruct(Component) {\n  var prototype = Component.prototype;\n  return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n  if (type == null) {\n    return '';\n  }\n\n  if (typeof type === 'function') {\n    {\n      return describeNativeComponentFrame(type, shouldConstruct(type));\n    }\n  }\n\n  if (typeof type === 'string') {\n    return describeBuiltInComponentFrame(type);\n  }\n\n  switch (type) {\n    case REACT_SUSPENSE_TYPE:\n      return describeBuiltInComponentFrame('Suspense');\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return describeBuiltInComponentFrame('SuspenseList');\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_FORWARD_REF_TYPE:\n        return describeFunctionComponentFrame(type.render);\n\n      case REACT_MEMO_TYPE:\n        // Memo may contain any component type so we recursively resolve it.\n        return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            // Lazy may contain any component type so we recursively resolve it.\n            return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n          } catch (x) {}\n        }\n    }\n  }\n\n  return '';\n}\n\nfunction describeFiber(fiber) {\n  var owner =  fiber._debugOwner ? fiber._debugOwner.type : null ;\n  var source =  fiber._debugSource ;\n\n  switch (fiber.tag) {\n    case HostComponent:\n      return describeBuiltInComponentFrame(fiber.type);\n\n    case LazyComponent:\n      return describeBuiltInComponentFrame('Lazy');\n\n    case SuspenseComponent:\n      return describeBuiltInComponentFrame('Suspense');\n\n    case SuspenseListComponent:\n      return describeBuiltInComponentFrame('SuspenseList');\n\n    case FunctionComponent:\n    case IndeterminateComponent:\n    case SimpleMemoComponent:\n      return describeFunctionComponentFrame(fiber.type);\n\n    case ForwardRef:\n      return describeFunctionComponentFrame(fiber.type.render);\n\n    case ClassComponent:\n      return describeClassComponentFrame(fiber.type);\n\n    default:\n      return '';\n  }\n}\n\nfunction getStackByFiberInDevAndProd(workInProgress) {\n  try {\n    var info = '';\n    var node = workInProgress;\n\n    do {\n      info += describeFiber(node);\n      node = node.return;\n    } while (node);\n\n    return info;\n  } catch (x) {\n    return '\\nError generating stack: ' + x.message + '\\n' + x.stack;\n  }\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var displayName = outerType.displayName;\n\n  if (displayName) {\n    return displayName;\n  }\n\n  var functionName = innerType.displayName || innerType.name || '';\n  return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n  return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  {\n    if (typeof type.tag === 'number') {\n      error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n    }\n  }\n\n  if (typeof type === 'function') {\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return 'Profiler';\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        var context = type;\n        return getContextName(context) + '.Consumer';\n\n      case REACT_PROVIDER_TYPE:\n        var provider = type;\n        return getContextName(provider._context) + '.Provider';\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        var outerName = type.displayName || null;\n\n        if (outerName !== null) {\n          return outerName;\n        }\n\n        return getComponentNameFromType(type.type) || 'Memo';\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            return getComponentNameFromType(init(payload));\n          } catch (x) {\n            return null;\n          }\n        }\n\n      // eslint-disable-next-line no-fallthrough\n    }\n  }\n\n  return null;\n}\n\nfunction getWrappedName$1(outerType, innerType, wrapperName) {\n  var functionName = innerType.displayName || innerType.name || '';\n  return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n} // Keep in sync with shared/getComponentNameFromType\n\n\nfunction getContextName$1(type) {\n  return type.displayName || 'Context';\n}\n\nfunction getComponentNameFromFiber(fiber) {\n  var tag = fiber.tag,\n      type = fiber.type;\n\n  switch (tag) {\n    case CacheComponent:\n      return 'Cache';\n\n    case ContextConsumer:\n      var context = type;\n      return getContextName$1(context) + '.Consumer';\n\n    case ContextProvider:\n      var provider = type;\n      return getContextName$1(provider._context) + '.Provider';\n\n    case DehydratedFragment:\n      return 'DehydratedFragment';\n\n    case ForwardRef:\n      return getWrappedName$1(type, type.render, 'ForwardRef');\n\n    case Fragment:\n      return 'Fragment';\n\n    case HostComponent:\n      // Host component type is the display name (e.g. \"div\", \"View\")\n      return type;\n\n    case HostPortal:\n      return 'Portal';\n\n    case HostRoot:\n      return 'Root';\n\n    case HostText:\n      return 'Text';\n\n    case LazyComponent:\n      // Name comes from the type in this case; we don't have a tag.\n      return getComponentNameFromType(type);\n\n    case Mode:\n      if (type === REACT_STRICT_MODE_TYPE) {\n        // Don't be less specific than shared/getComponentNameFromType\n        return 'StrictMode';\n      }\n\n      return 'Mode';\n\n    case OffscreenComponent:\n      return 'Offscreen';\n\n    case Profiler:\n      return 'Profiler';\n\n    case ScopeComponent:\n      return 'Scope';\n\n    case SuspenseComponent:\n      return 'Suspense';\n\n    case SuspenseListComponent:\n      return 'SuspenseList';\n\n    case TracingMarkerComponent:\n      return 'TracingMarker';\n    // The display name for this tags come from the user-provided type:\n\n    case ClassComponent:\n    case FunctionComponent:\n    case IncompleteClassComponent:\n    case IndeterminateComponent:\n    case MemoComponent:\n    case SimpleMemoComponent:\n      if (typeof type === 'function') {\n        return type.displayName || type.name || null;\n      }\n\n      if (typeof type === 'string') {\n        return type;\n      }\n\n      break;\n\n  }\n\n  return null;\n}\n\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\nvar current = null;\nvar isRendering = false;\nfunction getCurrentFiberOwnerNameInDevOrNull() {\n  {\n    if (current === null) {\n      return null;\n    }\n\n    var owner = current._debugOwner;\n\n    if (owner !== null && typeof owner !== 'undefined') {\n      return getComponentNameFromFiber(owner);\n    }\n  }\n\n  return null;\n}\n\nfunction getCurrentFiberStackInDev() {\n  {\n    if (current === null) {\n      return '';\n    } // Safe because if current fiber exists, we are reconciling,\n    // and it is guaranteed to be the work-in-progress version.\n\n\n    return getStackByFiberInDevAndProd(current);\n  }\n}\n\nfunction resetCurrentFiber() {\n  {\n    ReactDebugCurrentFrame.getCurrentStack = null;\n    current = null;\n    isRendering = false;\n  }\n}\nfunction setCurrentFiber(fiber) {\n  {\n    ReactDebugCurrentFrame.getCurrentStack = fiber === null ? null : getCurrentFiberStackInDev;\n    current = fiber;\n    isRendering = false;\n  }\n}\nfunction getCurrentFiber() {\n  {\n    return current;\n  }\n}\nfunction setIsRendering(rendering) {\n  {\n    isRendering = rendering;\n  }\n}\n\n// Flow does not allow string concatenation of most non-string types. To work\n// around this limitation, we use an opaque type that can only be obtained by\n// passing the value through getToStringValue first.\nfunction toString(value) {\n  // The coercion safety check is performed in getToStringValue().\n  // eslint-disable-next-line react-internal/safe-string-coercion\n  return '' + value;\n}\nfunction getToStringValue(value) {\n  switch (typeof value) {\n    case 'boolean':\n    case 'number':\n    case 'string':\n    case 'undefined':\n      return value;\n\n    case 'object':\n      {\n        checkFormFieldValueStringCoercion(value);\n      }\n\n      return value;\n\n    default:\n      // function, symbol are assigned as empty strings\n      return '';\n  }\n}\n\nvar hasReadOnlyValue = {\n  button: true,\n  checkbox: true,\n  image: true,\n  hidden: true,\n  radio: true,\n  reset: true,\n  submit: true\n};\nfunction checkControlledValueProps(tagName, props) {\n  {\n    if (!(hasReadOnlyValue[props.type] || props.onChange || props.onInput || props.readOnly || props.disabled || props.value == null)) {\n      error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n    }\n\n    if (!(props.onChange || props.readOnly || props.disabled || props.checked == null)) {\n      error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n    }\n  }\n}\n\nfunction isCheckable(elem) {\n  var type = elem.type;\n  var nodeName = elem.nodeName;\n  return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio');\n}\n\nfunction getTracker(node) {\n  return node._valueTracker;\n}\n\nfunction detachTracker(node) {\n  node._valueTracker = null;\n}\n\nfunction getValueFromNode(node) {\n  var value = '';\n\n  if (!node) {\n    return value;\n  }\n\n  if (isCheckable(node)) {\n    value = node.checked ? 'true' : 'false';\n  } else {\n    value = node.value;\n  }\n\n  return value;\n}\n\nfunction trackValueOnNode(node) {\n  var valueField = isCheckable(node) ? 'checked' : 'value';\n  var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);\n\n  {\n    checkFormFieldValueStringCoercion(node[valueField]);\n  }\n\n  var currentValue = '' + node[valueField]; // if someone has already defined a value or Safari, then bail\n  // and don't track value will cause over reporting of changes,\n  // but it's better then a hard failure\n  // (needed for certain tests that spyOn input values and Safari)\n\n  if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {\n    return;\n  }\n\n  var get = descriptor.get,\n      set = descriptor.set;\n  Object.defineProperty(node, valueField, {\n    configurable: true,\n    get: function () {\n      return get.call(this);\n    },\n    set: function (value) {\n      {\n        checkFormFieldValueStringCoercion(value);\n      }\n\n      currentValue = '' + value;\n      set.call(this, value);\n    }\n  }); // We could've passed this the first time\n  // but it triggers a bug in IE11 and Edge 14/15.\n  // Calling defineProperty() again should be equivalent.\n  // https://github.com/facebook/react/issues/11768\n\n  Object.defineProperty(node, valueField, {\n    enumerable: descriptor.enumerable\n  });\n  var tracker = {\n    getValue: function () {\n      return currentValue;\n    },\n    setValue: function (value) {\n      {\n        checkFormFieldValueStringCoercion(value);\n      }\n\n      currentValue = '' + value;\n    },\n    stopTracking: function () {\n      detachTracker(node);\n      delete node[valueField];\n    }\n  };\n  return tracker;\n}\n\nfunction track(node) {\n  if (getTracker(node)) {\n    return;\n  } // TODO: Once it's just Fiber we can move this to node._wrapperState\n\n\n  node._valueTracker = trackValueOnNode(node);\n}\nfunction updateValueIfChanged(node) {\n  if (!node) {\n    return false;\n  }\n\n  var tracker = getTracker(node); // if there is no tracker at this point it's unlikely\n  // that trying again will succeed\n\n  if (!tracker) {\n    return true;\n  }\n\n  var lastValue = tracker.getValue();\n  var nextValue = getValueFromNode(node);\n\n  if (nextValue !== lastValue) {\n    tracker.setValue(nextValue);\n    return true;\n  }\n\n  return false;\n}\n\nfunction getActiveElement(doc) {\n  doc = doc || (typeof document !== 'undefined' ? document : undefined);\n\n  if (typeof doc === 'undefined') {\n    return null;\n  }\n\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\n\nvar didWarnValueDefaultValue = false;\nvar didWarnCheckedDefaultChecked = false;\nvar didWarnControlledToUncontrolled = false;\nvar didWarnUncontrolledToControlled = false;\n\nfunction isControlled(props) {\n  var usesChecked = props.type === 'checkbox' || props.type === 'radio';\n  return usesChecked ? props.checked != null : props.value != null;\n}\n/**\n * Implements an <input> host component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\n\n\nfunction getHostProps(element, props) {\n  var node = element;\n  var checked = props.checked;\n  var hostProps = assign({}, props, {\n    defaultChecked: undefined,\n    defaultValue: undefined,\n    value: undefined,\n    checked: checked != null ? checked : node._wrapperState.initialChecked\n  });\n  return hostProps;\n}\nfunction initWrapperState(element, props) {\n  {\n    checkControlledValueProps('input', props);\n\n    if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\n      error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n      didWarnCheckedDefaultChecked = true;\n    }\n\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n      error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n      didWarnValueDefaultValue = true;\n    }\n  }\n\n  var node = element;\n  var defaultValue = props.defaultValue == null ? '' : props.defaultValue;\n  node._wrapperState = {\n    initialChecked: props.checked != null ? props.checked : props.defaultChecked,\n    initialValue: getToStringValue(props.value != null ? props.value : defaultValue),\n    controlled: isControlled(props)\n  };\n}\nfunction updateChecked(element, props) {\n  var node = element;\n  var checked = props.checked;\n\n  if (checked != null) {\n    setValueForProperty(node, 'checked', checked, false);\n  }\n}\nfunction updateWrapper(element, props) {\n  var node = element;\n\n  {\n    var controlled = isControlled(props);\n\n    if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {\n      error('A component is changing an uncontrolled input to be controlled. ' + 'This is likely caused by the value changing from undefined to ' + 'a defined value, which should not happen. ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components');\n\n      didWarnUncontrolledToControlled = true;\n    }\n\n    if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {\n      error('A component is changing a controlled input to be uncontrolled. ' + 'This is likely caused by the value changing from a defined to ' + 'undefined, which should not happen. ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components');\n\n      didWarnControlledToUncontrolled = true;\n    }\n  }\n\n  updateChecked(element, props);\n  var value = getToStringValue(props.value);\n  var type = props.type;\n\n  if (value != null) {\n    if (type === 'number') {\n      if (value === 0 && node.value === '' || // We explicitly want to coerce to number here if possible.\n      // eslint-disable-next-line\n      node.value != value) {\n        node.value = toString(value);\n      }\n    } else if (node.value !== toString(value)) {\n      node.value = toString(value);\n    }\n  } else if (type === 'submit' || type === 'reset') {\n    // Submit/reset inputs need the attribute removed completely to avoid\n    // blank-text buttons.\n    node.removeAttribute('value');\n    return;\n  }\n\n  {\n    // When syncing the value attribute, the value comes from a cascade of\n    // properties:\n    //  1. The value React property\n    //  2. The defaultValue React property\n    //  3. Otherwise there should be no change\n    if (props.hasOwnProperty('value')) {\n      setDefaultValue(node, props.type, value);\n    } else if (props.hasOwnProperty('defaultValue')) {\n      setDefaultValue(node, props.type, getToStringValue(props.defaultValue));\n    }\n  }\n\n  {\n    // When syncing the checked attribute, it only changes when it needs\n    // to be removed, such as transitioning from a checkbox into a text input\n    if (props.checked == null && props.defaultChecked != null) {\n      node.defaultChecked = !!props.defaultChecked;\n    }\n  }\n}\nfunction postMountWrapper(element, props, isHydrating) {\n  var node = element; // Do not assign value if it is already set. This prevents user text input\n  // from being lost during SSR hydration.\n\n  if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) {\n    var type = props.type;\n    var isButton = type === 'submit' || type === 'reset'; // Avoid setting value attribute on submit/reset inputs as it overrides the\n    // default value provided by the browser. See: #12872\n\n    if (isButton && (props.value === undefined || props.value === null)) {\n      return;\n    }\n\n    var initialValue = toString(node._wrapperState.initialValue); // Do not assign value if it is already set. This prevents user text input\n    // from being lost during SSR hydration.\n\n    if (!isHydrating) {\n      {\n        // When syncing the value attribute, the value property should use\n        // the wrapperState._initialValue property. This uses:\n        //\n        //   1. The value React property when present\n        //   2. The defaultValue React property when present\n        //   3. An empty string\n        if (initialValue !== node.value) {\n          node.value = initialValue;\n        }\n      }\n    }\n\n    {\n      // Otherwise, the value attribute is synchronized to the property,\n      // so we assign defaultValue to the same thing as the value property\n      // assignment step above.\n      node.defaultValue = initialValue;\n    }\n  } // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug\n  // this is needed to work around a chrome bug where setting defaultChecked\n  // will sometimes influence the value of checked (even after detachment).\n  // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416\n  // We need to temporarily unset name to avoid disrupting radio button groups.\n\n\n  var name = node.name;\n\n  if (name !== '') {\n    node.name = '';\n  }\n\n  {\n    // When syncing the checked attribute, both the checked property and\n    // attribute are assigned at the same time using defaultChecked. This uses:\n    //\n    //   1. The checked React property when present\n    //   2. The defaultChecked React property when present\n    //   3. Otherwise, false\n    node.defaultChecked = !node.defaultChecked;\n    node.defaultChecked = !!node._wrapperState.initialChecked;\n  }\n\n  if (name !== '') {\n    node.name = name;\n  }\n}\nfunction restoreControlledState(element, props) {\n  var node = element;\n  updateWrapper(node, props);\n  updateNamedCousins(node, props);\n}\n\nfunction updateNamedCousins(rootNode, props) {\n  var name = props.name;\n\n  if (props.type === 'radio' && name != null) {\n    var queryRoot = rootNode;\n\n    while (queryRoot.parentNode) {\n      queryRoot = queryRoot.parentNode;\n    } // If `rootNode.form` was non-null, then we could try `form.elements`,\n    // but that sometimes behaves strangely in IE8. We could also try using\n    // `form.getElementsByName`, but that will only return direct children\n    // and won't include inputs that use the HTML5 `form=` attribute. Since\n    // the input might not even be in a form. It might not even be in the\n    // document. Let's just use the local `querySelectorAll` to ensure we don't\n    // miss anything.\n\n\n    {\n      checkAttributeStringCoercion(name, 'name');\n    }\n\n    var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n    for (var i = 0; i < group.length; i++) {\n      var otherNode = group[i];\n\n      if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n        continue;\n      } // This will throw if radio buttons rendered by different copies of React\n      // and the same name are rendered into the same form (same as #1939).\n      // That's probably okay; we don't support it just as we don't support\n      // mixing React radio buttons with non-React ones.\n\n\n      var otherProps = getFiberCurrentPropsFromNode(otherNode);\n\n      if (!otherProps) {\n        throw new Error('ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.');\n      } // We need update the tracked value on the named cousin since the value\n      // was changed but the input saw no event or value set\n\n\n      updateValueIfChanged(otherNode); // If this is a controlled radio button group, forcing the input that\n      // was previously checked to update will cause it to be come re-checked\n      // as appropriate.\n\n      updateWrapper(otherNode, otherProps);\n    }\n  }\n} // In Chrome, assigning defaultValue to certain input types triggers input validation.\n// For number inputs, the display value loses trailing decimal points. For email inputs,\n// Chrome raises \"The specified value <x> is not a valid email address\".\n//\n// Here we check to see if the defaultValue has actually changed, avoiding these problems\n// when the user is inputting text\n//\n// https://github.com/facebook/react/issues/7253\n\n\nfunction setDefaultValue(node, type, value) {\n  if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js\n  type !== 'number' || getActiveElement(node.ownerDocument) !== node) {\n    if (value == null) {\n      node.defaultValue = toString(node._wrapperState.initialValue);\n    } else if (node.defaultValue !== toString(value)) {\n      node.defaultValue = toString(value);\n    }\n  }\n}\n\nvar didWarnSelectedSetOnOption = false;\nvar didWarnInvalidChild = false;\nvar didWarnInvalidInnerHTML = false;\n/**\n * Implements an <option> host component that warns when `selected` is set.\n */\n\nfunction validateProps(element, props) {\n  {\n    // If a value is not provided, then the children must be simple.\n    if (props.value == null) {\n      if (typeof props.children === 'object' && props.children !== null) {\n        React.Children.forEach(props.children, function (child) {\n          if (child == null) {\n            return;\n          }\n\n          if (typeof child === 'string' || typeof child === 'number') {\n            return;\n          }\n\n          if (!didWarnInvalidChild) {\n            didWarnInvalidChild = true;\n\n            error('Cannot infer the option value of complex children. ' + 'Pass a `value` prop or use a plain string as children to <option>.');\n          }\n        });\n      } else if (props.dangerouslySetInnerHTML != null) {\n        if (!didWarnInvalidInnerHTML) {\n          didWarnInvalidInnerHTML = true;\n\n          error('Pass a `value` prop if you set dangerouslyInnerHTML so React knows ' + 'which value should be selected.');\n        }\n      }\n    } // TODO: Remove support for `selected` in <option>.\n\n\n    if (props.selected != null && !didWarnSelectedSetOnOption) {\n      error('Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.');\n\n      didWarnSelectedSetOnOption = true;\n    }\n  }\n}\nfunction postMountWrapper$1(element, props) {\n  // value=\"\" should make a value attribute (#6219)\n  if (props.value != null) {\n    element.setAttribute('value', toString(getToStringValue(props.value)));\n  }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n  return isArrayImpl(a);\n}\n\nvar didWarnValueDefaultValue$1;\n\n{\n  didWarnValueDefaultValue$1 = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n  var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n\n  if (ownerName) {\n    return '\\n\\nCheck the render method of `' + ownerName + '`.';\n  }\n\n  return '';\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n/**\n * Validation function for `value` and `defaultValue`.\n */\n\nfunction checkSelectPropTypes(props) {\n  {\n    checkControlledValueProps('select', props);\n\n    for (var i = 0; i < valuePropNames.length; i++) {\n      var propName = valuePropNames[i];\n\n      if (props[propName] == null) {\n        continue;\n      }\n\n      var propNameIsArray = isArray(props[propName]);\n\n      if (props.multiple && !propNameIsArray) {\n        error('The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum());\n      } else if (!props.multiple && propNameIsArray) {\n        error('The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum());\n      }\n    }\n  }\n}\n\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n  var options = node.options;\n\n  if (multiple) {\n    var selectedValues = propValue;\n    var selectedValue = {};\n\n    for (var i = 0; i < selectedValues.length; i++) {\n      // Prefix to avoid chaos with special keys.\n      selectedValue['$' + selectedValues[i]] = true;\n    }\n\n    for (var _i = 0; _i < options.length; _i++) {\n      var selected = selectedValue.hasOwnProperty('$' + options[_i].value);\n\n      if (options[_i].selected !== selected) {\n        options[_i].selected = selected;\n      }\n\n      if (selected && setDefaultSelected) {\n        options[_i].defaultSelected = true;\n      }\n    }\n  } else {\n    // Do not set `select.value` as exact behavior isn't consistent across all\n    // browsers for all cases.\n    var _selectedValue = toString(getToStringValue(propValue));\n\n    var defaultSelected = null;\n\n    for (var _i2 = 0; _i2 < options.length; _i2++) {\n      if (options[_i2].value === _selectedValue) {\n        options[_i2].selected = true;\n\n        if (setDefaultSelected) {\n          options[_i2].defaultSelected = true;\n        }\n\n        return;\n      }\n\n      if (defaultSelected === null && !options[_i2].disabled) {\n        defaultSelected = options[_i2];\n      }\n    }\n\n    if (defaultSelected !== null) {\n      defaultSelected.selected = true;\n    }\n  }\n}\n/**\n * Implements a <select> host component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\n\n\nfunction getHostProps$1(element, props) {\n  return assign({}, props, {\n    value: undefined\n  });\n}\nfunction initWrapperState$1(element, props) {\n  var node = element;\n\n  {\n    checkSelectPropTypes(props);\n  }\n\n  node._wrapperState = {\n    wasMultiple: !!props.multiple\n  };\n\n  {\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue$1) {\n      error('Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components');\n\n      didWarnValueDefaultValue$1 = true;\n    }\n  }\n}\nfunction postMountWrapper$2(element, props) {\n  var node = element;\n  node.multiple = !!props.multiple;\n  var value = props.value;\n\n  if (value != null) {\n    updateOptions(node, !!props.multiple, value, false);\n  } else if (props.defaultValue != null) {\n    updateOptions(node, !!props.multiple, props.defaultValue, true);\n  }\n}\nfunction postUpdateWrapper(element, props) {\n  var node = element;\n  var wasMultiple = node._wrapperState.wasMultiple;\n  node._wrapperState.wasMultiple = !!props.multiple;\n  var value = props.value;\n\n  if (value != null) {\n    updateOptions(node, !!props.multiple, value, false);\n  } else if (wasMultiple !== !!props.multiple) {\n    // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n    if (props.defaultValue != null) {\n      updateOptions(node, !!props.multiple, props.defaultValue, true);\n    } else {\n      // Revert the select back to its default unselected state.\n      updateOptions(node, !!props.multiple, props.multiple ? [] : '', false);\n    }\n  }\n}\nfunction restoreControlledState$1(element, props) {\n  var node = element;\n  var value = props.value;\n\n  if (value != null) {\n    updateOptions(node, !!props.multiple, value, false);\n  }\n}\n\nvar didWarnValDefaultVal = false;\n\n/**\n * Implements a <textarea> host component that allows setting `value`, and\n * `defaultValue`. This differs from the traditional DOM API because value is\n * usually set as PCDATA children.\n *\n * If `value` is not supplied (or null/undefined), user actions that affect the\n * value will trigger updates to the element.\n *\n * If `value` is supplied (and not null/undefined), the rendered element will\n * not trigger updates to the element. Instead, the `value` prop must change in\n * order for the rendered element to be updated.\n *\n * The rendered element will be initialized with an empty value, the prop\n * `defaultValue` if specified, or the children content (deprecated).\n */\nfunction getHostProps$2(element, props) {\n  var node = element;\n\n  if (props.dangerouslySetInnerHTML != null) {\n    throw new Error('`dangerouslySetInnerHTML` does not make sense on <textarea>.');\n  } // Always set children to the same thing. In IE9, the selection range will\n  // get reset if `textContent` is mutated.  We could add a check in setTextContent\n  // to only set the value if/when the value differs from the node value (which would\n  // completely solve this IE9 bug), but Sebastian+Sophie seemed to like this\n  // solution. The value can be a boolean or object so that's why it's forced\n  // to be a string.\n\n\n  var hostProps = assign({}, props, {\n    value: undefined,\n    defaultValue: undefined,\n    children: toString(node._wrapperState.initialValue)\n  });\n\n  return hostProps;\n}\nfunction initWrapperState$2(element, props) {\n  var node = element;\n\n  {\n    checkControlledValueProps('textarea', props);\n\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {\n      error('%s contains a textarea with both value and defaultValue props. ' + 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component');\n\n      didWarnValDefaultVal = true;\n    }\n  }\n\n  var initialValue = props.value; // Only bother fetching default value if we're going to use it\n\n  if (initialValue == null) {\n    var children = props.children,\n        defaultValue = props.defaultValue;\n\n    if (children != null) {\n      {\n        error('Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.');\n      }\n\n      {\n        if (defaultValue != null) {\n          throw new Error('If you supply `defaultValue` on a <textarea>, do not pass children.');\n        }\n\n        if (isArray(children)) {\n          if (children.length > 1) {\n            throw new Error('<textarea> can only have at most one child.');\n          }\n\n          children = children[0];\n        }\n\n        defaultValue = children;\n      }\n    }\n\n    if (defaultValue == null) {\n      defaultValue = '';\n    }\n\n    initialValue = defaultValue;\n  }\n\n  node._wrapperState = {\n    initialValue: getToStringValue(initialValue)\n  };\n}\nfunction updateWrapper$1(element, props) {\n  var node = element;\n  var value = getToStringValue(props.value);\n  var defaultValue = getToStringValue(props.defaultValue);\n\n  if (value != null) {\n    // Cast `value` to a string to ensure the value is set correctly. While\n    // browsers typically do this as necessary, jsdom doesn't.\n    var newValue = toString(value); // To avoid side effects (such as losing text selection), only set value if changed\n\n    if (newValue !== node.value) {\n      node.value = newValue;\n    }\n\n    if (props.defaultValue == null && node.defaultValue !== newValue) {\n      node.defaultValue = newValue;\n    }\n  }\n\n  if (defaultValue != null) {\n    node.defaultValue = toString(defaultValue);\n  }\n}\nfunction postMountWrapper$3(element, props) {\n  var node = element; // This is in postMount because we need access to the DOM node, which is not\n  // available until after the component has mounted.\n\n  var textContent = node.textContent; // Only set node.value if textContent is equal to the expected\n  // initial value. In IE10/IE11 there is a bug where the placeholder attribute\n  // will populate textContent as well.\n  // https://developer.microsoft.com/microsoft-edge/platform/issues/101525/\n\n  if (textContent === node._wrapperState.initialValue) {\n    if (textContent !== '' && textContent !== null) {\n      node.value = textContent;\n    }\n  }\n}\nfunction restoreControlledState$2(element, props) {\n  // DOM component is still mounted; update\n  updateWrapper$1(element, props);\n}\n\nvar HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\nvar MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\nvar SVG_NAMESPACE = 'http://www.w3.org/2000/svg'; // Assumes there is no parent namespace.\n\nfunction getIntrinsicNamespace(type) {\n  switch (type) {\n    case 'svg':\n      return SVG_NAMESPACE;\n\n    case 'math':\n      return MATH_NAMESPACE;\n\n    default:\n      return HTML_NAMESPACE;\n  }\n}\nfunction getChildNamespace(parentNamespace, type) {\n  if (parentNamespace == null || parentNamespace === HTML_NAMESPACE) {\n    // No (or default) parent namespace: potential entry point.\n    return getIntrinsicNamespace(type);\n  }\n\n  if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') {\n    // We're leaving SVG.\n    return HTML_NAMESPACE;\n  } // By default, pass namespace below.\n\n\n  return parentNamespace;\n}\n\n/* globals MSApp */\n\n/**\n * Create a function which has 'unsafe' privileges (required by windows8 apps)\n */\nvar createMicrosoftUnsafeLocalFunction = function (func) {\n  if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n    return function (arg0, arg1, arg2, arg3) {\n      MSApp.execUnsafeLocalFunction(function () {\n        return func(arg0, arg1, arg2, arg3);\n      });\n    };\n  } else {\n    return func;\n  }\n};\n\nvar reusableSVGContainer;\n/**\n * Set the innerHTML property of a node\n *\n * @param {DOMElement} node\n * @param {string} html\n * @internal\n */\n\nvar setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {\n  if (node.namespaceURI === SVG_NAMESPACE) {\n\n    if (!('innerHTML' in node)) {\n      // IE does not have innerHTML for SVG nodes, so instead we inject the\n      // new markup in a temp node and then move the child nodes across into\n      // the target node\n      reusableSVGContainer = reusableSVGContainer || document.createElement('div');\n      reusableSVGContainer.innerHTML = '<svg>' + html.valueOf().toString() + '</svg>';\n      var svgNode = reusableSVGContainer.firstChild;\n\n      while (node.firstChild) {\n        node.removeChild(node.firstChild);\n      }\n\n      while (svgNode.firstChild) {\n        node.appendChild(svgNode.firstChild);\n      }\n\n      return;\n    }\n  }\n\n  node.innerHTML = html;\n});\n\n/**\n * HTML nodeType values that represent the type of the node\n */\nvar ELEMENT_NODE = 1;\nvar TEXT_NODE = 3;\nvar COMMENT_NODE = 8;\nvar DOCUMENT_NODE = 9;\nvar DOCUMENT_FRAGMENT_NODE = 11;\n\n/**\n * Set the textContent property of a node. For text updates, it's faster\n * to set the `nodeValue` of the Text node directly instead of using\n * `.textContent` which will remove the existing node and create a new one.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\n\nvar setTextContent = function (node, text) {\n  if (text) {\n    var firstChild = node.firstChild;\n\n    if (firstChild && firstChild === node.lastChild && firstChild.nodeType === TEXT_NODE) {\n      firstChild.nodeValue = text;\n      return;\n    }\n  }\n\n  node.textContent = text;\n};\n\n// List derived from Gecko source code:\n// https://github.com/mozilla/gecko-dev/blob/4e638efc71/layout/style/test/property_database.js\nvar shorthandToLonghand = {\n  animation: ['animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction'],\n  background: ['backgroundAttachment', 'backgroundClip', 'backgroundColor', 'backgroundImage', 'backgroundOrigin', 'backgroundPositionX', 'backgroundPositionY', 'backgroundRepeat', 'backgroundSize'],\n  backgroundPosition: ['backgroundPositionX', 'backgroundPositionY'],\n  border: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth', 'borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth', 'borderLeftColor', 'borderLeftStyle', 'borderLeftWidth', 'borderRightColor', 'borderRightStyle', 'borderRightWidth', 'borderTopColor', 'borderTopStyle', 'borderTopWidth'],\n  borderBlockEnd: ['borderBlockEndColor', 'borderBlockEndStyle', 'borderBlockEndWidth'],\n  borderBlockStart: ['borderBlockStartColor', 'borderBlockStartStyle', 'borderBlockStartWidth'],\n  borderBottom: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth'],\n  borderColor: ['borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor'],\n  borderImage: ['borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth'],\n  borderInlineEnd: ['borderInlineEndColor', 'borderInlineEndStyle', 'borderInlineEndWidth'],\n  borderInlineStart: ['borderInlineStartColor', 'borderInlineStartStyle', 'borderInlineStartWidth'],\n  borderLeft: ['borderLeftColor', 'borderLeftStyle', 'borderLeftWidth'],\n  borderRadius: ['borderBottomLeftRadius', 'borderBottomRightRadius', 'borderTopLeftRadius', 'borderTopRightRadius'],\n  borderRight: ['borderRightColor', 'borderRightStyle', 'borderRightWidth'],\n  borderStyle: ['borderBottomStyle', 'borderLeftStyle', 'borderRightStyle', 'borderTopStyle'],\n  borderTop: ['borderTopColor', 'borderTopStyle', 'borderTopWidth'],\n  borderWidth: ['borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth'],\n  columnRule: ['columnRuleColor', 'columnRuleStyle', 'columnRuleWidth'],\n  columns: ['columnCount', 'columnWidth'],\n  flex: ['flexBasis', 'flexGrow', 'flexShrink'],\n  flexFlow: ['flexDirection', 'flexWrap'],\n  font: ['fontFamily', 'fontFeatureSettings', 'fontKerning', 'fontLanguageOverride', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition', 'fontWeight', 'lineHeight'],\n  fontVariant: ['fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition'],\n  gap: ['columnGap', 'rowGap'],\n  grid: ['gridAutoColumns', 'gridAutoFlow', 'gridAutoRows', 'gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],\n  gridArea: ['gridColumnEnd', 'gridColumnStart', 'gridRowEnd', 'gridRowStart'],\n  gridColumn: ['gridColumnEnd', 'gridColumnStart'],\n  gridColumnGap: ['columnGap'],\n  gridGap: ['columnGap', 'rowGap'],\n  gridRow: ['gridRowEnd', 'gridRowStart'],\n  gridRowGap: ['rowGap'],\n  gridTemplate: ['gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],\n  listStyle: ['listStyleImage', 'listStylePosition', 'listStyleType'],\n  margin: ['marginBottom', 'marginLeft', 'marginRight', 'marginTop'],\n  marker: ['markerEnd', 'markerMid', 'markerStart'],\n  mask: ['maskClip', 'maskComposite', 'maskImage', 'maskMode', 'maskOrigin', 'maskPositionX', 'maskPositionY', 'maskRepeat', 'maskSize'],\n  maskPosition: ['maskPositionX', 'maskPositionY'],\n  outline: ['outlineColor', 'outlineStyle', 'outlineWidth'],\n  overflow: ['overflowX', 'overflowY'],\n  padding: ['paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop'],\n  placeContent: ['alignContent', 'justifyContent'],\n  placeItems: ['alignItems', 'justifyItems'],\n  placeSelf: ['alignSelf', 'justifySelf'],\n  textDecoration: ['textDecorationColor', 'textDecorationLine', 'textDecorationStyle'],\n  textEmphasis: ['textEmphasisColor', 'textEmphasisStyle'],\n  transition: ['transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction'],\n  wordWrap: ['overflowWrap']\n};\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nvar isUnitlessNumber = {\n  animationIterationCount: true,\n  aspectRatio: true,\n  borderImageOutset: true,\n  borderImageSlice: true,\n  borderImageWidth: true,\n  boxFlex: true,\n  boxFlexGroup: true,\n  boxOrdinalGroup: true,\n  columnCount: true,\n  columns: true,\n  flex: true,\n  flexGrow: true,\n  flexPositive: true,\n  flexShrink: true,\n  flexNegative: true,\n  flexOrder: true,\n  gridArea: true,\n  gridRow: true,\n  gridRowEnd: true,\n  gridRowSpan: true,\n  gridRowStart: true,\n  gridColumn: true,\n  gridColumnEnd: true,\n  gridColumnSpan: true,\n  gridColumnStart: true,\n  fontWeight: true,\n  lineClamp: true,\n  lineHeight: true,\n  opacity: true,\n  order: true,\n  orphans: true,\n  tabSize: true,\n  widows: true,\n  zIndex: true,\n  zoom: true,\n  // SVG-related properties\n  fillOpacity: true,\n  floodOpacity: true,\n  stopOpacity: true,\n  strokeDasharray: true,\n  strokeDashoffset: true,\n  strokeMiterlimit: true,\n  strokeOpacity: true,\n  strokeWidth: true\n};\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\n\nfunction prefixKey(prefix, key) {\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\n\n\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O']; // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\n\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n  prefixes.forEach(function (prefix) {\n    isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n  });\n});\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @return {string} Normalized style value with dimensions applied.\n */\n\nfunction dangerousStyleValue(name, value, isCustomProperty) {\n  // Note that we've removed escapeTextForBrowser() calls here since the\n  // whole string will be escaped when the attribute is injected into\n  // the markup. If you provide unsafe user data here they can inject\n  // arbitrary CSS which may be problematic (I couldn't repro this):\n  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n  // This is not an XSS hole but instead a potential CSS injection issue\n  // which has lead to a greater discussion about how we're going to\n  // trust URLs moving forward. See #2115901\n  var isEmpty = value == null || typeof value === 'boolean' || value === '';\n\n  if (isEmpty) {\n    return '';\n  }\n\n  if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) {\n    return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n  }\n\n  {\n    checkCSSPropertyStringCoercion(value, name);\n  }\n\n  return ('' + value).trim();\n}\n\nvar uppercasePattern = /([A-Z])/g;\nvar msPattern = /^ms-/;\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n *   > hyphenateStyleName('backgroundColor')\n *   < \"background-color\"\n *   > hyphenateStyleName('MozTransition')\n *   < \"-moz-transition\"\n *   > hyphenateStyleName('msTransition')\n *   < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n */\n\nfunction hyphenateStyleName(name) {\n  return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-');\n}\n\nvar warnValidStyle = function () {};\n\n{\n  // 'msTransform' is correct, but the other prefixes should be capitalized\n  var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n  var msPattern$1 = /^-ms-/;\n  var hyphenPattern = /-(.)/g; // style values shouldn't contain a semicolon\n\n  var badStyleValueWithSemicolonPattern = /;\\s*$/;\n  var warnedStyleNames = {};\n  var warnedStyleValues = {};\n  var warnedForNaNValue = false;\n  var warnedForInfinityValue = false;\n\n  var camelize = function (string) {\n    return string.replace(hyphenPattern, function (_, character) {\n      return character.toUpperCase();\n    });\n  };\n\n  var warnHyphenatedStyleName = function (name) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n\n    error('Unsupported style property %s. Did you mean %s?', name, // As Andi Smith suggests\n    // (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n    // is converted to lowercase `ms`.\n    camelize(name.replace(msPattern$1, 'ms-')));\n  };\n\n  var warnBadVendoredStyleName = function (name) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n\n    error('Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1));\n  };\n\n  var warnStyleValueWithSemicolon = function (name, value) {\n    if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n      return;\n    }\n\n    warnedStyleValues[value] = true;\n\n    error(\"Style property values shouldn't contain a semicolon. \" + 'Try \"%s: %s\" instead.', name, value.replace(badStyleValueWithSemicolonPattern, ''));\n  };\n\n  var warnStyleValueIsNaN = function (name, value) {\n    if (warnedForNaNValue) {\n      return;\n    }\n\n    warnedForNaNValue = true;\n\n    error('`NaN` is an invalid value for the `%s` css style property.', name);\n  };\n\n  var warnStyleValueIsInfinity = function (name, value) {\n    if (warnedForInfinityValue) {\n      return;\n    }\n\n    warnedForInfinityValue = true;\n\n    error('`Infinity` is an invalid value for the `%s` css style property.', name);\n  };\n\n  warnValidStyle = function (name, value) {\n    if (name.indexOf('-') > -1) {\n      warnHyphenatedStyleName(name);\n    } else if (badVendoredStyleNamePattern.test(name)) {\n      warnBadVendoredStyleName(name);\n    } else if (badStyleValueWithSemicolonPattern.test(value)) {\n      warnStyleValueWithSemicolon(name, value);\n    }\n\n    if (typeof value === 'number') {\n      if (isNaN(value)) {\n        warnStyleValueIsNaN(name, value);\n      } else if (!isFinite(value)) {\n        warnStyleValueIsInfinity(name, value);\n      }\n    }\n  };\n}\n\nvar warnValidStyle$1 = warnValidStyle;\n\n/**\n * Operations for dealing with CSS properties.\n */\n\n/**\n * This creates a string that is expected to be equivalent to the style\n * attribute generated by server-side rendering. It by-passes warnings and\n * security checks so it's not safe to use this value for anything other than\n * comparison. It is only used in DEV for SSR validation.\n */\n\nfunction createDangerousStringForStyles(styles) {\n  {\n    var serialized = '';\n    var delimiter = '';\n\n    for (var styleName in styles) {\n      if (!styles.hasOwnProperty(styleName)) {\n        continue;\n      }\n\n      var styleValue = styles[styleName];\n\n      if (styleValue != null) {\n        var isCustomProperty = styleName.indexOf('--') === 0;\n        serialized += delimiter + (isCustomProperty ? styleName : hyphenateStyleName(styleName)) + ':';\n        serialized += dangerousStyleValue(styleName, styleValue, isCustomProperty);\n        delimiter = ';';\n      }\n    }\n\n    return serialized || null;\n  }\n}\n/**\n * Sets the value for multiple styles on a node.  If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n */\n\nfunction setValueForStyles(node, styles) {\n  var style = node.style;\n\n  for (var styleName in styles) {\n    if (!styles.hasOwnProperty(styleName)) {\n      continue;\n    }\n\n    var isCustomProperty = styleName.indexOf('--') === 0;\n\n    {\n      if (!isCustomProperty) {\n        warnValidStyle$1(styleName, styles[styleName]);\n      }\n    }\n\n    var styleValue = dangerousStyleValue(styleName, styles[styleName], isCustomProperty);\n\n    if (styleName === 'float') {\n      styleName = 'cssFloat';\n    }\n\n    if (isCustomProperty) {\n      style.setProperty(styleName, styleValue);\n    } else {\n      style[styleName] = styleValue;\n    }\n  }\n}\n\nfunction isValueEmpty(value) {\n  return value == null || typeof value === 'boolean' || value === '';\n}\n/**\n * Given {color: 'red', overflow: 'hidden'} returns {\n *   color: 'color',\n *   overflowX: 'overflow',\n *   overflowY: 'overflow',\n * }. This can be read as \"the overflowY property was set by the overflow\n * shorthand\". That is, the values are the property that each was derived from.\n */\n\n\nfunction expandShorthandMap(styles) {\n  var expanded = {};\n\n  for (var key in styles) {\n    var longhands = shorthandToLonghand[key] || [key];\n\n    for (var i = 0; i < longhands.length; i++) {\n      expanded[longhands[i]] = key;\n    }\n  }\n\n  return expanded;\n}\n/**\n * When mixing shorthand and longhand property names, we warn during updates if\n * we expect an incorrect result to occur. In particular, we warn for:\n *\n * Updating a shorthand property (longhand gets overwritten):\n *   {font: 'foo', fontVariant: 'bar'} -> {font: 'baz', fontVariant: 'bar'}\n *   becomes .style.font = 'baz'\n * Removing a shorthand property (longhand gets lost too):\n *   {font: 'foo', fontVariant: 'bar'} -> {fontVariant: 'bar'}\n *   becomes .style.font = ''\n * Removing a longhand property (should revert to shorthand; doesn't):\n *   {font: 'foo', fontVariant: 'bar'} -> {font: 'foo'}\n *   becomes .style.fontVariant = ''\n */\n\n\nfunction validateShorthandPropertyCollisionInDev(styleUpdates, nextStyles) {\n  {\n    if (!nextStyles) {\n      return;\n    }\n\n    var expandedUpdates = expandShorthandMap(styleUpdates);\n    var expandedStyles = expandShorthandMap(nextStyles);\n    var warnedAbout = {};\n\n    for (var key in expandedUpdates) {\n      var originalKey = expandedUpdates[key];\n      var correctOriginalKey = expandedStyles[key];\n\n      if (correctOriginalKey && originalKey !== correctOriginalKey) {\n        var warningKey = originalKey + ',' + correctOriginalKey;\n\n        if (warnedAbout[warningKey]) {\n          continue;\n        }\n\n        warnedAbout[warningKey] = true;\n\n        error('%s a style property during rerender (%s) when a ' + 'conflicting property is set (%s) can lead to styling bugs. To ' + \"avoid this, don't mix shorthand and non-shorthand properties \" + 'for the same value; instead, replace the shorthand with ' + 'separate values.', isValueEmpty(styleUpdates[originalKey]) ? 'Removing' : 'Updating', originalKey, correctOriginalKey);\n      }\n    }\n  }\n}\n\n// For HTML, certain tags should omit their close tag. We keep a list for\n// those special-case tags.\nvar omittedCloseTags = {\n  area: true,\n  base: true,\n  br: true,\n  col: true,\n  embed: true,\n  hr: true,\n  img: true,\n  input: true,\n  keygen: true,\n  link: true,\n  meta: true,\n  param: true,\n  source: true,\n  track: true,\n  wbr: true // NOTE: menuitem's close tag should be omitted, but that causes problems.\n\n};\n\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = assign({\n  menuitem: true\n}, omittedCloseTags);\n\nvar HTML = '__html';\n\nfunction assertValidProps(tag, props) {\n  if (!props) {\n    return;\n  } // Note the use of `==` which checks for null or undefined.\n\n\n  if (voidElementTags[tag]) {\n    if (props.children != null || props.dangerouslySetInnerHTML != null) {\n      throw new Error(tag + \" is a void element tag and must neither have `children` nor \" + 'use `dangerouslySetInnerHTML`.');\n    }\n  }\n\n  if (props.dangerouslySetInnerHTML != null) {\n    if (props.children != null) {\n      throw new Error('Can only set one of `children` or `props.dangerouslySetInnerHTML`.');\n    }\n\n    if (typeof props.dangerouslySetInnerHTML !== 'object' || !(HTML in props.dangerouslySetInnerHTML)) {\n      throw new Error('`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://reactjs.org/link/dangerously-set-inner-html ' + 'for more information.');\n    }\n  }\n\n  {\n    if (!props.suppressContentEditableWarning && props.contentEditable && props.children != null) {\n      error('A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.');\n    }\n  }\n\n  if (props.style != null && typeof props.style !== 'object') {\n    throw new Error('The `style` prop expects a mapping from style properties to values, ' + \"not a string. For example, style={{marginRight: spacing + 'em'}} when \" + 'using JSX.');\n  }\n}\n\nfunction isCustomComponent(tagName, props) {\n  if (tagName.indexOf('-') === -1) {\n    return typeof props.is === 'string';\n  }\n\n  switch (tagName) {\n    // These are reserved SVG and MathML elements.\n    // We don't mind this list too much because we expect it to never grow.\n    // The alternative is to track the namespace in a few places which is convoluted.\n    // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts\n    case 'annotation-xml':\n    case 'color-profile':\n    case 'font-face':\n    case 'font-face-src':\n    case 'font-face-uri':\n    case 'font-face-format':\n    case 'font-face-name':\n    case 'missing-glyph':\n      return false;\n\n    default:\n      return true;\n  }\n}\n\n// When adding attributes to the HTML or SVG allowed attribute list, be sure to\n// also add them to this module to ensure casing and incorrect name\n// warnings.\nvar possibleStandardNames = {\n  // HTML\n  accept: 'accept',\n  acceptcharset: 'acceptCharset',\n  'accept-charset': 'acceptCharset',\n  accesskey: 'accessKey',\n  action: 'action',\n  allowfullscreen: 'allowFullScreen',\n  alt: 'alt',\n  as: 'as',\n  async: 'async',\n  autocapitalize: 'autoCapitalize',\n  autocomplete: 'autoComplete',\n  autocorrect: 'autoCorrect',\n  autofocus: 'autoFocus',\n  autoplay: 'autoPlay',\n  autosave: 'autoSave',\n  capture: 'capture',\n  cellpadding: 'cellPadding',\n  cellspacing: 'cellSpacing',\n  challenge: 'challenge',\n  charset: 'charSet',\n  checked: 'checked',\n  children: 'children',\n  cite: 'cite',\n  class: 'className',\n  classid: 'classID',\n  classname: 'className',\n  cols: 'cols',\n  colspan: 'colSpan',\n  content: 'content',\n  contenteditable: 'contentEditable',\n  contextmenu: 'contextMenu',\n  controls: 'controls',\n  controlslist: 'controlsList',\n  coords: 'coords',\n  crossorigin: 'crossOrigin',\n  dangerouslysetinnerhtml: 'dangerouslySetInnerHTML',\n  data: 'data',\n  datetime: 'dateTime',\n  default: 'default',\n  defaultchecked: 'defaultChecked',\n  defaultvalue: 'defaultValue',\n  defer: 'defer',\n  dir: 'dir',\n  disabled: 'disabled',\n  disablepictureinpicture: 'disablePictureInPicture',\n  disableremoteplayback: 'disableRemotePlayback',\n  download: 'download',\n  draggable: 'draggable',\n  enctype: 'encType',\n  enterkeyhint: 'enterKeyHint',\n  for: 'htmlFor',\n  form: 'form',\n  formmethod: 'formMethod',\n  formaction: 'formAction',\n  formenctype: 'formEncType',\n  formnovalidate: 'formNoValidate',\n  formtarget: 'formTarget',\n  frameborder: 'frameBorder',\n  headers: 'headers',\n  height: 'height',\n  hidden: 'hidden',\n  high: 'high',\n  href: 'href',\n  hreflang: 'hrefLang',\n  htmlfor: 'htmlFor',\n  httpequiv: 'httpEquiv',\n  'http-equiv': 'httpEquiv',\n  icon: 'icon',\n  id: 'id',\n  imagesizes: 'imageSizes',\n  imagesrcset: 'imageSrcSet',\n  innerhtml: 'innerHTML',\n  inputmode: 'inputMode',\n  integrity: 'integrity',\n  is: 'is',\n  itemid: 'itemID',\n  itemprop: 'itemProp',\n  itemref: 'itemRef',\n  itemscope: 'itemScope',\n  itemtype: 'itemType',\n  keyparams: 'keyParams',\n  keytype: 'keyType',\n  kind: 'kind',\n  label: 'label',\n  lang: 'lang',\n  list: 'list',\n  loop: 'loop',\n  low: 'low',\n  manifest: 'manifest',\n  marginwidth: 'marginWidth',\n  marginheight: 'marginHeight',\n  max: 'max',\n  maxlength: 'maxLength',\n  media: 'media',\n  mediagroup: 'mediaGroup',\n  method: 'method',\n  min: 'min',\n  minlength: 'minLength',\n  multiple: 'multiple',\n  muted: 'muted',\n  name: 'name',\n  nomodule: 'noModule',\n  nonce: 'nonce',\n  novalidate: 'noValidate',\n  open: 'open',\n  optimum: 'optimum',\n  pattern: 'pattern',\n  placeholder: 'placeholder',\n  playsinline: 'playsInline',\n  poster: 'poster',\n  preload: 'preload',\n  profile: 'profile',\n  radiogroup: 'radioGroup',\n  readonly: 'readOnly',\n  referrerpolicy: 'referrerPolicy',\n  rel: 'rel',\n  required: 'required',\n  reversed: 'reversed',\n  role: 'role',\n  rows: 'rows',\n  rowspan: 'rowSpan',\n  sandbox: 'sandbox',\n  scope: 'scope',\n  scoped: 'scoped',\n  scrolling: 'scrolling',\n  seamless: 'seamless',\n  selected: 'selected',\n  shape: 'shape',\n  size: 'size',\n  sizes: 'sizes',\n  span: 'span',\n  spellcheck: 'spellCheck',\n  src: 'src',\n  srcdoc: 'srcDoc',\n  srclang: 'srcLang',\n  srcset: 'srcSet',\n  start: 'start',\n  step: 'step',\n  style: 'style',\n  summary: 'summary',\n  tabindex: 'tabIndex',\n  target: 'target',\n  title: 'title',\n  type: 'type',\n  usemap: 'useMap',\n  value: 'value',\n  width: 'width',\n  wmode: 'wmode',\n  wrap: 'wrap',\n  // SVG\n  about: 'about',\n  accentheight: 'accentHeight',\n  'accent-height': 'accentHeight',\n  accumulate: 'accumulate',\n  additive: 'additive',\n  alignmentbaseline: 'alignmentBaseline',\n  'alignment-baseline': 'alignmentBaseline',\n  allowreorder: 'allowReorder',\n  alphabetic: 'alphabetic',\n  amplitude: 'amplitude',\n  arabicform: 'arabicForm',\n  'arabic-form': 'arabicForm',\n  ascent: 'ascent',\n  attributename: 'attributeName',\n  attributetype: 'attributeType',\n  autoreverse: 'autoReverse',\n  azimuth: 'azimuth',\n  basefrequency: 'baseFrequency',\n  baselineshift: 'baselineShift',\n  'baseline-shift': 'baselineShift',\n  baseprofile: 'baseProfile',\n  bbox: 'bbox',\n  begin: 'begin',\n  bias: 'bias',\n  by: 'by',\n  calcmode: 'calcMode',\n  capheight: 'capHeight',\n  'cap-height': 'capHeight',\n  clip: 'clip',\n  clippath: 'clipPath',\n  'clip-path': 'clipPath',\n  clippathunits: 'clipPathUnits',\n  cliprule: 'clipRule',\n  'clip-rule': 'clipRule',\n  color: 'color',\n  colorinterpolation: 'colorInterpolation',\n  'color-interpolation': 'colorInterpolation',\n  colorinterpolationfilters: 'colorInterpolationFilters',\n  'color-interpolation-filters': 'colorInterpolationFilters',\n  colorprofile: 'colorProfile',\n  'color-profile': 'colorProfile',\n  colorrendering: 'colorRendering',\n  'color-rendering': 'colorRendering',\n  contentscripttype: 'contentScriptType',\n  contentstyletype: 'contentStyleType',\n  cursor: 'cursor',\n  cx: 'cx',\n  cy: 'cy',\n  d: 'd',\n  datatype: 'datatype',\n  decelerate: 'decelerate',\n  descent: 'descent',\n  diffuseconstant: 'diffuseConstant',\n  direction: 'direction',\n  display: 'display',\n  divisor: 'divisor',\n  dominantbaseline: 'dominantBaseline',\n  'dominant-baseline': 'dominantBaseline',\n  dur: 'dur',\n  dx: 'dx',\n  dy: 'dy',\n  edgemode: 'edgeMode',\n  elevation: 'elevation',\n  enablebackground: 'enableBackground',\n  'enable-background': 'enableBackground',\n  end: 'end',\n  exponent: 'exponent',\n  externalresourcesrequired: 'externalResourcesRequired',\n  fill: 'fill',\n  fillopacity: 'fillOpacity',\n  'fill-opacity': 'fillOpacity',\n  fillrule: 'fillRule',\n  'fill-rule': 'fillRule',\n  filter: 'filter',\n  filterres: 'filterRes',\n  filterunits: 'filterUnits',\n  floodopacity: 'floodOpacity',\n  'flood-opacity': 'floodOpacity',\n  floodcolor: 'floodColor',\n  'flood-color': 'floodColor',\n  focusable: 'focusable',\n  fontfamily: 'fontFamily',\n  'font-family': 'fontFamily',\n  fontsize: 'fontSize',\n  'font-size': 'fontSize',\n  fontsizeadjust: 'fontSizeAdjust',\n  'font-size-adjust': 'fontSizeAdjust',\n  fontstretch: 'fontStretch',\n  'font-stretch': 'fontStretch',\n  fontstyle: 'fontStyle',\n  'font-style': 'fontStyle',\n  fontvariant: 'fontVariant',\n  'font-variant': 'fontVariant',\n  fontweight: 'fontWeight',\n  'font-weight': 'fontWeight',\n  format: 'format',\n  from: 'from',\n  fx: 'fx',\n  fy: 'fy',\n  g1: 'g1',\n  g2: 'g2',\n  glyphname: 'glyphName',\n  'glyph-name': 'glyphName',\n  glyphorientationhorizontal: 'glyphOrientationHorizontal',\n  'glyph-orientation-horizontal': 'glyphOrientationHorizontal',\n  glyphorientationvertical: 'glyphOrientationVertical',\n  'glyph-orientation-vertical': 'glyphOrientationVertical',\n  glyphref: 'glyphRef',\n  gradienttransform: 'gradientTransform',\n  gradientunits: 'gradientUnits',\n  hanging: 'hanging',\n  horizadvx: 'horizAdvX',\n  'horiz-adv-x': 'horizAdvX',\n  horizoriginx: 'horizOriginX',\n  'horiz-origin-x': 'horizOriginX',\n  ideographic: 'ideographic',\n  imagerendering: 'imageRendering',\n  'image-rendering': 'imageRendering',\n  in2: 'in2',\n  in: 'in',\n  inlist: 'inlist',\n  intercept: 'intercept',\n  k1: 'k1',\n  k2: 'k2',\n  k3: 'k3',\n  k4: 'k4',\n  k: 'k',\n  kernelmatrix: 'kernelMatrix',\n  kernelunitlength: 'kernelUnitLength',\n  kerning: 'kerning',\n  keypoints: 'keyPoints',\n  keysplines: 'keySplines',\n  keytimes: 'keyTimes',\n  lengthadjust: 'lengthAdjust',\n  letterspacing: 'letterSpacing',\n  'letter-spacing': 'letterSpacing',\n  lightingcolor: 'lightingColor',\n  'lighting-color': 'lightingColor',\n  limitingconeangle: 'limitingConeAngle',\n  local: 'local',\n  markerend: 'markerEnd',\n  'marker-end': 'markerEnd',\n  markerheight: 'markerHeight',\n  markermid: 'markerMid',\n  'marker-mid': 'markerMid',\n  markerstart: 'markerStart',\n  'marker-start': 'markerStart',\n  markerunits: 'markerUnits',\n  markerwidth: 'markerWidth',\n  mask: 'mask',\n  maskcontentunits: 'maskContentUnits',\n  maskunits: 'maskUnits',\n  mathematical: 'mathematical',\n  mode: 'mode',\n  numoctaves: 'numOctaves',\n  offset: 'offset',\n  opacity: 'opacity',\n  operator: 'operator',\n  order: 'order',\n  orient: 'orient',\n  orientation: 'orientation',\n  origin: 'origin',\n  overflow: 'overflow',\n  overlineposition: 'overlinePosition',\n  'overline-position': 'overlinePosition',\n  overlinethickness: 'overlineThickness',\n  'overline-thickness': 'overlineThickness',\n  paintorder: 'paintOrder',\n  'paint-order': 'paintOrder',\n  panose1: 'panose1',\n  'panose-1': 'panose1',\n  pathlength: 'pathLength',\n  patterncontentunits: 'patternContentUnits',\n  patterntransform: 'patternTransform',\n  patternunits: 'patternUnits',\n  pointerevents: 'pointerEvents',\n  'pointer-events': 'pointerEvents',\n  points: 'points',\n  pointsatx: 'pointsAtX',\n  pointsaty: 'pointsAtY',\n  pointsatz: 'pointsAtZ',\n  prefix: 'prefix',\n  preservealpha: 'preserveAlpha',\n  preserveaspectratio: 'preserveAspectRatio',\n  primitiveunits: 'primitiveUnits',\n  property: 'property',\n  r: 'r',\n  radius: 'radius',\n  refx: 'refX',\n  refy: 'refY',\n  renderingintent: 'renderingIntent',\n  'rendering-intent': 'renderingIntent',\n  repeatcount: 'repeatCount',\n  repeatdur: 'repeatDur',\n  requiredextensions: 'requiredExtensions',\n  requiredfeatures: 'requiredFeatures',\n  resource: 'resource',\n  restart: 'restart',\n  result: 'result',\n  results: 'results',\n  rotate: 'rotate',\n  rx: 'rx',\n  ry: 'ry',\n  scale: 'scale',\n  security: 'security',\n  seed: 'seed',\n  shaperendering: 'shapeRendering',\n  'shape-rendering': 'shapeRendering',\n  slope: 'slope',\n  spacing: 'spacing',\n  specularconstant: 'specularConstant',\n  specularexponent: 'specularExponent',\n  speed: 'speed',\n  spreadmethod: 'spreadMethod',\n  startoffset: 'startOffset',\n  stddeviation: 'stdDeviation',\n  stemh: 'stemh',\n  stemv: 'stemv',\n  stitchtiles: 'stitchTiles',\n  stopcolor: 'stopColor',\n  'stop-color': 'stopColor',\n  stopopacity: 'stopOpacity',\n  'stop-opacity': 'stopOpacity',\n  strikethroughposition: 'strikethroughPosition',\n  'strikethrough-position': 'strikethroughPosition',\n  strikethroughthickness: 'strikethroughThickness',\n  'strikethrough-thickness': 'strikethroughThickness',\n  string: 'string',\n  stroke: 'stroke',\n  strokedasharray: 'strokeDasharray',\n  'stroke-dasharray': 'strokeDasharray',\n  strokedashoffset: 'strokeDashoffset',\n  'stroke-dashoffset': 'strokeDashoffset',\n  strokelinecap: 'strokeLinecap',\n  'stroke-linecap': 'strokeLinecap',\n  strokelinejoin: 'strokeLinejoin',\n  'stroke-linejoin': 'strokeLinejoin',\n  strokemiterlimit: 'strokeMiterlimit',\n  'stroke-miterlimit': 'strokeMiterlimit',\n  strokewidth: 'strokeWidth',\n  'stroke-width': 'strokeWidth',\n  strokeopacity: 'strokeOpacity',\n  'stroke-opacity': 'strokeOpacity',\n  suppresscontenteditablewarning: 'suppressContentEditableWarning',\n  suppresshydrationwarning: 'suppressHydrationWarning',\n  surfacescale: 'surfaceScale',\n  systemlanguage: 'systemLanguage',\n  tablevalues: 'tableValues',\n  targetx: 'targetX',\n  targety: 'targetY',\n  textanchor: 'textAnchor',\n  'text-anchor': 'textAnchor',\n  textdecoration: 'textDecoration',\n  'text-decoration': 'textDecoration',\n  textlength: 'textLength',\n  textrendering: 'textRendering',\n  'text-rendering': 'textRendering',\n  to: 'to',\n  transform: 'transform',\n  typeof: 'typeof',\n  u1: 'u1',\n  u2: 'u2',\n  underlineposition: 'underlinePosition',\n  'underline-position': 'underlinePosition',\n  underlinethickness: 'underlineThickness',\n  'underline-thickness': 'underlineThickness',\n  unicode: 'unicode',\n  unicodebidi: 'unicodeBidi',\n  'unicode-bidi': 'unicodeBidi',\n  unicoderange: 'unicodeRange',\n  'unicode-range': 'unicodeRange',\n  unitsperem: 'unitsPerEm',\n  'units-per-em': 'unitsPerEm',\n  unselectable: 'unselectable',\n  valphabetic: 'vAlphabetic',\n  'v-alphabetic': 'vAlphabetic',\n  values: 'values',\n  vectoreffect: 'vectorEffect',\n  'vector-effect': 'vectorEffect',\n  version: 'version',\n  vertadvy: 'vertAdvY',\n  'vert-adv-y': 'vertAdvY',\n  vertoriginx: 'vertOriginX',\n  'vert-origin-x': 'vertOriginX',\n  vertoriginy: 'vertOriginY',\n  'vert-origin-y': 'vertOriginY',\n  vhanging: 'vHanging',\n  'v-hanging': 'vHanging',\n  videographic: 'vIdeographic',\n  'v-ideographic': 'vIdeographic',\n  viewbox: 'viewBox',\n  viewtarget: 'viewTarget',\n  visibility: 'visibility',\n  vmathematical: 'vMathematical',\n  'v-mathematical': 'vMathematical',\n  vocab: 'vocab',\n  widths: 'widths',\n  wordspacing: 'wordSpacing',\n  'word-spacing': 'wordSpacing',\n  writingmode: 'writingMode',\n  'writing-mode': 'writingMode',\n  x1: 'x1',\n  x2: 'x2',\n  x: 'x',\n  xchannelselector: 'xChannelSelector',\n  xheight: 'xHeight',\n  'x-height': 'xHeight',\n  xlinkactuate: 'xlinkActuate',\n  'xlink:actuate': 'xlinkActuate',\n  xlinkarcrole: 'xlinkArcrole',\n  'xlink:arcrole': 'xlinkArcrole',\n  xlinkhref: 'xlinkHref',\n  'xlink:href': 'xlinkHref',\n  xlinkrole: 'xlinkRole',\n  'xlink:role': 'xlinkRole',\n  xlinkshow: 'xlinkShow',\n  'xlink:show': 'xlinkShow',\n  xlinktitle: 'xlinkTitle',\n  'xlink:title': 'xlinkTitle',\n  xlinktype: 'xlinkType',\n  'xlink:type': 'xlinkType',\n  xmlbase: 'xmlBase',\n  'xml:base': 'xmlBase',\n  xmllang: 'xmlLang',\n  'xml:lang': 'xmlLang',\n  xmlns: 'xmlns',\n  'xml:space': 'xmlSpace',\n  xmlnsxlink: 'xmlnsXlink',\n  'xmlns:xlink': 'xmlnsXlink',\n  xmlspace: 'xmlSpace',\n  y1: 'y1',\n  y2: 'y2',\n  y: 'y',\n  ychannelselector: 'yChannelSelector',\n  z: 'z',\n  zoomandpan: 'zoomAndPan'\n};\n\nvar ariaProperties = {\n  'aria-current': 0,\n  // state\n  'aria-description': 0,\n  'aria-details': 0,\n  'aria-disabled': 0,\n  // state\n  'aria-hidden': 0,\n  // state\n  'aria-invalid': 0,\n  // state\n  'aria-keyshortcuts': 0,\n  'aria-label': 0,\n  'aria-roledescription': 0,\n  // Widget Attributes\n  'aria-autocomplete': 0,\n  'aria-checked': 0,\n  'aria-expanded': 0,\n  'aria-haspopup': 0,\n  'aria-level': 0,\n  'aria-modal': 0,\n  'aria-multiline': 0,\n  'aria-multiselectable': 0,\n  'aria-orientation': 0,\n  'aria-placeholder': 0,\n  'aria-pressed': 0,\n  'aria-readonly': 0,\n  'aria-required': 0,\n  'aria-selected': 0,\n  'aria-sort': 0,\n  'aria-valuemax': 0,\n  'aria-valuemin': 0,\n  'aria-valuenow': 0,\n  'aria-valuetext': 0,\n  // Live Region Attributes\n  'aria-atomic': 0,\n  'aria-busy': 0,\n  'aria-live': 0,\n  'aria-relevant': 0,\n  // Drag-and-Drop Attributes\n  'aria-dropeffect': 0,\n  'aria-grabbed': 0,\n  // Relationship Attributes\n  'aria-activedescendant': 0,\n  'aria-colcount': 0,\n  'aria-colindex': 0,\n  'aria-colspan': 0,\n  'aria-controls': 0,\n  'aria-describedby': 0,\n  'aria-errormessage': 0,\n  'aria-flowto': 0,\n  'aria-labelledby': 0,\n  'aria-owns': 0,\n  'aria-posinset': 0,\n  'aria-rowcount': 0,\n  'aria-rowindex': 0,\n  'aria-rowspan': 0,\n  'aria-setsize': 0\n};\n\nvar warnedProperties = {};\nvar rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\nfunction validateProperty(tagName, name) {\n  {\n    if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name]) {\n      return true;\n    }\n\n    if (rARIACamel.test(name)) {\n      var ariaName = 'aria-' + name.slice(4).toLowerCase();\n      var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n      // DOM properties, then it is an invalid aria-* attribute.\n\n      if (correctName == null) {\n        error('Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name);\n\n        warnedProperties[name] = true;\n        return true;\n      } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n      if (name !== correctName) {\n        error('Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName);\n\n        warnedProperties[name] = true;\n        return true;\n      }\n    }\n\n    if (rARIA.test(name)) {\n      var lowerCasedName = name.toLowerCase();\n      var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n      // DOM properties, then it is an invalid aria-* attribute.\n\n      if (standardName == null) {\n        warnedProperties[name] = true;\n        return false;\n      } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n      if (name !== standardName) {\n        error('Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName);\n\n        warnedProperties[name] = true;\n        return true;\n      }\n    }\n  }\n\n  return true;\n}\n\nfunction warnInvalidARIAProps(type, props) {\n  {\n    var invalidProps = [];\n\n    for (var key in props) {\n      var isValid = validateProperty(type, key);\n\n      if (!isValid) {\n        invalidProps.push(key);\n      }\n    }\n\n    var unknownPropString = invalidProps.map(function (prop) {\n      return '`' + prop + '`';\n    }).join(', ');\n\n    if (invalidProps.length === 1) {\n      error('Invalid aria prop %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type);\n    } else if (invalidProps.length > 1) {\n      error('Invalid aria props %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type);\n    }\n  }\n}\n\nfunction validateProperties(type, props) {\n  if (isCustomComponent(type, props)) {\n    return;\n  }\n\n  warnInvalidARIAProps(type, props);\n}\n\nvar didWarnValueNull = false;\nfunction validateProperties$1(type, props) {\n  {\n    if (type !== 'input' && type !== 'textarea' && type !== 'select') {\n      return;\n    }\n\n    if (props != null && props.value === null && !didWarnValueNull) {\n      didWarnValueNull = true;\n\n      if (type === 'select' && props.multiple) {\n        error('`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.', type);\n      } else {\n        error('`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type);\n      }\n    }\n  }\n}\n\nvar validateProperty$1 = function () {};\n\n{\n  var warnedProperties$1 = {};\n  var EVENT_NAME_REGEX = /^on./;\n  var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/;\n  var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\n  var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\n  validateProperty$1 = function (tagName, name, value, eventRegistry) {\n    if (hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) {\n      return true;\n    }\n\n    var lowerCasedName = name.toLowerCase();\n\n    if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {\n      error('React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.');\n\n      warnedProperties$1[name] = true;\n      return true;\n    } // We can't rely on the event system being injected on the server.\n\n\n    if (eventRegistry != null) {\n      var registrationNameDependencies = eventRegistry.registrationNameDependencies,\n          possibleRegistrationNames = eventRegistry.possibleRegistrationNames;\n\n      if (registrationNameDependencies.hasOwnProperty(name)) {\n        return true;\n      }\n\n      var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null;\n\n      if (registrationName != null) {\n        error('Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName);\n\n        warnedProperties$1[name] = true;\n        return true;\n      }\n\n      if (EVENT_NAME_REGEX.test(name)) {\n        error('Unknown event handler property `%s`. It will be ignored.', name);\n\n        warnedProperties$1[name] = true;\n        return true;\n      }\n    } else if (EVENT_NAME_REGEX.test(name)) {\n      // If no event plugins have been injected, we are in a server environment.\n      // So we can't tell if the event name is correct for sure, but we can filter\n      // out known bad ones like `onclick`. We can't suggest a specific replacement though.\n      if (INVALID_EVENT_NAME_REGEX.test(name)) {\n        error('Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name);\n      }\n\n      warnedProperties$1[name] = true;\n      return true;\n    } // Let the ARIA attribute hook validate ARIA attributes\n\n\n    if (rARIA$1.test(name) || rARIACamel$1.test(name)) {\n      return true;\n    }\n\n    if (lowerCasedName === 'innerhtml') {\n      error('Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (lowerCasedName === 'aria') {\n      error('The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') {\n      error('Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', typeof value);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (typeof value === 'number' && isNaN(value)) {\n      error('Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    var propertyInfo = getPropertyInfo(name);\n    var isReserved = propertyInfo !== null && propertyInfo.type === RESERVED; // Known attributes should match the casing specified in the property config.\n\n    if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n      var standardName = possibleStandardNames[lowerCasedName];\n\n      if (standardName !== name) {\n        error('Invalid DOM property `%s`. Did you mean `%s`?', name, standardName);\n\n        warnedProperties$1[name] = true;\n        return true;\n      }\n    } else if (!isReserved && name !== lowerCasedName) {\n      // Unknown attributes should have lowercase casing since that's how they\n      // will be cased anyway with server rendering.\n      error('React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.', name, lowerCasedName);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (typeof value === 'boolean' && shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n      if (value) {\n        error('Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.', value, name, name, value, name);\n      } else {\n        error('Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name);\n      }\n\n      warnedProperties$1[name] = true;\n      return true;\n    } // Now that we've validated casing, do not validate\n    // data types for reserved props\n\n\n    if (isReserved) {\n      return true;\n    } // Warn when a known attribute is a bad type\n\n\n    if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n      warnedProperties$1[name] = true;\n      return false;\n    } // Warn when passing the strings 'false' or 'true' into a boolean prop\n\n\n    if ((value === 'false' || value === 'true') && propertyInfo !== null && propertyInfo.type === BOOLEAN) {\n      error('Received the string `%s` for the boolean attribute `%s`. ' + '%s ' + 'Did you mean %s={%s}?', value, name, value === 'false' ? 'The browser will interpret it as a truthy value.' : 'Although this works, it will not work as expected if you pass the string \"false\".', name, value);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    return true;\n  };\n}\n\nvar warnUnknownProperties = function (type, props, eventRegistry) {\n  {\n    var unknownProps = [];\n\n    for (var key in props) {\n      var isValid = validateProperty$1(type, key, props[key], eventRegistry);\n\n      if (!isValid) {\n        unknownProps.push(key);\n      }\n    }\n\n    var unknownPropString = unknownProps.map(function (prop) {\n      return '`' + prop + '`';\n    }).join(', ');\n\n    if (unknownProps.length === 1) {\n      error('Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type);\n    } else if (unknownProps.length > 1) {\n      error('Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type);\n    }\n  }\n};\n\nfunction validateProperties$2(type, props, eventRegistry) {\n  if (isCustomComponent(type, props)) {\n    return;\n  }\n\n  warnUnknownProperties(type, props, eventRegistry);\n}\n\nvar IS_EVENT_HANDLE_NON_MANAGED_NODE = 1;\nvar IS_NON_DELEGATED = 1 << 1;\nvar IS_CAPTURE_PHASE = 1 << 2;\n// set to LEGACY_FB_SUPPORT. LEGACY_FB_SUPPORT only gets set when\n// we call willDeferLaterForLegacyFBSupport, thus not bailing out\n// will result in endless cycles like an infinite loop.\n// We also don't want to defer during event replaying.\n\nvar SHOULD_NOT_PROCESS_POLYFILL_EVENT_PLUGINS = IS_EVENT_HANDLE_NON_MANAGED_NODE | IS_NON_DELEGATED | IS_CAPTURE_PHASE;\n\n// This exists to avoid circular dependency between ReactDOMEventReplaying\n// and DOMPluginEventSystem.\nvar currentReplayingEvent = null;\nfunction setReplayingEvent(event) {\n  {\n    if (currentReplayingEvent !== null) {\n      error('Expected currently replaying event to be null. This error ' + 'is likely caused by a bug in React. Please file an issue.');\n    }\n  }\n\n  currentReplayingEvent = event;\n}\nfunction resetReplayingEvent() {\n  {\n    if (currentReplayingEvent === null) {\n      error('Expected currently replaying event to not be null. This error ' + 'is likely caused by a bug in React. Please file an issue.');\n    }\n  }\n\n  currentReplayingEvent = null;\n}\nfunction isReplayingEvent(event) {\n  return event === currentReplayingEvent;\n}\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\n\nfunction getEventTarget(nativeEvent) {\n  // Fallback to nativeEvent.srcElement for IE9\n  // https://github.com/facebook/react/issues/12506\n  var target = nativeEvent.target || nativeEvent.srcElement || window; // Normalize SVG <use> element events #4963\n\n  if (target.correspondingUseElement) {\n    target = target.correspondingUseElement;\n  } // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n  // @see http://www.quirksmode.org/js/events_properties.html\n\n\n  return target.nodeType === TEXT_NODE ? target.parentNode : target;\n}\n\nvar restoreImpl = null;\nvar restoreTarget = null;\nvar restoreQueue = null;\n\nfunction restoreStateOfTarget(target) {\n  // We perform this translation at the end of the event loop so that we\n  // always receive the correct fiber here\n  var internalInstance = getInstanceFromNode(target);\n\n  if (!internalInstance) {\n    // Unmounted\n    return;\n  }\n\n  if (typeof restoreImpl !== 'function') {\n    throw new Error('setRestoreImplementation() needs to be called to handle a target for controlled ' + 'events. This error is likely caused by a bug in React. Please file an issue.');\n  }\n\n  var stateNode = internalInstance.stateNode; // Guard against Fiber being unmounted.\n\n  if (stateNode) {\n    var _props = getFiberCurrentPropsFromNode(stateNode);\n\n    restoreImpl(internalInstance.stateNode, internalInstance.type, _props);\n  }\n}\n\nfunction setRestoreImplementation(impl) {\n  restoreImpl = impl;\n}\nfunction enqueueStateRestore(target) {\n  if (restoreTarget) {\n    if (restoreQueue) {\n      restoreQueue.push(target);\n    } else {\n      restoreQueue = [target];\n    }\n  } else {\n    restoreTarget = target;\n  }\n}\nfunction needsStateRestore() {\n  return restoreTarget !== null || restoreQueue !== null;\n}\nfunction restoreStateIfNeeded() {\n  if (!restoreTarget) {\n    return;\n  }\n\n  var target = restoreTarget;\n  var queuedTargets = restoreQueue;\n  restoreTarget = null;\n  restoreQueue = null;\n  restoreStateOfTarget(target);\n\n  if (queuedTargets) {\n    for (var i = 0; i < queuedTargets.length; i++) {\n      restoreStateOfTarget(queuedTargets[i]);\n    }\n  }\n}\n\n// the renderer. Such as when we're dispatching events or if third party\n// libraries need to call batchedUpdates. Eventually, this API will go away when\n// everything is batched by default. We'll then have a similar API to opt-out of\n// scheduled work and instead do synchronous work.\n// Defaults\n\nvar batchedUpdatesImpl = function (fn, bookkeeping) {\n  return fn(bookkeeping);\n};\n\nvar flushSyncImpl = function () {};\n\nvar isInsideEventHandler = false;\n\nfunction finishEventHandler() {\n  // Here we wait until all updates have propagated, which is important\n  // when using controlled components within layers:\n  // https://github.com/facebook/react/issues/1698\n  // Then we restore state of any controlled component.\n  var controlledComponentsHavePendingUpdates = needsStateRestore();\n\n  if (controlledComponentsHavePendingUpdates) {\n    // If a controlled event was fired, we may need to restore the state of\n    // the DOM node back to the controlled value. This is necessary when React\n    // bails out of the update without touching the DOM.\n    // TODO: Restore state in the microtask, after the discrete updates flush,\n    // instead of early flushing them here.\n    flushSyncImpl();\n    restoreStateIfNeeded();\n  }\n}\n\nfunction batchedUpdates(fn, a, b) {\n  if (isInsideEventHandler) {\n    // If we are currently inside another batch, we need to wait until it\n    // fully completes before restoring state.\n    return fn(a, b);\n  }\n\n  isInsideEventHandler = true;\n\n  try {\n    return batchedUpdatesImpl(fn, a, b);\n  } finally {\n    isInsideEventHandler = false;\n    finishEventHandler();\n  }\n} // TODO: Replace with flushSync\nfunction setBatchingImplementation(_batchedUpdatesImpl, _discreteUpdatesImpl, _flushSyncImpl) {\n  batchedUpdatesImpl = _batchedUpdatesImpl;\n  flushSyncImpl = _flushSyncImpl;\n}\n\nfunction isInteractive(tag) {\n  return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\n}\n\nfunction shouldPreventMouseEvent(name, type, props) {\n  switch (name) {\n    case 'onClick':\n    case 'onClickCapture':\n    case 'onDoubleClick':\n    case 'onDoubleClickCapture':\n    case 'onMouseDown':\n    case 'onMouseDownCapture':\n    case 'onMouseMove':\n    case 'onMouseMoveCapture':\n    case 'onMouseUp':\n    case 'onMouseUpCapture':\n    case 'onMouseEnter':\n      return !!(props.disabled && isInteractive(type));\n\n    default:\n      return false;\n  }\n}\n/**\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @return {?function} The stored callback.\n */\n\n\nfunction getListener(inst, registrationName) {\n  var stateNode = inst.stateNode;\n\n  if (stateNode === null) {\n    // Work in progress (ex: onload events in incremental mode).\n    return null;\n  }\n\n  var props = getFiberCurrentPropsFromNode(stateNode);\n\n  if (props === null) {\n    // Work in progress.\n    return null;\n  }\n\n  var listener = props[registrationName];\n\n  if (shouldPreventMouseEvent(registrationName, inst.type, props)) {\n    return null;\n  }\n\n  if (listener && typeof listener !== 'function') {\n    throw new Error(\"Expected `\" + registrationName + \"` listener to be a function, instead got a value of `\" + typeof listener + \"` type.\");\n  }\n\n  return listener;\n}\n\nvar passiveBrowserEventsSupported = false; // Check if browser support events with passive listeners\n// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n\nif (canUseDOM) {\n  try {\n    var options = {}; // $FlowFixMe: Ignore Flow complaining about needing a value\n\n    Object.defineProperty(options, 'passive', {\n      get: function () {\n        passiveBrowserEventsSupported = true;\n      }\n    });\n    window.addEventListener('test', options, options);\n    window.removeEventListener('test', options, options);\n  } catch (e) {\n    passiveBrowserEventsSupported = false;\n  }\n}\n\nfunction invokeGuardedCallbackProd(name, func, context, a, b, c, d, e, f) {\n  var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n  try {\n    func.apply(context, funcArgs);\n  } catch (error) {\n    this.onError(error);\n  }\n}\n\nvar invokeGuardedCallbackImpl = invokeGuardedCallbackProd;\n\n{\n  // In DEV mode, we swap out invokeGuardedCallback for a special version\n  // that plays more nicely with the browser's DevTools. The idea is to preserve\n  // \"Pause on exceptions\" behavior. Because React wraps all user-provided\n  // functions in invokeGuardedCallback, and the production version of\n  // invokeGuardedCallback uses a try-catch, all user exceptions are treated\n  // like caught exceptions, and the DevTools won't pause unless the developer\n  // takes the extra step of enabling pause on caught exceptions. This is\n  // unintuitive, though, because even though React has caught the error, from\n  // the developer's perspective, the error is uncaught.\n  //\n  // To preserve the expected \"Pause on exceptions\" behavior, we don't use a\n  // try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake\n  // DOM node, and call the user-provided callback from inside an event handler\n  // for that fake event. If the callback throws, the error is \"captured\" using\n  // a global event handler. But because the error happens in a different\n  // event loop context, it does not interrupt the normal program flow.\n  // Effectively, this gives us try-catch behavior without actually using\n  // try-catch. Neat!\n  // Check that the browser supports the APIs we need to implement our special\n  // DEV version of invokeGuardedCallback\n  if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n    var fakeNode = document.createElement('react');\n\n    invokeGuardedCallbackImpl = function invokeGuardedCallbackDev(name, func, context, a, b, c, d, e, f) {\n      // If document doesn't exist we know for sure we will crash in this method\n      // when we call document.createEvent(). However this can cause confusing\n      // errors: https://github.com/facebook/create-react-app/issues/3482\n      // So we preemptively throw with a better message instead.\n      if (typeof document === 'undefined' || document === null) {\n        throw new Error('The `document` global was defined when React was initialized, but is not ' + 'defined anymore. This can happen in a test environment if a component ' + 'schedules an update from an asynchronous callback, but the test has already ' + 'finished running. To solve this, you can either unmount the component at ' + 'the end of your test (and ensure that any asynchronous operations get ' + 'canceled in `componentWillUnmount`), or you can change the test itself ' + 'to be asynchronous.');\n      }\n\n      var evt = document.createEvent('Event');\n      var didCall = false; // Keeps track of whether the user-provided callback threw an error. We\n      // set this to true at the beginning, then set it to false right after\n      // calling the function. If the function errors, `didError` will never be\n      // set to false. This strategy works even if the browser is flaky and\n      // fails to call our global error handler, because it doesn't rely on\n      // the error event at all.\n\n      var didError = true; // Keeps track of the value of window.event so that we can reset it\n      // during the callback to let user code access window.event in the\n      // browsers that support it.\n\n      var windowEvent = window.event; // Keeps track of the descriptor of window.event to restore it after event\n      // dispatching: https://github.com/facebook/react/issues/13688\n\n      var windowEventDescriptor = Object.getOwnPropertyDescriptor(window, 'event');\n\n      function restoreAfterDispatch() {\n        // We immediately remove the callback from event listeners so that\n        // nested `invokeGuardedCallback` calls do not clash. Otherwise, a\n        // nested call would trigger the fake event handlers of any call higher\n        // in the stack.\n        fakeNode.removeEventListener(evtType, callCallback, false); // We check for window.hasOwnProperty('event') to prevent the\n        // window.event assignment in both IE <= 10 as they throw an error\n        // \"Member not found\" in strict mode, and in Firefox which does not\n        // support window.event.\n\n        if (typeof window.event !== 'undefined' && window.hasOwnProperty('event')) {\n          window.event = windowEvent;\n        }\n      } // Create an event handler for our fake event. We will synchronously\n      // dispatch our fake event using `dispatchEvent`. Inside the handler, we\n      // call the user-provided callback.\n\n\n      var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n      function callCallback() {\n        didCall = true;\n        restoreAfterDispatch();\n        func.apply(context, funcArgs);\n        didError = false;\n      } // Create a global error event handler. We use this to capture the value\n      // that was thrown. It's possible that this error handler will fire more\n      // than once; for example, if non-React code also calls `dispatchEvent`\n      // and a handler for that event throws. We should be resilient to most of\n      // those cases. Even if our error event handler fires more than once, the\n      // last error event is always used. If the callback actually does error,\n      // we know that the last error event is the correct one, because it's not\n      // possible for anything else to have happened in between our callback\n      // erroring and the code that follows the `dispatchEvent` call below. If\n      // the callback doesn't error, but the error event was fired, we know to\n      // ignore it because `didError` will be false, as described above.\n\n\n      var error; // Use this to track whether the error event is ever called.\n\n      var didSetError = false;\n      var isCrossOriginError = false;\n\n      function handleWindowError(event) {\n        error = event.error;\n        didSetError = true;\n\n        if (error === null && event.colno === 0 && event.lineno === 0) {\n          isCrossOriginError = true;\n        }\n\n        if (event.defaultPrevented) {\n          // Some other error handler has prevented default.\n          // Browsers silence the error report if this happens.\n          // We'll remember this to later decide whether to log it or not.\n          if (error != null && typeof error === 'object') {\n            try {\n              error._suppressLogging = true;\n            } catch (inner) {// Ignore.\n            }\n          }\n        }\n      } // Create a fake event type.\n\n\n      var evtType = \"react-\" + (name ? name : 'invokeguardedcallback'); // Attach our event handlers\n\n      window.addEventListener('error', handleWindowError);\n      fakeNode.addEventListener(evtType, callCallback, false); // Synchronously dispatch our fake event. If the user-provided function\n      // errors, it will trigger our global error handler.\n\n      evt.initEvent(evtType, false, false);\n      fakeNode.dispatchEvent(evt);\n\n      if (windowEventDescriptor) {\n        Object.defineProperty(window, 'event', windowEventDescriptor);\n      }\n\n      if (didCall && didError) {\n        if (!didSetError) {\n          // The callback errored, but the error event never fired.\n          // eslint-disable-next-line react-internal/prod-error-codes\n          error = new Error('An error was thrown inside one of your components, but React ' + \"doesn't know what it was. This is likely due to browser \" + 'flakiness. React does its best to preserve the \"Pause on ' + 'exceptions\" behavior of the DevTools, which requires some ' + \"DEV-mode only tricks. It's possible that these don't work in \" + 'your browser. Try triggering the error in production mode, ' + 'or switching to a modern browser. If you suspect that this is ' + 'actually an issue with React, please file an issue.');\n        } else if (isCrossOriginError) {\n          // eslint-disable-next-line react-internal/prod-error-codes\n          error = new Error(\"A cross-origin error was thrown. React doesn't have access to \" + 'the actual error object in development. ' + 'See https://reactjs.org/link/crossorigin-error for more information.');\n        }\n\n        this.onError(error);\n      } // Remove our event listeners\n\n\n      window.removeEventListener('error', handleWindowError);\n\n      if (!didCall) {\n        // Something went really wrong, and our event was not dispatched.\n        // https://github.com/facebook/react/issues/16734\n        // https://github.com/facebook/react/issues/16585\n        // Fall back to the production implementation.\n        restoreAfterDispatch();\n        return invokeGuardedCallbackProd.apply(this, arguments);\n      }\n    };\n  }\n}\n\nvar invokeGuardedCallbackImpl$1 = invokeGuardedCallbackImpl;\n\nvar hasError = false;\nvar caughtError = null; // Used by event system to capture/rethrow the first error.\n\nvar hasRethrowError = false;\nvar rethrowError = null;\nvar reporter = {\n  onError: function (error) {\n    hasError = true;\n    caughtError = error;\n  }\n};\n/**\n * Call a function while guarding against errors that happens within it.\n * Returns an error if it throws, otherwise null.\n *\n * In production, this is implemented using a try-catch. The reason we don't\n * use a try-catch directly is so that we can swap out a different\n * implementation in DEV mode.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallback(name, func, context, a, b, c, d, e, f) {\n  hasError = false;\n  caughtError = null;\n  invokeGuardedCallbackImpl$1.apply(reporter, arguments);\n}\n/**\n * Same as invokeGuardedCallback, but instead of returning an error, it stores\n * it in a global so it can be rethrown by `rethrowCaughtError` later.\n * TODO: See if caughtError and rethrowError can be unified.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallbackAndCatchFirstError(name, func, context, a, b, c, d, e, f) {\n  invokeGuardedCallback.apply(this, arguments);\n\n  if (hasError) {\n    var error = clearCaughtError();\n\n    if (!hasRethrowError) {\n      hasRethrowError = true;\n      rethrowError = error;\n    }\n  }\n}\n/**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\n\nfunction rethrowCaughtError() {\n  if (hasRethrowError) {\n    var error = rethrowError;\n    hasRethrowError = false;\n    rethrowError = null;\n    throw error;\n  }\n}\nfunction hasCaughtError() {\n  return hasError;\n}\nfunction clearCaughtError() {\n  if (hasError) {\n    var error = caughtError;\n    hasError = false;\n    caughtError = null;\n    return error;\n  } else {\n    throw new Error('clearCaughtError was called but no error was captured. This error ' + 'is likely caused by a bug in React. Please file an issue.');\n  }\n}\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n *\n * Note that this module is currently shared and assumed to be stateless.\n * If this becomes an actual Map, that will break.\n */\nfunction get(key) {\n  return key._reactInternals;\n}\nfunction has(key) {\n  return key._reactInternals !== undefined;\n}\nfunction set(key, value) {\n  key._reactInternals = value;\n}\n\n// Don't change these two values. They're used by React Dev Tools.\nvar NoFlags =\n/*                      */\n0;\nvar PerformedWork =\n/*                */\n1; // You can change the rest (and add more).\n\nvar Placement =\n/*                    */\n2;\nvar Update =\n/*                       */\n4;\nvar ChildDeletion =\n/*                */\n16;\nvar ContentReset =\n/*                 */\n32;\nvar Callback =\n/*                     */\n64;\nvar DidCapture =\n/*                   */\n128;\nvar ForceClientRender =\n/*            */\n256;\nvar Ref =\n/*                          */\n512;\nvar Snapshot =\n/*                     */\n1024;\nvar Passive =\n/*                      */\n2048;\nvar Hydrating =\n/*                    */\n4096;\nvar Visibility =\n/*                   */\n8192;\nvar StoreConsistency =\n/*             */\n16384;\nvar LifecycleEffectMask = Passive | Update | Callback | Ref | Snapshot | StoreConsistency; // Union of all commit flags (flags with the lifetime of a particular commit)\n\nvar HostEffectMask =\n/*               */\n32767; // These are not really side effects, but we still reuse this field.\n\nvar Incomplete =\n/*                   */\n32768;\nvar ShouldCapture =\n/*                */\n65536;\nvar ForceUpdateForLegacySuspense =\n/* */\n131072;\nvar Forked =\n/*                       */\n1048576; // Static tags describe aspects of a fiber that are not specific to a render,\n// e.g. a fiber uses a passive effect (even if there are no updates on this particular render).\n// This enables us to defer more work in the unmount case,\n// since we can defer traversing the tree during layout to look for Passive effects,\n// and instead rely on the static flag as a signal that there may be cleanup work.\n\nvar RefStatic =\n/*                    */\n2097152;\nvar LayoutStatic =\n/*                 */\n4194304;\nvar PassiveStatic =\n/*                */\n8388608; // These flags allow us to traverse to fibers that have effects on mount\n// without traversing the entire tree after every commit for\n// double invoking\n\nvar MountLayoutDev =\n/*               */\n16777216;\nvar MountPassiveDev =\n/*              */\n33554432; // Groups of flags that are used in the commit phase to skip over trees that\n// don't contain effects, by checking subtreeFlags.\n\nvar BeforeMutationMask = // TODO: Remove Update flag from before mutation phase by re-landing Visibility\n// flag logic (see #20043)\nUpdate | Snapshot | ( 0);\nvar MutationMask = Placement | Update | ChildDeletion | ContentReset | Ref | Hydrating | Visibility;\nvar LayoutMask = Update | Callback | Ref | Visibility; // TODO: Split into PassiveMountMask and PassiveUnmountMask\n\nvar PassiveMask = Passive | ChildDeletion; // Union of tags that don't get reset on clones.\n// This allows certain concepts to persist without recalculating them,\n// e.g. whether a subtree contains passive effects or portals.\n\nvar StaticMask = LayoutStatic | PassiveStatic | RefStatic;\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nfunction getNearestMountedFiber(fiber) {\n  var node = fiber;\n  var nearestMounted = fiber;\n\n  if (!fiber.alternate) {\n    // If there is no alternate, this might be a new tree that isn't inserted\n    // yet. If it is, then it will have a pending insertion effect on it.\n    var nextNode = node;\n\n    do {\n      node = nextNode;\n\n      if ((node.flags & (Placement | Hydrating)) !== NoFlags) {\n        // This is an insertion or in-progress hydration. The nearest possible\n        // mounted fiber is the parent but we need to continue to figure out\n        // if that one is still mounted.\n        nearestMounted = node.return;\n      }\n\n      nextNode = node.return;\n    } while (nextNode);\n  } else {\n    while (node.return) {\n      node = node.return;\n    }\n  }\n\n  if (node.tag === HostRoot) {\n    // TODO: Check if this was a nested HostRoot when used with\n    // renderContainerIntoSubtree.\n    return nearestMounted;\n  } // If we didn't hit the root, that means that we're in an disconnected tree\n  // that has been unmounted.\n\n\n  return null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n  if (fiber.tag === SuspenseComponent) {\n    var suspenseState = fiber.memoizedState;\n\n    if (suspenseState === null) {\n      var current = fiber.alternate;\n\n      if (current !== null) {\n        suspenseState = current.memoizedState;\n      }\n    }\n\n    if (suspenseState !== null) {\n      return suspenseState.dehydrated;\n    }\n  }\n\n  return null;\n}\nfunction getContainerFromFiber(fiber) {\n  return fiber.tag === HostRoot ? fiber.stateNode.containerInfo : null;\n}\nfunction isFiberMounted(fiber) {\n  return getNearestMountedFiber(fiber) === fiber;\n}\nfunction isMounted(component) {\n  {\n    var owner = ReactCurrentOwner.current;\n\n    if (owner !== null && owner.tag === ClassComponent) {\n      var ownerFiber = owner;\n      var instance = ownerFiber.stateNode;\n\n      if (!instance._warnedAboutRefsInRender) {\n        error('%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentNameFromFiber(ownerFiber) || 'A component');\n      }\n\n      instance._warnedAboutRefsInRender = true;\n    }\n  }\n\n  var fiber = get(component);\n\n  if (!fiber) {\n    return false;\n  }\n\n  return getNearestMountedFiber(fiber) === fiber;\n}\n\nfunction assertIsMounted(fiber) {\n  if (getNearestMountedFiber(fiber) !== fiber) {\n    throw new Error('Unable to find node on an unmounted component.');\n  }\n}\n\nfunction findCurrentFiberUsingSlowPath(fiber) {\n  var alternate = fiber.alternate;\n\n  if (!alternate) {\n    // If there is no alternate, then we only need to check if it is mounted.\n    var nearestMounted = getNearestMountedFiber(fiber);\n\n    if (nearestMounted === null) {\n      throw new Error('Unable to find node on an unmounted component.');\n    }\n\n    if (nearestMounted !== fiber) {\n      return null;\n    }\n\n    return fiber;\n  } // If we have two possible branches, we'll walk backwards up to the root\n  // to see what path the root points to. On the way we may hit one of the\n  // special cases and we'll deal with them.\n\n\n  var a = fiber;\n  var b = alternate;\n\n  while (true) {\n    var parentA = a.return;\n\n    if (parentA === null) {\n      // We're at the root.\n      break;\n    }\n\n    var parentB = parentA.alternate;\n\n    if (parentB === null) {\n      // There is no alternate. This is an unusual case. Currently, it only\n      // happens when a Suspense component is hidden. An extra fragment fiber\n      // is inserted in between the Suspense fiber and its children. Skip\n      // over this extra fragment fiber and proceed to the next parent.\n      var nextParent = parentA.return;\n\n      if (nextParent !== null) {\n        a = b = nextParent;\n        continue;\n      } // If there's no parent, we're at the root.\n\n\n      break;\n    } // If both copies of the parent fiber point to the same child, we can\n    // assume that the child is current. This happens when we bailout on low\n    // priority: the bailed out fiber's child reuses the current child.\n\n\n    if (parentA.child === parentB.child) {\n      var child = parentA.child;\n\n      while (child) {\n        if (child === a) {\n          // We've determined that A is the current branch.\n          assertIsMounted(parentA);\n          return fiber;\n        }\n\n        if (child === b) {\n          // We've determined that B is the current branch.\n          assertIsMounted(parentA);\n          return alternate;\n        }\n\n        child = child.sibling;\n      } // We should never have an alternate for any mounting node. So the only\n      // way this could possibly happen is if this was unmounted, if at all.\n\n\n      throw new Error('Unable to find node on an unmounted component.');\n    }\n\n    if (a.return !== b.return) {\n      // The return pointer of A and the return pointer of B point to different\n      // fibers. We assume that return pointers never criss-cross, so A must\n      // belong to the child set of A.return, and B must belong to the child\n      // set of B.return.\n      a = parentA;\n      b = parentB;\n    } else {\n      // The return pointers point to the same fiber. We'll have to use the\n      // default, slow path: scan the child sets of each parent alternate to see\n      // which child belongs to which set.\n      //\n      // Search parent A's child set\n      var didFindChild = false;\n      var _child = parentA.child;\n\n      while (_child) {\n        if (_child === a) {\n          didFindChild = true;\n          a = parentA;\n          b = parentB;\n          break;\n        }\n\n        if (_child === b) {\n          didFindChild = true;\n          b = parentA;\n          a = parentB;\n          break;\n        }\n\n        _child = _child.sibling;\n      }\n\n      if (!didFindChild) {\n        // Search parent B's child set\n        _child = parentB.child;\n\n        while (_child) {\n          if (_child === a) {\n            didFindChild = true;\n            a = parentB;\n            b = parentA;\n            break;\n          }\n\n          if (_child === b) {\n            didFindChild = true;\n            b = parentB;\n            a = parentA;\n            break;\n          }\n\n          _child = _child.sibling;\n        }\n\n        if (!didFindChild) {\n          throw new Error('Child was not found in either parent set. This indicates a bug ' + 'in React related to the return pointer. Please file an issue.');\n        }\n      }\n    }\n\n    if (a.alternate !== b) {\n      throw new Error(\"Return fibers should always be each others' alternates. \" + 'This error is likely caused by a bug in React. Please file an issue.');\n    }\n  } // If the root is not a host container, we're in a disconnected tree. I.e.\n  // unmounted.\n\n\n  if (a.tag !== HostRoot) {\n    throw new Error('Unable to find node on an unmounted component.');\n  }\n\n  if (a.stateNode.current === a) {\n    // We've determined that A is the current branch.\n    return fiber;\n  } // Otherwise B has to be current branch.\n\n\n  return alternate;\n}\nfunction findCurrentHostFiber(parent) {\n  var currentParent = findCurrentFiberUsingSlowPath(parent);\n  return currentParent !== null ? findCurrentHostFiberImpl(currentParent) : null;\n}\n\nfunction findCurrentHostFiberImpl(node) {\n  // Next we'll drill down this component to find the first HostComponent/Text.\n  if (node.tag === HostComponent || node.tag === HostText) {\n    return node;\n  }\n\n  var child = node.child;\n\n  while (child !== null) {\n    var match = findCurrentHostFiberImpl(child);\n\n    if (match !== null) {\n      return match;\n    }\n\n    child = child.sibling;\n  }\n\n  return null;\n}\n\nfunction findCurrentHostFiberWithNoPortals(parent) {\n  var currentParent = findCurrentFiberUsingSlowPath(parent);\n  return currentParent !== null ? findCurrentHostFiberWithNoPortalsImpl(currentParent) : null;\n}\n\nfunction findCurrentHostFiberWithNoPortalsImpl(node) {\n  // Next we'll drill down this component to find the first HostComponent/Text.\n  if (node.tag === HostComponent || node.tag === HostText) {\n    return node;\n  }\n\n  var child = node.child;\n\n  while (child !== null) {\n    if (child.tag !== HostPortal) {\n      var match = findCurrentHostFiberWithNoPortalsImpl(child);\n\n      if (match !== null) {\n        return match;\n      }\n    }\n\n    child = child.sibling;\n  }\n\n  return null;\n}\n\n// This module only exists as an ESM wrapper around the external CommonJS\nvar scheduleCallback = Scheduler.unstable_scheduleCallback;\nvar cancelCallback = Scheduler.unstable_cancelCallback;\nvar shouldYield = Scheduler.unstable_shouldYield;\nvar requestPaint = Scheduler.unstable_requestPaint;\nvar now = Scheduler.unstable_now;\nvar getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel;\nvar ImmediatePriority = Scheduler.unstable_ImmediatePriority;\nvar UserBlockingPriority = Scheduler.unstable_UserBlockingPriority;\nvar NormalPriority = Scheduler.unstable_NormalPriority;\nvar LowPriority = Scheduler.unstable_LowPriority;\nvar IdlePriority = Scheduler.unstable_IdlePriority;\n// this doesn't actually exist on the scheduler, but it *does*\n// on scheduler/unstable_mock, which we'll need for internal testing\nvar unstable_yieldValue = Scheduler.unstable_yieldValue;\nvar unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue;\n\nvar rendererID = null;\nvar injectedHook = null;\nvar injectedProfilingHooks = null;\nvar hasLoggedError = false;\nvar isDevToolsPresent = typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined';\nfunction injectInternals(internals) {\n  if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n    // No DevTools\n    return false;\n  }\n\n  var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n\n  if (hook.isDisabled) {\n    // This isn't a real property on the hook, but it can be set to opt out\n    // of DevTools integration and associated warnings and logs.\n    // https://github.com/facebook/react/issues/3877\n    return true;\n  }\n\n  if (!hook.supportsFiber) {\n    {\n      error('The installed version of React DevTools is too old and will not work ' + 'with the current version of React. Please update React DevTools. ' + 'https://reactjs.org/link/react-devtools');\n    } // DevTools exists, even though it doesn't support Fiber.\n\n\n    return true;\n  }\n\n  try {\n    if (enableSchedulingProfiler) {\n      // Conditionally inject these hooks only if Timeline profiler is supported by this build.\n      // This gives DevTools a way to feature detect that isn't tied to version number\n      // (since profiling and timeline are controlled by different feature flags).\n      internals = assign({}, internals, {\n        getLaneLabelMap: getLaneLabelMap,\n        injectProfilingHooks: injectProfilingHooks\n      });\n    }\n\n    rendererID = hook.inject(internals); // We have successfully injected, so now it is safe to set up hooks.\n\n    injectedHook = hook;\n  } catch (err) {\n    // Catch all errors because it is unsafe to throw during initialization.\n    {\n      error('React instrumentation encountered an error: %s.', err);\n    }\n  }\n\n  if (hook.checkDCE) {\n    // This is the real DevTools.\n    return true;\n  } else {\n    // This is likely a hook installed by Fast Refresh runtime.\n    return false;\n  }\n}\nfunction onScheduleRoot(root, children) {\n  {\n    if (injectedHook && typeof injectedHook.onScheduleFiberRoot === 'function') {\n      try {\n        injectedHook.onScheduleFiberRoot(rendererID, root, children);\n      } catch (err) {\n        if ( !hasLoggedError) {\n          hasLoggedError = true;\n\n          error('React instrumentation encountered an error: %s', err);\n        }\n      }\n    }\n  }\n}\nfunction onCommitRoot(root, eventPriority) {\n  if (injectedHook && typeof injectedHook.onCommitFiberRoot === 'function') {\n    try {\n      var didError = (root.current.flags & DidCapture) === DidCapture;\n\n      if (enableProfilerTimer) {\n        var schedulerPriority;\n\n        switch (eventPriority) {\n          case DiscreteEventPriority:\n            schedulerPriority = ImmediatePriority;\n            break;\n\n          case ContinuousEventPriority:\n            schedulerPriority = UserBlockingPriority;\n            break;\n\n          case DefaultEventPriority:\n            schedulerPriority = NormalPriority;\n            break;\n\n          case IdleEventPriority:\n            schedulerPriority = IdlePriority;\n            break;\n\n          default:\n            schedulerPriority = NormalPriority;\n            break;\n        }\n\n        injectedHook.onCommitFiberRoot(rendererID, root, schedulerPriority, didError);\n      } else {\n        injectedHook.onCommitFiberRoot(rendererID, root, undefined, didError);\n      }\n    } catch (err) {\n      {\n        if (!hasLoggedError) {\n          hasLoggedError = true;\n\n          error('React instrumentation encountered an error: %s', err);\n        }\n      }\n    }\n  }\n}\nfunction onPostCommitRoot(root) {\n  if (injectedHook && typeof injectedHook.onPostCommitFiberRoot === 'function') {\n    try {\n      injectedHook.onPostCommitFiberRoot(rendererID, root);\n    } catch (err) {\n      {\n        if (!hasLoggedError) {\n          hasLoggedError = true;\n\n          error('React instrumentation encountered an error: %s', err);\n        }\n      }\n    }\n  }\n}\nfunction onCommitUnmount(fiber) {\n  if (injectedHook && typeof injectedHook.onCommitFiberUnmount === 'function') {\n    try {\n      injectedHook.onCommitFiberUnmount(rendererID, fiber);\n    } catch (err) {\n      {\n        if (!hasLoggedError) {\n          hasLoggedError = true;\n\n          error('React instrumentation encountered an error: %s', err);\n        }\n      }\n    }\n  }\n}\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n  {\n    if (typeof unstable_yieldValue === 'function') {\n      // We're in a test because Scheduler.unstable_yieldValue only exists\n      // in SchedulerMock. To reduce the noise in strict mode tests,\n      // suppress warnings and disable scheduler yielding during the double render\n      unstable_setDisableYieldValue(newIsStrictMode);\n      setSuppressWarning(newIsStrictMode);\n    }\n\n    if (injectedHook && typeof injectedHook.setStrictMode === 'function') {\n      try {\n        injectedHook.setStrictMode(rendererID, newIsStrictMode);\n      } catch (err) {\n        {\n          if (!hasLoggedError) {\n            hasLoggedError = true;\n\n            error('React instrumentation encountered an error: %s', err);\n          }\n        }\n      }\n    }\n  }\n} // Profiler API hooks\n\nfunction injectProfilingHooks(profilingHooks) {\n  injectedProfilingHooks = profilingHooks;\n}\n\nfunction getLaneLabelMap() {\n  {\n    var map = new Map();\n    var lane = 1;\n\n    for (var index = 0; index < TotalLanes; index++) {\n      var label = getLabelForLane(lane);\n      map.set(lane, label);\n      lane *= 2;\n    }\n\n    return map;\n  }\n}\n\nfunction markCommitStarted(lanes) {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markCommitStarted === 'function') {\n      injectedProfilingHooks.markCommitStarted(lanes);\n    }\n  }\n}\nfunction markCommitStopped() {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markCommitStopped === 'function') {\n      injectedProfilingHooks.markCommitStopped();\n    }\n  }\n}\nfunction markComponentRenderStarted(fiber) {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentRenderStarted === 'function') {\n      injectedProfilingHooks.markComponentRenderStarted(fiber);\n    }\n  }\n}\nfunction markComponentRenderStopped() {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentRenderStopped === 'function') {\n      injectedProfilingHooks.markComponentRenderStopped();\n    }\n  }\n}\nfunction markComponentPassiveEffectMountStarted(fiber) {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectMountStarted === 'function') {\n      injectedProfilingHooks.markComponentPassiveEffectMountStarted(fiber);\n    }\n  }\n}\nfunction markComponentPassiveEffectMountStopped() {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectMountStopped === 'function') {\n      injectedProfilingHooks.markComponentPassiveEffectMountStopped();\n    }\n  }\n}\nfunction markComponentPassiveEffectUnmountStarted(fiber) {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStarted === 'function') {\n      injectedProfilingHooks.markComponentPassiveEffectUnmountStarted(fiber);\n    }\n  }\n}\nfunction markComponentPassiveEffectUnmountStopped() {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStopped === 'function') {\n      injectedProfilingHooks.markComponentPassiveEffectUnmountStopped();\n    }\n  }\n}\nfunction markComponentLayoutEffectMountStarted(fiber) {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectMountStarted === 'function') {\n      injectedProfilingHooks.markComponentLayoutEffectMountStarted(fiber);\n    }\n  }\n}\nfunction markComponentLayoutEffectMountStopped() {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectMountStopped === 'function') {\n      injectedProfilingHooks.markComponentLayoutEffectMountStopped();\n    }\n  }\n}\nfunction markComponentLayoutEffectUnmountStarted(fiber) {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStarted === 'function') {\n      injectedProfilingHooks.markComponentLayoutEffectUnmountStarted(fiber);\n    }\n  }\n}\nfunction markComponentLayoutEffectUnmountStopped() {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStopped === 'function') {\n      injectedProfilingHooks.markComponentLayoutEffectUnmountStopped();\n    }\n  }\n}\nfunction markComponentErrored(fiber, thrownValue, lanes) {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentErrored === 'function') {\n      injectedProfilingHooks.markComponentErrored(fiber, thrownValue, lanes);\n    }\n  }\n}\nfunction markComponentSuspended(fiber, wakeable, lanes) {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentSuspended === 'function') {\n      injectedProfilingHooks.markComponentSuspended(fiber, wakeable, lanes);\n    }\n  }\n}\nfunction markLayoutEffectsStarted(lanes) {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markLayoutEffectsStarted === 'function') {\n      injectedProfilingHooks.markLayoutEffectsStarted(lanes);\n    }\n  }\n}\nfunction markLayoutEffectsStopped() {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markLayoutEffectsStopped === 'function') {\n      injectedProfilingHooks.markLayoutEffectsStopped();\n    }\n  }\n}\nfunction markPassiveEffectsStarted(lanes) {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markPassiveEffectsStarted === 'function') {\n      injectedProfilingHooks.markPassiveEffectsStarted(lanes);\n    }\n  }\n}\nfunction markPassiveEffectsStopped() {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markPassiveEffectsStopped === 'function') {\n      injectedProfilingHooks.markPassiveEffectsStopped();\n    }\n  }\n}\nfunction markRenderStarted(lanes) {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderStarted === 'function') {\n      injectedProfilingHooks.markRenderStarted(lanes);\n    }\n  }\n}\nfunction markRenderYielded() {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderYielded === 'function') {\n      injectedProfilingHooks.markRenderYielded();\n    }\n  }\n}\nfunction markRenderStopped() {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderStopped === 'function') {\n      injectedProfilingHooks.markRenderStopped();\n    }\n  }\n}\nfunction markRenderScheduled(lane) {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderScheduled === 'function') {\n      injectedProfilingHooks.markRenderScheduled(lane);\n    }\n  }\n}\nfunction markForceUpdateScheduled(fiber, lane) {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markForceUpdateScheduled === 'function') {\n      injectedProfilingHooks.markForceUpdateScheduled(fiber, lane);\n    }\n  }\n}\nfunction markStateUpdateScheduled(fiber, lane) {\n  {\n    if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markStateUpdateScheduled === 'function') {\n      injectedProfilingHooks.markStateUpdateScheduled(fiber, lane);\n    }\n  }\n}\n\nvar NoMode =\n/*                         */\n0; // TODO: Remove ConcurrentMode by reading from the root tag instead\n\nvar ConcurrentMode =\n/*                 */\n1;\nvar ProfileMode =\n/*                    */\n2;\nvar StrictLegacyMode =\n/*               */\n8;\nvar StrictEffectsMode =\n/*              */\n16;\n\n// TODO: This is pretty well supported by browsers. Maybe we can drop it.\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback; // Count leading zeros.\n// Based on:\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nfunction clz32Fallback(x) {\n  var asUint = x >>> 0;\n\n  if (asUint === 0) {\n    return 32;\n  }\n\n  return 31 - (log(asUint) / LN2 | 0) | 0;\n}\n\n// If those values are changed that package should be rebuilt and redeployed.\n\nvar TotalLanes = 31;\nvar NoLanes =\n/*                        */\n0;\nvar NoLane =\n/*                          */\n0;\nvar SyncLane =\n/*                        */\n1;\nvar InputContinuousHydrationLane =\n/*    */\n2;\nvar InputContinuousLane =\n/*             */\n4;\nvar DefaultHydrationLane =\n/*            */\n8;\nvar DefaultLane =\n/*                     */\n16;\nvar TransitionHydrationLane =\n/*                */\n32;\nvar TransitionLanes =\n/*                       */\n4194240;\nvar TransitionLane1 =\n/*                        */\n64;\nvar TransitionLane2 =\n/*                        */\n128;\nvar TransitionLane3 =\n/*                        */\n256;\nvar TransitionLane4 =\n/*                        */\n512;\nvar TransitionLane5 =\n/*                        */\n1024;\nvar TransitionLane6 =\n/*                        */\n2048;\nvar TransitionLane7 =\n/*                        */\n4096;\nvar TransitionLane8 =\n/*                        */\n8192;\nvar TransitionLane9 =\n/*                        */\n16384;\nvar TransitionLane10 =\n/*                       */\n32768;\nvar TransitionLane11 =\n/*                       */\n65536;\nvar TransitionLane12 =\n/*                       */\n131072;\nvar TransitionLane13 =\n/*                       */\n262144;\nvar TransitionLane14 =\n/*                       */\n524288;\nvar TransitionLane15 =\n/*                       */\n1048576;\nvar TransitionLane16 =\n/*                       */\n2097152;\nvar RetryLanes =\n/*                            */\n130023424;\nvar RetryLane1 =\n/*                             */\n4194304;\nvar RetryLane2 =\n/*                             */\n8388608;\nvar RetryLane3 =\n/*                             */\n16777216;\nvar RetryLane4 =\n/*                             */\n33554432;\nvar RetryLane5 =\n/*                             */\n67108864;\nvar SomeRetryLane = RetryLane1;\nvar SelectiveHydrationLane =\n/*          */\n134217728;\nvar NonIdleLanes =\n/*                          */\n268435455;\nvar IdleHydrationLane =\n/*               */\n268435456;\nvar IdleLane =\n/*                        */\n536870912;\nvar OffscreenLane =\n/*                   */\n1073741824; // This function is used for the experimental timeline (react-devtools-timeline)\n// It should be kept in sync with the Lanes values above.\n\nfunction getLabelForLane(lane) {\n  {\n    if (lane & SyncLane) {\n      return 'Sync';\n    }\n\n    if (lane & InputContinuousHydrationLane) {\n      return 'InputContinuousHydration';\n    }\n\n    if (lane & InputContinuousLane) {\n      return 'InputContinuous';\n    }\n\n    if (lane & DefaultHydrationLane) {\n      return 'DefaultHydration';\n    }\n\n    if (lane & DefaultLane) {\n      return 'Default';\n    }\n\n    if (lane & TransitionHydrationLane) {\n      return 'TransitionHydration';\n    }\n\n    if (lane & TransitionLanes) {\n      return 'Transition';\n    }\n\n    if (lane & RetryLanes) {\n      return 'Retry';\n    }\n\n    if (lane & SelectiveHydrationLane) {\n      return 'SelectiveHydration';\n    }\n\n    if (lane & IdleHydrationLane) {\n      return 'IdleHydration';\n    }\n\n    if (lane & IdleLane) {\n      return 'Idle';\n    }\n\n    if (lane & OffscreenLane) {\n      return 'Offscreen';\n    }\n  }\n}\nvar NoTimestamp = -1;\nvar nextTransitionLane = TransitionLane1;\nvar nextRetryLane = RetryLane1;\n\nfunction getHighestPriorityLanes(lanes) {\n  switch (getHighestPriorityLane(lanes)) {\n    case SyncLane:\n      return SyncLane;\n\n    case InputContinuousHydrationLane:\n      return InputContinuousHydrationLane;\n\n    case InputContinuousLane:\n      return InputContinuousLane;\n\n    case DefaultHydrationLane:\n      return DefaultHydrationLane;\n\n    case DefaultLane:\n      return DefaultLane;\n\n    case TransitionHydrationLane:\n      return TransitionHydrationLane;\n\n    case TransitionLane1:\n    case TransitionLane2:\n    case TransitionLane3:\n    case TransitionLane4:\n    case TransitionLane5:\n    case TransitionLane6:\n    case TransitionLane7:\n    case TransitionLane8:\n    case TransitionLane9:\n    case TransitionLane10:\n    case TransitionLane11:\n    case TransitionLane12:\n    case TransitionLane13:\n    case TransitionLane14:\n    case TransitionLane15:\n    case TransitionLane16:\n      return lanes & TransitionLanes;\n\n    case RetryLane1:\n    case RetryLane2:\n    case RetryLane3:\n    case RetryLane4:\n    case RetryLane5:\n      return lanes & RetryLanes;\n\n    case SelectiveHydrationLane:\n      return SelectiveHydrationLane;\n\n    case IdleHydrationLane:\n      return IdleHydrationLane;\n\n    case IdleLane:\n      return IdleLane;\n\n    case OffscreenLane:\n      return OffscreenLane;\n\n    default:\n      {\n        error('Should have found matching lanes. This is a bug in React.');\n      } // This shouldn't be reachable, but as a fallback, return the entire bitmask.\n\n\n      return lanes;\n  }\n}\n\nfunction getNextLanes(root, wipLanes) {\n  // Early bailout if there's no pending work left.\n  var pendingLanes = root.pendingLanes;\n\n  if (pendingLanes === NoLanes) {\n    return NoLanes;\n  }\n\n  var nextLanes = NoLanes;\n  var suspendedLanes = root.suspendedLanes;\n  var pingedLanes = root.pingedLanes; // Do not work on any idle work until all the non-idle work has finished,\n  // even if the work is suspended.\n\n  var nonIdlePendingLanes = pendingLanes & NonIdleLanes;\n\n  if (nonIdlePendingLanes !== NoLanes) {\n    var nonIdleUnblockedLanes = nonIdlePendingLanes & ~suspendedLanes;\n\n    if (nonIdleUnblockedLanes !== NoLanes) {\n      nextLanes = getHighestPriorityLanes(nonIdleUnblockedLanes);\n    } else {\n      var nonIdlePingedLanes = nonIdlePendingLanes & pingedLanes;\n\n      if (nonIdlePingedLanes !== NoLanes) {\n        nextLanes = getHighestPriorityLanes(nonIdlePingedLanes);\n      }\n    }\n  } else {\n    // The only remaining work is Idle.\n    var unblockedLanes = pendingLanes & ~suspendedLanes;\n\n    if (unblockedLanes !== NoLanes) {\n      nextLanes = getHighestPriorityLanes(unblockedLanes);\n    } else {\n      if (pingedLanes !== NoLanes) {\n        nextLanes = getHighestPriorityLanes(pingedLanes);\n      }\n    }\n  }\n\n  if (nextLanes === NoLanes) {\n    // This should only be reachable if we're suspended\n    // TODO: Consider warning in this path if a fallback timer is not scheduled.\n    return NoLanes;\n  } // If we're already in the middle of a render, switching lanes will interrupt\n  // it and we'll lose our progress. We should only do this if the new lanes are\n  // higher priority.\n\n\n  if (wipLanes !== NoLanes && wipLanes !== nextLanes && // If we already suspended with a delay, then interrupting is fine. Don't\n  // bother waiting until the root is complete.\n  (wipLanes & suspendedLanes) === NoLanes) {\n    var nextLane = getHighestPriorityLane(nextLanes);\n    var wipLane = getHighestPriorityLane(wipLanes);\n\n    if ( // Tests whether the next lane is equal or lower priority than the wip\n    // one. This works because the bits decrease in priority as you go left.\n    nextLane >= wipLane || // Default priority updates should not interrupt transition updates. The\n    // only difference between default updates and transition updates is that\n    // default updates do not support refresh transitions.\n    nextLane === DefaultLane && (wipLane & TransitionLanes) !== NoLanes) {\n      // Keep working on the existing in-progress tree. Do not interrupt.\n      return wipLanes;\n    }\n  }\n\n  if ((nextLanes & InputContinuousLane) !== NoLanes) {\n    // When updates are sync by default, we entangle continuous priority updates\n    // and default updates, so they render in the same batch. The only reason\n    // they use separate lanes is because continuous updates should interrupt\n    // transitions, but default updates should not.\n    nextLanes |= pendingLanes & DefaultLane;\n  } // Check for entangled lanes and add them to the batch.\n  //\n  // A lane is said to be entangled with another when it's not allowed to render\n  // in a batch that does not also include the other lane. Typically we do this\n  // when multiple updates have the same source, and we only want to respond to\n  // the most recent event from that source.\n  //\n  // Note that we apply entanglements *after* checking for partial work above.\n  // This means that if a lane is entangled during an interleaved event while\n  // it's already rendering, we won't interrupt it. This is intentional, since\n  // entanglement is usually \"best effort\": we'll try our best to render the\n  // lanes in the same batch, but it's not worth throwing out partially\n  // completed work in order to do it.\n  // TODO: Reconsider this. The counter-argument is that the partial work\n  // represents an intermediate state, which we don't want to show to the user.\n  // And by spending extra time finishing it, we're increasing the amount of\n  // time it takes to show the final state, which is what they are actually\n  // waiting for.\n  //\n  // For those exceptions where entanglement is semantically important, like\n  // useMutableSource, we should ensure that there is no partial work at the\n  // time we apply the entanglement.\n\n\n  var entangledLanes = root.entangledLanes;\n\n  if (entangledLanes !== NoLanes) {\n    var entanglements = root.entanglements;\n    var lanes = nextLanes & entangledLanes;\n\n    while (lanes > 0) {\n      var index = pickArbitraryLaneIndex(lanes);\n      var lane = 1 << index;\n      nextLanes |= entanglements[index];\n      lanes &= ~lane;\n    }\n  }\n\n  return nextLanes;\n}\nfunction getMostRecentEventTime(root, lanes) {\n  var eventTimes = root.eventTimes;\n  var mostRecentEventTime = NoTimestamp;\n\n  while (lanes > 0) {\n    var index = pickArbitraryLaneIndex(lanes);\n    var lane = 1 << index;\n    var eventTime = eventTimes[index];\n\n    if (eventTime > mostRecentEventTime) {\n      mostRecentEventTime = eventTime;\n    }\n\n    lanes &= ~lane;\n  }\n\n  return mostRecentEventTime;\n}\n\nfunction computeExpirationTime(lane, currentTime) {\n  switch (lane) {\n    case SyncLane:\n    case InputContinuousHydrationLane:\n    case InputContinuousLane:\n      // User interactions should expire slightly more quickly.\n      //\n      // NOTE: This is set to the corresponding constant as in Scheduler.js.\n      // When we made it larger, a product metric in www regressed, suggesting\n      // there's a user interaction that's being starved by a series of\n      // synchronous updates. If that theory is correct, the proper solution is\n      // to fix the starvation. However, this scenario supports the idea that\n      // expiration times are an important safeguard when starvation\n      // does happen.\n      return currentTime + 250;\n\n    case DefaultHydrationLane:\n    case DefaultLane:\n    case TransitionHydrationLane:\n    case TransitionLane1:\n    case TransitionLane2:\n    case TransitionLane3:\n    case TransitionLane4:\n    case TransitionLane5:\n    case TransitionLane6:\n    case TransitionLane7:\n    case TransitionLane8:\n    case TransitionLane9:\n    case TransitionLane10:\n    case TransitionLane11:\n    case TransitionLane12:\n    case TransitionLane13:\n    case TransitionLane14:\n    case TransitionLane15:\n    case TransitionLane16:\n      return currentTime + 5000;\n\n    case RetryLane1:\n    case RetryLane2:\n    case RetryLane3:\n    case RetryLane4:\n    case RetryLane5:\n      // TODO: Retries should be allowed to expire if they are CPU bound for\n      // too long, but when I made this change it caused a spike in browser\n      // crashes. There must be some other underlying bug; not super urgent but\n      // ideally should figure out why and fix it. Unfortunately we don't have\n      // a repro for the crashes, only detected via production metrics.\n      return NoTimestamp;\n\n    case SelectiveHydrationLane:\n    case IdleHydrationLane:\n    case IdleLane:\n    case OffscreenLane:\n      // Anything idle priority or lower should never expire.\n      return NoTimestamp;\n\n    default:\n      {\n        error('Should have found matching lanes. This is a bug in React.');\n      }\n\n      return NoTimestamp;\n  }\n}\n\nfunction markStarvedLanesAsExpired(root, currentTime) {\n  // TODO: This gets called every time we yield. We can optimize by storing\n  // the earliest expiration time on the root. Then use that to quickly bail out\n  // of this function.\n  var pendingLanes = root.pendingLanes;\n  var suspendedLanes = root.suspendedLanes;\n  var pingedLanes = root.pingedLanes;\n  var expirationTimes = root.expirationTimes; // Iterate through the pending lanes and check if we've reached their\n  // expiration time. If so, we'll assume the update is being starved and mark\n  // it as expired to force it to finish.\n\n  var lanes = pendingLanes;\n\n  while (lanes > 0) {\n    var index = pickArbitraryLaneIndex(lanes);\n    var lane = 1 << index;\n    var expirationTime = expirationTimes[index];\n\n    if (expirationTime === NoTimestamp) {\n      // Found a pending lane with no expiration time. If it's not suspended, or\n      // if it's pinged, assume it's CPU-bound. Compute a new expiration time\n      // using the current time.\n      if ((lane & suspendedLanes) === NoLanes || (lane & pingedLanes) !== NoLanes) {\n        // Assumes timestamps are monotonically increasing.\n        expirationTimes[index] = computeExpirationTime(lane, currentTime);\n      }\n    } else if (expirationTime <= currentTime) {\n      // This lane expired\n      root.expiredLanes |= lane;\n    }\n\n    lanes &= ~lane;\n  }\n} // This returns the highest priority pending lanes regardless of whether they\n// are suspended.\n\nfunction getHighestPriorityPendingLanes(root) {\n  return getHighestPriorityLanes(root.pendingLanes);\n}\nfunction getLanesToRetrySynchronouslyOnError(root) {\n  var everythingButOffscreen = root.pendingLanes & ~OffscreenLane;\n\n  if (everythingButOffscreen !== NoLanes) {\n    return everythingButOffscreen;\n  }\n\n  if (everythingButOffscreen & OffscreenLane) {\n    return OffscreenLane;\n  }\n\n  return NoLanes;\n}\nfunction includesSyncLane(lanes) {\n  return (lanes & SyncLane) !== NoLanes;\n}\nfunction includesNonIdleWork(lanes) {\n  return (lanes & NonIdleLanes) !== NoLanes;\n}\nfunction includesOnlyRetries(lanes) {\n  return (lanes & RetryLanes) === lanes;\n}\nfunction includesOnlyNonUrgentLanes(lanes) {\n  var UrgentLanes = SyncLane | InputContinuousLane | DefaultLane;\n  return (lanes & UrgentLanes) === NoLanes;\n}\nfunction includesOnlyTransitions(lanes) {\n  return (lanes & TransitionLanes) === lanes;\n}\nfunction includesBlockingLane(root, lanes) {\n\n  var SyncDefaultLanes = InputContinuousHydrationLane | InputContinuousLane | DefaultHydrationLane | DefaultLane;\n  return (lanes & SyncDefaultLanes) !== NoLanes;\n}\nfunction includesExpiredLane(root, lanes) {\n  // This is a separate check from includesBlockingLane because a lane can\n  // expire after a render has already started.\n  return (lanes & root.expiredLanes) !== NoLanes;\n}\nfunction isTransitionLane(lane) {\n  return (lane & TransitionLanes) !== NoLanes;\n}\nfunction claimNextTransitionLane() {\n  // Cycle through the lanes, assigning each new transition to the next lane.\n  // In most cases, this means every transition gets its own lane, until we\n  // run out of lanes and cycle back to the beginning.\n  var lane = nextTransitionLane;\n  nextTransitionLane <<= 1;\n\n  if ((nextTransitionLane & TransitionLanes) === NoLanes) {\n    nextTransitionLane = TransitionLane1;\n  }\n\n  return lane;\n}\nfunction claimNextRetryLane() {\n  var lane = nextRetryLane;\n  nextRetryLane <<= 1;\n\n  if ((nextRetryLane & RetryLanes) === NoLanes) {\n    nextRetryLane = RetryLane1;\n  }\n\n  return lane;\n}\nfunction getHighestPriorityLane(lanes) {\n  return lanes & -lanes;\n}\nfunction pickArbitraryLane(lanes) {\n  // This wrapper function gets inlined. Only exists so to communicate that it\n  // doesn't matter which bit is selected; you can pick any bit without\n  // affecting the algorithms where its used. Here I'm using\n  // getHighestPriorityLane because it requires the fewest operations.\n  return getHighestPriorityLane(lanes);\n}\n\nfunction pickArbitraryLaneIndex(lanes) {\n  return 31 - clz32(lanes);\n}\n\nfunction laneToIndex(lane) {\n  return pickArbitraryLaneIndex(lane);\n}\n\nfunction includesSomeLane(a, b) {\n  return (a & b) !== NoLanes;\n}\nfunction isSubsetOfLanes(set, subset) {\n  return (set & subset) === subset;\n}\nfunction mergeLanes(a, b) {\n  return a | b;\n}\nfunction removeLanes(set, subset) {\n  return set & ~subset;\n}\nfunction intersectLanes(a, b) {\n  return a & b;\n} // Seems redundant, but it changes the type from a single lane (used for\n// updates) to a group of lanes (used for flushing work).\n\nfunction laneToLanes(lane) {\n  return lane;\n}\nfunction higherPriorityLane(a, b) {\n  // This works because the bit ranges decrease in priority as you go left.\n  return a !== NoLane && a < b ? a : b;\n}\nfunction createLaneMap(initial) {\n  // Intentionally pushing one by one.\n  // https://v8.dev/blog/elements-kinds#avoid-creating-holes\n  var laneMap = [];\n\n  for (var i = 0; i < TotalLanes; i++) {\n    laneMap.push(initial);\n  }\n\n  return laneMap;\n}\nfunction markRootUpdated(root, updateLane, eventTime) {\n  root.pendingLanes |= updateLane; // If there are any suspended transitions, it's possible this new update\n  // could unblock them. Clear the suspended lanes so that we can try rendering\n  // them again.\n  //\n  // TODO: We really only need to unsuspend only lanes that are in the\n  // `subtreeLanes` of the updated fiber, or the update lanes of the return\n  // path. This would exclude suspended updates in an unrelated sibling tree,\n  // since there's no way for this update to unblock it.\n  //\n  // We don't do this if the incoming update is idle, because we never process\n  // idle updates until after all the regular updates have finished; there's no\n  // way it could unblock a transition.\n\n  if (updateLane !== IdleLane) {\n    root.suspendedLanes = NoLanes;\n    root.pingedLanes = NoLanes;\n  }\n\n  var eventTimes = root.eventTimes;\n  var index = laneToIndex(updateLane); // We can always overwrite an existing timestamp because we prefer the most\n  // recent event, and we assume time is monotonically increasing.\n\n  eventTimes[index] = eventTime;\n}\nfunction markRootSuspended(root, suspendedLanes) {\n  root.suspendedLanes |= suspendedLanes;\n  root.pingedLanes &= ~suspendedLanes; // The suspended lanes are no longer CPU-bound. Clear their expiration times.\n\n  var expirationTimes = root.expirationTimes;\n  var lanes = suspendedLanes;\n\n  while (lanes > 0) {\n    var index = pickArbitraryLaneIndex(lanes);\n    var lane = 1 << index;\n    expirationTimes[index] = NoTimestamp;\n    lanes &= ~lane;\n  }\n}\nfunction markRootPinged(root, pingedLanes, eventTime) {\n  root.pingedLanes |= root.suspendedLanes & pingedLanes;\n}\nfunction markRootFinished(root, remainingLanes) {\n  var noLongerPendingLanes = root.pendingLanes & ~remainingLanes;\n  root.pendingLanes = remainingLanes; // Let's try everything again\n\n  root.suspendedLanes = NoLanes;\n  root.pingedLanes = NoLanes;\n  root.expiredLanes &= remainingLanes;\n  root.mutableReadLanes &= remainingLanes;\n  root.entangledLanes &= remainingLanes;\n  var entanglements = root.entanglements;\n  var eventTimes = root.eventTimes;\n  var expirationTimes = root.expirationTimes; // Clear the lanes that no longer have pending work\n\n  var lanes = noLongerPendingLanes;\n\n  while (lanes > 0) {\n    var index = pickArbitraryLaneIndex(lanes);\n    var lane = 1 << index;\n    entanglements[index] = NoLanes;\n    eventTimes[index] = NoTimestamp;\n    expirationTimes[index] = NoTimestamp;\n    lanes &= ~lane;\n  }\n}\nfunction markRootEntangled(root, entangledLanes) {\n  // In addition to entangling each of the given lanes with each other, we also\n  // have to consider _transitive_ entanglements. For each lane that is already\n  // entangled with *any* of the given lanes, that lane is now transitively\n  // entangled with *all* the given lanes.\n  //\n  // Translated: If C is entangled with A, then entangling A with B also\n  // entangles C with B.\n  //\n  // If this is hard to grasp, it might help to intentionally break this\n  // function and look at the tests that fail in ReactTransition-test.js. Try\n  // commenting out one of the conditions below.\n  var rootEntangledLanes = root.entangledLanes |= entangledLanes;\n  var entanglements = root.entanglements;\n  var lanes = rootEntangledLanes;\n\n  while (lanes) {\n    var index = pickArbitraryLaneIndex(lanes);\n    var lane = 1 << index;\n\n    if ( // Is this one of the newly entangled lanes?\n    lane & entangledLanes | // Is this lane transitively entangled with the newly entangled lanes?\n    entanglements[index] & entangledLanes) {\n      entanglements[index] |= entangledLanes;\n    }\n\n    lanes &= ~lane;\n  }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n  var renderLane = getHighestPriorityLane(renderLanes);\n  var lane;\n\n  switch (renderLane) {\n    case InputContinuousLane:\n      lane = InputContinuousHydrationLane;\n      break;\n\n    case DefaultLane:\n      lane = DefaultHydrationLane;\n      break;\n\n    case TransitionLane1:\n    case TransitionLane2:\n    case TransitionLane3:\n    case TransitionLane4:\n    case TransitionLane5:\n    case TransitionLane6:\n    case TransitionLane7:\n    case TransitionLane8:\n    case TransitionLane9:\n    case TransitionLane10:\n    case TransitionLane11:\n    case TransitionLane12:\n    case TransitionLane13:\n    case TransitionLane14:\n    case TransitionLane15:\n    case TransitionLane16:\n    case RetryLane1:\n    case RetryLane2:\n    case RetryLane3:\n    case RetryLane4:\n    case RetryLane5:\n      lane = TransitionHydrationLane;\n      break;\n\n    case IdleLane:\n      lane = IdleHydrationLane;\n      break;\n\n    default:\n      // Everything else is already either a hydration lane, or shouldn't\n      // be retried at a hydration lane.\n      lane = NoLane;\n      break;\n  } // Check if the lane we chose is suspended. If so, that indicates that we\n  // already attempted and failed to hydrate at that level. Also check if we're\n  // already rendering that lane, which is rare but could happen.\n\n\n  if ((lane & (root.suspendedLanes | renderLanes)) !== NoLane) {\n    // Give up trying to hydrate and fall back to client render.\n    return NoLane;\n  }\n\n  return lane;\n}\nfunction addFiberToLanesMap(root, fiber, lanes) {\n\n  if (!isDevToolsPresent) {\n    return;\n  }\n\n  var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap;\n\n  while (lanes > 0) {\n    var index = laneToIndex(lanes);\n    var lane = 1 << index;\n    var updaters = pendingUpdatersLaneMap[index];\n    updaters.add(fiber);\n    lanes &= ~lane;\n  }\n}\nfunction movePendingFibersToMemoized(root, lanes) {\n\n  if (!isDevToolsPresent) {\n    return;\n  }\n\n  var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap;\n  var memoizedUpdaters = root.memoizedUpdaters;\n\n  while (lanes > 0) {\n    var index = laneToIndex(lanes);\n    var lane = 1 << index;\n    var updaters = pendingUpdatersLaneMap[index];\n\n    if (updaters.size > 0) {\n      updaters.forEach(function (fiber) {\n        var alternate = fiber.alternate;\n\n        if (alternate === null || !memoizedUpdaters.has(alternate)) {\n          memoizedUpdaters.add(fiber);\n        }\n      });\n      updaters.clear();\n    }\n\n    lanes &= ~lane;\n  }\n}\nfunction getTransitionsForLanes(root, lanes) {\n  {\n    return null;\n  }\n}\n\nvar DiscreteEventPriority = SyncLane;\nvar ContinuousEventPriority = InputContinuousLane;\nvar DefaultEventPriority = DefaultLane;\nvar IdleEventPriority = IdleLane;\nvar currentUpdatePriority = NoLane;\nfunction getCurrentUpdatePriority() {\n  return currentUpdatePriority;\n}\nfunction setCurrentUpdatePriority(newPriority) {\n  currentUpdatePriority = newPriority;\n}\nfunction runWithPriority(priority, fn) {\n  var previousPriority = currentUpdatePriority;\n\n  try {\n    currentUpdatePriority = priority;\n    return fn();\n  } finally {\n    currentUpdatePriority = previousPriority;\n  }\n}\nfunction higherEventPriority(a, b) {\n  return a !== 0 && a < b ? a : b;\n}\nfunction lowerEventPriority(a, b) {\n  return a === 0 || a > b ? a : b;\n}\nfunction isHigherEventPriority(a, b) {\n  return a !== 0 && a < b;\n}\nfunction lanesToEventPriority(lanes) {\n  var lane = getHighestPriorityLane(lanes);\n\n  if (!isHigherEventPriority(DiscreteEventPriority, lane)) {\n    return DiscreteEventPriority;\n  }\n\n  if (!isHigherEventPriority(ContinuousEventPriority, lane)) {\n    return ContinuousEventPriority;\n  }\n\n  if (includesNonIdleWork(lane)) {\n    return DefaultEventPriority;\n  }\n\n  return IdleEventPriority;\n}\n\n// This is imported by the event replaying implementation in React DOM. It's\n// in a separate file to break a circular dependency between the renderer and\n// the reconciler.\nfunction isRootDehydrated(root) {\n  var currentState = root.current.memoizedState;\n  return currentState.isDehydrated;\n}\n\nvar _attemptSynchronousHydration;\n\nfunction setAttemptSynchronousHydration(fn) {\n  _attemptSynchronousHydration = fn;\n}\nfunction attemptSynchronousHydration(fiber) {\n  _attemptSynchronousHydration(fiber);\n}\nvar attemptContinuousHydration;\nfunction setAttemptContinuousHydration(fn) {\n  attemptContinuousHydration = fn;\n}\nvar attemptHydrationAtCurrentPriority;\nfunction setAttemptHydrationAtCurrentPriority(fn) {\n  attemptHydrationAtCurrentPriority = fn;\n}\nvar getCurrentUpdatePriority$1;\nfunction setGetCurrentUpdatePriority(fn) {\n  getCurrentUpdatePriority$1 = fn;\n}\nvar attemptHydrationAtPriority;\nfunction setAttemptHydrationAtPriority(fn) {\n  attemptHydrationAtPriority = fn;\n} // TODO: Upgrade this definition once we're on a newer version of Flow that\n// has this definition built-in.\n\nvar hasScheduledReplayAttempt = false; // The queue of discrete events to be replayed.\n\nvar queuedDiscreteEvents = []; // Indicates if any continuous event targets are non-null for early bailout.\n// if the last target was dehydrated.\n\nvar queuedFocus = null;\nvar queuedDrag = null;\nvar queuedMouse = null; // For pointer events there can be one latest event per pointerId.\n\nvar queuedPointers = new Map();\nvar queuedPointerCaptures = new Map(); // We could consider replaying selectionchange and touchmoves too.\n\nvar queuedExplicitHydrationTargets = [];\nvar discreteReplayableEvents = ['mousedown', 'mouseup', 'touchcancel', 'touchend', 'touchstart', 'auxclick', 'dblclick', 'pointercancel', 'pointerdown', 'pointerup', 'dragend', 'dragstart', 'drop', 'compositionend', 'compositionstart', 'keydown', 'keypress', 'keyup', 'input', 'textInput', // Intentionally camelCase\n'copy', 'cut', 'paste', 'click', 'change', 'contextmenu', 'reset', 'submit'];\nfunction isDiscreteEventThatRequiresHydration(eventType) {\n  return discreteReplayableEvents.indexOf(eventType) > -1;\n}\n\nfunction createQueuedReplayableEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {\n  return {\n    blockedOn: blockedOn,\n    domEventName: domEventName,\n    eventSystemFlags: eventSystemFlags,\n    nativeEvent: nativeEvent,\n    targetContainers: [targetContainer]\n  };\n}\n\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case 'focusin':\n    case 'focusout':\n      queuedFocus = null;\n      break;\n\n    case 'dragenter':\n    case 'dragleave':\n      queuedDrag = null;\n      break;\n\n    case 'mouseover':\n    case 'mouseout':\n      queuedMouse = null;\n      break;\n\n    case 'pointerover':\n    case 'pointerout':\n      {\n        var pointerId = nativeEvent.pointerId;\n        queuedPointers.delete(pointerId);\n        break;\n      }\n\n    case 'gotpointercapture':\n    case 'lostpointercapture':\n      {\n        var _pointerId = nativeEvent.pointerId;\n        queuedPointerCaptures.delete(_pointerId);\n        break;\n      }\n  }\n}\n\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(existingQueuedEvent, blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {\n  if (existingQueuedEvent === null || existingQueuedEvent.nativeEvent !== nativeEvent) {\n    var queuedEvent = createQueuedReplayableEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent);\n\n    if (blockedOn !== null) {\n      var _fiber2 = getInstanceFromNode(blockedOn);\n\n      if (_fiber2 !== null) {\n        // Attempt to increase the priority of this target.\n        attemptContinuousHydration(_fiber2);\n      }\n    }\n\n    return queuedEvent;\n  } // If we have already queued this exact event, then it's because\n  // the different event systems have different DOM event listeners.\n  // We can accumulate the flags, and the targetContainers, and\n  // store a single event to be replayed.\n\n\n  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n  var targetContainers = existingQueuedEvent.targetContainers;\n\n  if (targetContainer !== null && targetContainers.indexOf(targetContainer) === -1) {\n    targetContainers.push(targetContainer);\n  }\n\n  return existingQueuedEvent;\n}\n\nfunction queueIfContinuousEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {\n  // These set relatedTarget to null because the replayed event will be treated as if we\n  // moved from outside the window (no target) onto the target once it hydrates.\n  // Instead of mutating we could clone the event.\n  switch (domEventName) {\n    case 'focusin':\n      {\n        var focusEvent = nativeEvent;\n        queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(queuedFocus, blockedOn, domEventName, eventSystemFlags, targetContainer, focusEvent);\n        return true;\n      }\n\n    case 'dragenter':\n      {\n        var dragEvent = nativeEvent;\n        queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(queuedDrag, blockedOn, domEventName, eventSystemFlags, targetContainer, dragEvent);\n        return true;\n      }\n\n    case 'mouseover':\n      {\n        var mouseEvent = nativeEvent;\n        queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(queuedMouse, blockedOn, domEventName, eventSystemFlags, targetContainer, mouseEvent);\n        return true;\n      }\n\n    case 'pointerover':\n      {\n        var pointerEvent = nativeEvent;\n        var pointerId = pointerEvent.pointerId;\n        queuedPointers.set(pointerId, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointers.get(pointerId) || null, blockedOn, domEventName, eventSystemFlags, targetContainer, pointerEvent));\n        return true;\n      }\n\n    case 'gotpointercapture':\n      {\n        var _pointerEvent = nativeEvent;\n        var _pointerId2 = _pointerEvent.pointerId;\n        queuedPointerCaptures.set(_pointerId2, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointerCaptures.get(_pointerId2) || null, blockedOn, domEventName, eventSystemFlags, targetContainer, _pointerEvent));\n        return true;\n      }\n  }\n\n  return false;\n} // Check if this target is unblocked. Returns true if it's unblocked.\n\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n  // TODO: This function shares a lot of logic with findInstanceBlockingEvent.\n  // Try to unify them. It's a bit tricky since it would require two return\n  // values.\n  var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n\n  if (targetInst !== null) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n\n    if (nearestMounted !== null) {\n      var tag = nearestMounted.tag;\n\n      if (tag === SuspenseComponent) {\n        var instance = getSuspenseInstanceFromFiber(nearestMounted);\n\n        if (instance !== null) {\n          // We're blocked on hydrating this boundary.\n          // Increase its priority.\n          queuedTarget.blockedOn = instance;\n          attemptHydrationAtPriority(queuedTarget.priority, function () {\n            attemptHydrationAtCurrentPriority(nearestMounted);\n          });\n          return;\n        }\n      } else if (tag === HostRoot) {\n        var root = nearestMounted.stateNode;\n\n        if (isRootDehydrated(root)) {\n          queuedTarget.blockedOn = getContainerFromFiber(nearestMounted); // We don't currently have a way to increase the priority of\n          // a root other than sync.\n\n          return;\n        }\n      }\n    }\n  }\n\n  queuedTarget.blockedOn = null;\n}\n\nfunction queueExplicitHydrationTarget(target) {\n  // TODO: This will read the priority if it's dispatched by the React\n  // event system but not native events. Should read window.event.type, like\n  // we do for updates (getCurrentEventPriority).\n  var updatePriority = getCurrentUpdatePriority$1();\n  var queuedTarget = {\n    blockedOn: null,\n    target: target,\n    priority: updatePriority\n  };\n  var i = 0;\n\n  for (; i < queuedExplicitHydrationTargets.length; i++) {\n    // Stop once we hit the first target with lower priority than\n    if (!isHigherEventPriority(updatePriority, queuedExplicitHydrationTargets[i].priority)) {\n      break;\n    }\n  }\n\n  queuedExplicitHydrationTargets.splice(i, 0, queuedTarget);\n\n  if (i === 0) {\n    attemptExplicitHydrationTarget(queuedTarget);\n  }\n}\n\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n  if (queuedEvent.blockedOn !== null) {\n    return false;\n  }\n\n  var targetContainers = queuedEvent.targetContainers;\n\n  while (targetContainers.length > 0) {\n    var targetContainer = targetContainers[0];\n    var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.domEventName, queuedEvent.eventSystemFlags, targetContainer, queuedEvent.nativeEvent);\n\n    if (nextBlockedOn === null) {\n      {\n        var nativeEvent = queuedEvent.nativeEvent;\n        var nativeEventClone = new nativeEvent.constructor(nativeEvent.type, nativeEvent);\n        setReplayingEvent(nativeEventClone);\n        nativeEvent.target.dispatchEvent(nativeEventClone);\n        resetReplayingEvent();\n      }\n    } else {\n      // We're still blocked. Try again later.\n      var _fiber3 = getInstanceFromNode(nextBlockedOn);\n\n      if (_fiber3 !== null) {\n        attemptContinuousHydration(_fiber3);\n      }\n\n      queuedEvent.blockedOn = nextBlockedOn;\n      return false;\n    } // This target container was successfully dispatched. Try the next.\n\n\n    targetContainers.shift();\n  }\n\n  return true;\n}\n\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n  if (attemptReplayContinuousQueuedEvent(queuedEvent)) {\n    map.delete(key);\n  }\n}\n\nfunction replayUnblockedEvents() {\n  hasScheduledReplayAttempt = false;\n\n\n  if (queuedFocus !== null && attemptReplayContinuousQueuedEvent(queuedFocus)) {\n    queuedFocus = null;\n  }\n\n  if (queuedDrag !== null && attemptReplayContinuousQueuedEvent(queuedDrag)) {\n    queuedDrag = null;\n  }\n\n  if (queuedMouse !== null && attemptReplayContinuousQueuedEvent(queuedMouse)) {\n    queuedMouse = null;\n  }\n\n  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\n\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n  if (queuedEvent.blockedOn === unblocked) {\n    queuedEvent.blockedOn = null;\n\n    if (!hasScheduledReplayAttempt) {\n      hasScheduledReplayAttempt = true; // Schedule a callback to attempt replaying as many events as are\n      // now unblocked. This first might not actually be unblocked yet.\n      // We could check it early to avoid scheduling an unnecessary callback.\n\n      Scheduler.unstable_scheduleCallback(Scheduler.unstable_NormalPriority, replayUnblockedEvents);\n    }\n  }\n}\n\nfunction retryIfBlockedOn(unblocked) {\n  // Mark anything that was blocked on this as no longer blocked\n  // and eligible for a replay.\n  if (queuedDiscreteEvents.length > 0) {\n    scheduleCallbackIfUnblocked(queuedDiscreteEvents[0], unblocked); // This is a exponential search for each boundary that commits. I think it's\n    // worth it because we expect very few discrete events to queue up and once\n    // we are actually fully unblocked it will be fast to replay them.\n\n    for (var i = 1; i < queuedDiscreteEvents.length; i++) {\n      var queuedEvent = queuedDiscreteEvents[i];\n\n      if (queuedEvent.blockedOn === unblocked) {\n        queuedEvent.blockedOn = null;\n      }\n    }\n  }\n\n  if (queuedFocus !== null) {\n    scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n  }\n\n  if (queuedDrag !== null) {\n    scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n  }\n\n  if (queuedMouse !== null) {\n    scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n  }\n\n  var unblock = function (queuedEvent) {\n    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n  };\n\n  queuedPointers.forEach(unblock);\n  queuedPointerCaptures.forEach(unblock);\n\n  for (var _i = 0; _i < queuedExplicitHydrationTargets.length; _i++) {\n    var queuedTarget = queuedExplicitHydrationTargets[_i];\n\n    if (queuedTarget.blockedOn === unblocked) {\n      queuedTarget.blockedOn = null;\n    }\n  }\n\n  while (queuedExplicitHydrationTargets.length > 0) {\n    var nextExplicitTarget = queuedExplicitHydrationTargets[0];\n\n    if (nextExplicitTarget.blockedOn !== null) {\n      // We're still blocked.\n      break;\n    } else {\n      attemptExplicitHydrationTarget(nextExplicitTarget);\n\n      if (nextExplicitTarget.blockedOn === null) {\n        // We're unblocked.\n        queuedExplicitHydrationTargets.shift();\n      }\n    }\n  }\n}\n\nvar ReactCurrentBatchConfig = ReactSharedInternals.ReactCurrentBatchConfig; // TODO: can we stop exporting these?\n\nvar _enabled = true; // This is exported in FB builds for use by legacy FB layer infra.\n// We'd like to remove this but it's not clear if this is safe.\n\nfunction setEnabled(enabled) {\n  _enabled = !!enabled;\n}\nfunction isEnabled() {\n  return _enabled;\n}\nfunction createEventListenerWrapperWithPriority(targetContainer, domEventName, eventSystemFlags) {\n  var eventPriority = getEventPriority(domEventName);\n  var listenerWrapper;\n\n  switch (eventPriority) {\n    case DiscreteEventPriority:\n      listenerWrapper = dispatchDiscreteEvent;\n      break;\n\n    case ContinuousEventPriority:\n      listenerWrapper = dispatchContinuousEvent;\n      break;\n\n    case DefaultEventPriority:\n    default:\n      listenerWrapper = dispatchEvent;\n      break;\n  }\n\n  return listenerWrapper.bind(null, domEventName, eventSystemFlags, targetContainer);\n}\n\nfunction dispatchDiscreteEvent(domEventName, eventSystemFlags, container, nativeEvent) {\n  var previousPriority = getCurrentUpdatePriority();\n  var prevTransition = ReactCurrentBatchConfig.transition;\n  ReactCurrentBatchConfig.transition = null;\n\n  try {\n    setCurrentUpdatePriority(DiscreteEventPriority);\n    dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    setCurrentUpdatePriority(previousPriority);\n    ReactCurrentBatchConfig.transition = prevTransition;\n  }\n}\n\nfunction dispatchContinuousEvent(domEventName, eventSystemFlags, container, nativeEvent) {\n  var previousPriority = getCurrentUpdatePriority();\n  var prevTransition = ReactCurrentBatchConfig.transition;\n  ReactCurrentBatchConfig.transition = null;\n\n  try {\n    setCurrentUpdatePriority(ContinuousEventPriority);\n    dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    setCurrentUpdatePriority(previousPriority);\n    ReactCurrentBatchConfig.transition = prevTransition;\n  }\n}\n\nfunction dispatchEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent) {\n  if (!_enabled) {\n    return;\n  }\n\n  {\n    dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay(domEventName, eventSystemFlags, targetContainer, nativeEvent);\n  }\n}\n\nfunction dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay(domEventName, eventSystemFlags, targetContainer, nativeEvent) {\n  var blockedOn = findInstanceBlockingEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent);\n\n  if (blockedOn === null) {\n    dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, return_targetInst, targetContainer);\n    clearIfContinuousEvent(domEventName, nativeEvent);\n    return;\n  }\n\n  if (queueIfContinuousEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent)) {\n    nativeEvent.stopPropagation();\n    return;\n  } // We need to clear only if we didn't queue because\n  // queueing is accumulative.\n\n\n  clearIfContinuousEvent(domEventName, nativeEvent);\n\n  if (eventSystemFlags & IS_CAPTURE_PHASE && isDiscreteEventThatRequiresHydration(domEventName)) {\n    while (blockedOn !== null) {\n      var fiber = getInstanceFromNode(blockedOn);\n\n      if (fiber !== null) {\n        attemptSynchronousHydration(fiber);\n      }\n\n      var nextBlockedOn = findInstanceBlockingEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent);\n\n      if (nextBlockedOn === null) {\n        dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, return_targetInst, targetContainer);\n      }\n\n      if (nextBlockedOn === blockedOn) {\n        break;\n      }\n\n      blockedOn = nextBlockedOn;\n    }\n\n    if (blockedOn !== null) {\n      nativeEvent.stopPropagation();\n    }\n\n    return;\n  } // This is not replayable so we'll invoke it but without a target,\n  // in case the event system needs to trace it.\n\n\n  dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, null, targetContainer);\n}\n\nvar return_targetInst = null; // Returns a SuspenseInstance or Container if it's blocked.\n// The return_targetInst field above is conceptually part of the return value.\n\nfunction findInstanceBlockingEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent) {\n  // TODO: Warn if _enabled is false.\n  return_targetInst = null;\n  var nativeEventTarget = getEventTarget(nativeEvent);\n  var targetInst = getClosestInstanceFromNode(nativeEventTarget);\n\n  if (targetInst !== null) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n\n    if (nearestMounted === null) {\n      // This tree has been unmounted already. Dispatch without a target.\n      targetInst = null;\n    } else {\n      var tag = nearestMounted.tag;\n\n      if (tag === SuspenseComponent) {\n        var instance = getSuspenseInstanceFromFiber(nearestMounted);\n\n        if (instance !== null) {\n          // Queue the event to be replayed later. Abort dispatching since we\n          // don't want this event dispatched twice through the event system.\n          // TODO: If this is the first discrete event in the queue. Schedule an increased\n          // priority for this boundary.\n          return instance;\n        } // This shouldn't happen, something went wrong but to avoid blocking\n        // the whole system, dispatch the event without a target.\n        // TODO: Warn.\n\n\n        targetInst = null;\n      } else if (tag === HostRoot) {\n        var root = nearestMounted.stateNode;\n\n        if (isRootDehydrated(root)) {\n          // If this happens during a replay something went wrong and it might block\n          // the whole system.\n          return getContainerFromFiber(nearestMounted);\n        }\n\n        targetInst = null;\n      } else if (nearestMounted !== targetInst) {\n        // If we get an event (ex: img onload) before committing that\n        // component's mount, ignore it for now (that is, treat it as if it was an\n        // event on a non-React tree). We might also consider queueing events and\n        // dispatching them after the mount.\n        targetInst = null;\n      }\n    }\n  }\n\n  return_targetInst = targetInst; // We're not blocked on anything.\n\n  return null;\n}\nfunction getEventPriority(domEventName) {\n  switch (domEventName) {\n    // Used by SimpleEventPlugin:\n    case 'cancel':\n    case 'click':\n    case 'close':\n    case 'contextmenu':\n    case 'copy':\n    case 'cut':\n    case 'auxclick':\n    case 'dblclick':\n    case 'dragend':\n    case 'dragstart':\n    case 'drop':\n    case 'focusin':\n    case 'focusout':\n    case 'input':\n    case 'invalid':\n    case 'keydown':\n    case 'keypress':\n    case 'keyup':\n    case 'mousedown':\n    case 'mouseup':\n    case 'paste':\n    case 'pause':\n    case 'play':\n    case 'pointercancel':\n    case 'pointerdown':\n    case 'pointerup':\n    case 'ratechange':\n    case 'reset':\n    case 'resize':\n    case 'seeked':\n    case 'submit':\n    case 'touchcancel':\n    case 'touchend':\n    case 'touchstart':\n    case 'volumechange': // Used by polyfills:\n    // eslint-disable-next-line no-fallthrough\n\n    case 'change':\n    case 'selectionchange':\n    case 'textInput':\n    case 'compositionstart':\n    case 'compositionend':\n    case 'compositionupdate': // Only enableCreateEventHandleAPI:\n    // eslint-disable-next-line no-fallthrough\n\n    case 'beforeblur':\n    case 'afterblur': // Not used by React but could be by user code:\n    // eslint-disable-next-line no-fallthrough\n\n    case 'beforeinput':\n    case 'blur':\n    case 'fullscreenchange':\n    case 'focus':\n    case 'hashchange':\n    case 'popstate':\n    case 'select':\n    case 'selectstart':\n      return DiscreteEventPriority;\n\n    case 'drag':\n    case 'dragenter':\n    case 'dragexit':\n    case 'dragleave':\n    case 'dragover':\n    case 'mousemove':\n    case 'mouseout':\n    case 'mouseover':\n    case 'pointermove':\n    case 'pointerout':\n    case 'pointerover':\n    case 'scroll':\n    case 'toggle':\n    case 'touchmove':\n    case 'wheel': // Not used by React but could be by user code:\n    // eslint-disable-next-line no-fallthrough\n\n    case 'mouseenter':\n    case 'mouseleave':\n    case 'pointerenter':\n    case 'pointerleave':\n      return ContinuousEventPriority;\n\n    case 'message':\n      {\n        // We might be in the Scheduler callback.\n        // Eventually this mechanism will be replaced by a check\n        // of the current priority on the native scheduler.\n        var schedulerPriority = getCurrentPriorityLevel();\n\n        switch (schedulerPriority) {\n          case ImmediatePriority:\n            return DiscreteEventPriority;\n\n          case UserBlockingPriority:\n            return ContinuousEventPriority;\n\n          case NormalPriority:\n          case LowPriority:\n            // TODO: Handle LowSchedulerPriority, somehow. Maybe the same lane as hydration.\n            return DefaultEventPriority;\n\n          case IdlePriority:\n            return IdleEventPriority;\n\n          default:\n            return DefaultEventPriority;\n        }\n      }\n\n    default:\n      return DefaultEventPriority;\n  }\n}\n\nfunction addEventBubbleListener(target, eventType, listener) {\n  target.addEventListener(eventType, listener, false);\n  return listener;\n}\nfunction addEventCaptureListener(target, eventType, listener) {\n  target.addEventListener(eventType, listener, true);\n  return listener;\n}\nfunction addEventCaptureListenerWithPassiveFlag(target, eventType, listener, passive) {\n  target.addEventListener(eventType, listener, {\n    capture: true,\n    passive: passive\n  });\n  return listener;\n}\nfunction addEventBubbleListenerWithPassiveFlag(target, eventType, listener, passive) {\n  target.addEventListener(eventType, listener, {\n    passive: passive\n  });\n  return listener;\n}\n\n/**\n * These variables store information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n *\n */\nvar root = null;\nvar startText = null;\nvar fallbackText = null;\nfunction initialize(nativeEventTarget) {\n  root = nativeEventTarget;\n  startText = getText();\n  return true;\n}\nfunction reset() {\n  root = null;\n  startText = null;\n  fallbackText = null;\n}\nfunction getData() {\n  if (fallbackText) {\n    return fallbackText;\n  }\n\n  var start;\n  var startValue = startText;\n  var startLength = startValue.length;\n  var end;\n  var endValue = getText();\n  var endLength = endValue.length;\n\n  for (start = 0; start < startLength; start++) {\n    if (startValue[start] !== endValue[start]) {\n      break;\n    }\n  }\n\n  var minEnd = startLength - start;\n\n  for (end = 1; end <= minEnd; end++) {\n    if (startValue[startLength - end] !== endValue[endLength - end]) {\n      break;\n    }\n  }\n\n  var sliceTail = end > 1 ? 1 - end : undefined;\n  fallbackText = endValue.slice(start, sliceTail);\n  return fallbackText;\n}\nfunction getText() {\n  if ('value' in root) {\n    return root.value;\n  }\n\n  return root.textContent;\n}\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\nfunction getEventCharCode(nativeEvent) {\n  var charCode;\n  var keyCode = nativeEvent.keyCode;\n\n  if ('charCode' in nativeEvent) {\n    charCode = nativeEvent.charCode; // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n\n    if (charCode === 0 && keyCode === 13) {\n      charCode = 13;\n    }\n  } else {\n    // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n    charCode = keyCode;\n  } // IE and Edge (on Windows) and Chrome / Safari (on Windows and Linux)\n  // report Enter as charCode 10 when ctrl is pressed.\n\n\n  if (charCode === 10) {\n    charCode = 13;\n  } // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n  // Must not discard the (non-)printable Enter-key.\n\n\n  if (charCode >= 32 || charCode === 13) {\n    return charCode;\n  }\n\n  return 0;\n}\n\nfunction functionThatReturnsTrue() {\n  return true;\n}\n\nfunction functionThatReturnsFalse() {\n  return false;\n} // This is intentionally a factory so that we have different returned constructors.\n// If we had a single constructor, it would be megamorphic and engines would deopt.\n\n\nfunction createSyntheticEvent(Interface) {\n  /**\n   * Synthetic events are dispatched by event plugins, typically in response to a\n   * top-level event delegation handler.\n   *\n   * These systems should generally use pooling to reduce the frequency of garbage\n   * collection. The system should check `isPersistent` to determine whether the\n   * event should be released into the pool after being dispatched. Users that\n   * need a persisted event should invoke `persist`.\n   *\n   * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n   * normalizing browser quirks. Subclasses do not necessarily have to implement a\n   * DOM interface; custom application-specific events can also subclass this.\n   */\n  function SyntheticBaseEvent(reactName, reactEventType, targetInst, nativeEvent, nativeEventTarget) {\n    this._reactName = reactName;\n    this._targetInst = targetInst;\n    this.type = reactEventType;\n    this.nativeEvent = nativeEvent;\n    this.target = nativeEventTarget;\n    this.currentTarget = null;\n\n    for (var _propName in Interface) {\n      if (!Interface.hasOwnProperty(_propName)) {\n        continue;\n      }\n\n      var normalize = Interface[_propName];\n\n      if (normalize) {\n        this[_propName] = normalize(nativeEvent);\n      } else {\n        this[_propName] = nativeEvent[_propName];\n      }\n    }\n\n    var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n\n    if (defaultPrevented) {\n      this.isDefaultPrevented = functionThatReturnsTrue;\n    } else {\n      this.isDefaultPrevented = functionThatReturnsFalse;\n    }\n\n    this.isPropagationStopped = functionThatReturnsFalse;\n    return this;\n  }\n\n  assign(SyntheticBaseEvent.prototype, {\n    preventDefault: function () {\n      this.defaultPrevented = true;\n      var event = this.nativeEvent;\n\n      if (!event) {\n        return;\n      }\n\n      if (event.preventDefault) {\n        event.preventDefault(); // $FlowFixMe - flow is not aware of `unknown` in IE\n      } else if (typeof event.returnValue !== 'unknown') {\n        event.returnValue = false;\n      }\n\n      this.isDefaultPrevented = functionThatReturnsTrue;\n    },\n    stopPropagation: function () {\n      var event = this.nativeEvent;\n\n      if (!event) {\n        return;\n      }\n\n      if (event.stopPropagation) {\n        event.stopPropagation(); // $FlowFixMe - flow is not aware of `unknown` in IE\n      } else if (typeof event.cancelBubble !== 'unknown') {\n        // The ChangeEventPlugin registers a \"propertychange\" event for\n        // IE. This event does not support bubbling or cancelling, and\n        // any references to cancelBubble throw \"Member not found\".  A\n        // typeof check of \"unknown\" circumvents this issue (and is also\n        // IE specific).\n        event.cancelBubble = true;\n      }\n\n      this.isPropagationStopped = functionThatReturnsTrue;\n    },\n\n    /**\n     * We release all dispatched `SyntheticEvent`s after each event loop, adding\n     * them back into the pool. This allows a way to hold onto a reference that\n     * won't be added back into the pool.\n     */\n    persist: function () {// Modern event system doesn't use pooling.\n    },\n\n    /**\n     * Checks if this event should be released back into the pool.\n     *\n     * @return {boolean} True if this should not be released, false otherwise.\n     */\n    isPersistent: functionThatReturnsTrue\n  });\n  return SyntheticBaseEvent;\n}\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\n\nvar EventInterface = {\n  eventPhase: 0,\n  bubbles: 0,\n  cancelable: 0,\n  timeStamp: function (event) {\n    return event.timeStamp || Date.now();\n  },\n  defaultPrevented: 0,\n  isTrusted: 0\n};\nvar SyntheticEvent = createSyntheticEvent(EventInterface);\n\nvar UIEventInterface = assign({}, EventInterface, {\n  view: 0,\n  detail: 0\n});\n\nvar SyntheticUIEvent = createSyntheticEvent(UIEventInterface);\nvar lastMovementX;\nvar lastMovementY;\nvar lastMouseEvent;\n\nfunction updateMouseMovementPolyfillState(event) {\n  if (event !== lastMouseEvent) {\n    if (lastMouseEvent && event.type === 'mousemove') {\n      lastMovementX = event.screenX - lastMouseEvent.screenX;\n      lastMovementY = event.screenY - lastMouseEvent.screenY;\n    } else {\n      lastMovementX = 0;\n      lastMovementY = 0;\n    }\n\n    lastMouseEvent = event;\n  }\n}\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\n\nvar MouseEventInterface = assign({}, UIEventInterface, {\n  screenX: 0,\n  screenY: 0,\n  clientX: 0,\n  clientY: 0,\n  pageX: 0,\n  pageY: 0,\n  ctrlKey: 0,\n  shiftKey: 0,\n  altKey: 0,\n  metaKey: 0,\n  getModifierState: getEventModifierState,\n  button: 0,\n  buttons: 0,\n  relatedTarget: function (event) {\n    if (event.relatedTarget === undefined) return event.fromElement === event.srcElement ? event.toElement : event.fromElement;\n    return event.relatedTarget;\n  },\n  movementX: function (event) {\n    if ('movementX' in event) {\n      return event.movementX;\n    }\n\n    updateMouseMovementPolyfillState(event);\n    return lastMovementX;\n  },\n  movementY: function (event) {\n    if ('movementY' in event) {\n      return event.movementY;\n    } // Don't need to call updateMouseMovementPolyfillState() here\n    // because it's guaranteed to have already run when movementX\n    // was copied.\n\n\n    return lastMovementY;\n  }\n});\n\nvar SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface);\n/**\n * @interface DragEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar DragEventInterface = assign({}, MouseEventInterface, {\n  dataTransfer: 0\n});\n\nvar SyntheticDragEvent = createSyntheticEvent(DragEventInterface);\n/**\n * @interface FocusEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar FocusEventInterface = assign({}, UIEventInterface, {\n  relatedTarget: 0\n});\n\nvar SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface);\n/**\n * @interface Event\n * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent\n */\n\nvar AnimationEventInterface = assign({}, EventInterface, {\n  animationName: 0,\n  elapsedTime: 0,\n  pseudoElement: 0\n});\n\nvar SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface);\n/**\n * @interface Event\n * @see http://www.w3.org/TR/clipboard-apis/\n */\n\nvar ClipboardEventInterface = assign({}, EventInterface, {\n  clipboardData: function (event) {\n    return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\n  }\n});\n\nvar SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface);\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\n\nvar CompositionEventInterface = assign({}, EventInterface, {\n  data: 0\n});\n\nvar SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface);\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n *      /#events-inputevents\n */\n// Happens to share the same list for now.\n\nvar SyntheticInputEvent = SyntheticCompositionEvent;\n/**\n * Normalization of deprecated HTML5 `key` values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\n\nvar normalizeKey = {\n  Esc: 'Escape',\n  Spacebar: ' ',\n  Left: 'ArrowLeft',\n  Up: 'ArrowUp',\n  Right: 'ArrowRight',\n  Down: 'ArrowDown',\n  Del: 'Delete',\n  Win: 'OS',\n  Menu: 'ContextMenu',\n  Apps: 'ContextMenu',\n  Scroll: 'ScrollLock',\n  MozPrintableKey: 'Unidentified'\n};\n/**\n * Translation from legacy `keyCode` to HTML5 `key`\n * Only special keys supported, all others depend on keyboard layout or browser\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\n\nvar translateToKey = {\n  '8': 'Backspace',\n  '9': 'Tab',\n  '12': 'Clear',\n  '13': 'Enter',\n  '16': 'Shift',\n  '17': 'Control',\n  '18': 'Alt',\n  '19': 'Pause',\n  '20': 'CapsLock',\n  '27': 'Escape',\n  '32': ' ',\n  '33': 'PageUp',\n  '34': 'PageDown',\n  '35': 'End',\n  '36': 'Home',\n  '37': 'ArrowLeft',\n  '38': 'ArrowUp',\n  '39': 'ArrowRight',\n  '40': 'ArrowDown',\n  '45': 'Insert',\n  '46': 'Delete',\n  '112': 'F1',\n  '113': 'F2',\n  '114': 'F3',\n  '115': 'F4',\n  '116': 'F5',\n  '117': 'F6',\n  '118': 'F7',\n  '119': 'F8',\n  '120': 'F9',\n  '121': 'F10',\n  '122': 'F11',\n  '123': 'F12',\n  '144': 'NumLock',\n  '145': 'ScrollLock',\n  '224': 'Meta'\n};\n/**\n * @param {object} nativeEvent Native browser event.\n * @return {string} Normalized `key` property.\n */\n\nfunction getEventKey(nativeEvent) {\n  if (nativeEvent.key) {\n    // Normalize inconsistent values reported by browsers due to\n    // implementations of a working draft specification.\n    // FireFox implements `key` but returns `MozPrintableKey` for all\n    // printable characters (normalized to `Unidentified`), ignore it.\n    var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n\n    if (key !== 'Unidentified') {\n      return key;\n    }\n  } // Browser does not implement `key`, polyfill as much of it as we can.\n\n\n  if (nativeEvent.type === 'keypress') {\n    var charCode = getEventCharCode(nativeEvent); // The enter-key is technically both printable and non-printable and can\n    // thus be captured by `keypress`, no other non-printable key should.\n\n    return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\n  }\n\n  if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\n    // While user keyboard layout determines the actual meaning of each\n    // `keyCode` value, almost all function keys have a universal value.\n    return translateToKey[nativeEvent.keyCode] || 'Unidentified';\n  }\n\n  return '';\n}\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\n\n\nvar modifierKeyToProp = {\n  Alt: 'altKey',\n  Control: 'ctrlKey',\n  Meta: 'metaKey',\n  Shift: 'shiftKey'\n}; // Older browsers (Safari <= 10, iOS Safari <= 10.2) do not support\n// getModifierState. If getModifierState is not supported, we map it to a set of\n// modifier keys exposed by the event. In this case, Lock-keys are not supported.\n\nfunction modifierStateGetter(keyArg) {\n  var syntheticEvent = this;\n  var nativeEvent = syntheticEvent.nativeEvent;\n\n  if (nativeEvent.getModifierState) {\n    return nativeEvent.getModifierState(keyArg);\n  }\n\n  var keyProp = modifierKeyToProp[keyArg];\n  return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n  return modifierStateGetter;\n}\n/**\n * @interface KeyboardEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\n\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n  key: getEventKey,\n  code: 0,\n  location: 0,\n  ctrlKey: 0,\n  shiftKey: 0,\n  altKey: 0,\n  metaKey: 0,\n  repeat: 0,\n  locale: 0,\n  getModifierState: getEventModifierState,\n  // Legacy Interface\n  charCode: function (event) {\n    // `charCode` is the result of a KeyPress event and represents the value of\n    // the actual printable character.\n    // KeyPress is deprecated, but its replacement is not yet final and not\n    // implemented in any major browser. Only KeyPress has charCode.\n    if (event.type === 'keypress') {\n      return getEventCharCode(event);\n    }\n\n    return 0;\n  },\n  keyCode: function (event) {\n    // `keyCode` is the result of a KeyDown/Up event and represents the value of\n    // physical keyboard key.\n    // The actual meaning of the value depends on the users' keyboard layout\n    // which cannot be detected. Assuming that it is a US keyboard layout\n    // provides a surprisingly accurate mapping for US and European users.\n    // Due to this, it is left to the user to implement at this time.\n    if (event.type === 'keydown' || event.type === 'keyup') {\n      return event.keyCode;\n    }\n\n    return 0;\n  },\n  which: function (event) {\n    // `which` is an alias for either `keyCode` or `charCode` depending on the\n    // type of the event.\n    if (event.type === 'keypress') {\n      return getEventCharCode(event);\n    }\n\n    if (event.type === 'keydown' || event.type === 'keyup') {\n      return event.keyCode;\n    }\n\n    return 0;\n  }\n});\n\nvar SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface);\n/**\n * @interface PointerEvent\n * @see http://www.w3.org/TR/pointerevents/\n */\n\nvar PointerEventInterface = assign({}, MouseEventInterface, {\n  pointerId: 0,\n  width: 0,\n  height: 0,\n  pressure: 0,\n  tangentialPressure: 0,\n  tiltX: 0,\n  tiltY: 0,\n  twist: 0,\n  pointerType: 0,\n  isPrimary: 0\n});\n\nvar SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface);\n/**\n * @interface TouchEvent\n * @see http://www.w3.org/TR/touch-events/\n */\n\nvar TouchEventInterface = assign({}, UIEventInterface, {\n  touches: 0,\n  targetTouches: 0,\n  changedTouches: 0,\n  altKey: 0,\n  metaKey: 0,\n  ctrlKey: 0,\n  shiftKey: 0,\n  getModifierState: getEventModifierState\n});\n\nvar SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface);\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent\n */\n\nvar TransitionEventInterface = assign({}, EventInterface, {\n  propertyName: 0,\n  elapsedTime: 0,\n  pseudoElement: 0\n});\n\nvar SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface);\n/**\n * @interface WheelEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar WheelEventInterface = assign({}, MouseEventInterface, {\n  deltaX: function (event) {\n    return 'deltaX' in event ? event.deltaX : // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\n    'wheelDeltaX' in event ? -event.wheelDeltaX : 0;\n  },\n  deltaY: function (event) {\n    return 'deltaY' in event ? event.deltaY : // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\n    'wheelDeltaY' in event ? -event.wheelDeltaY : // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\n    'wheelDelta' in event ? -event.wheelDelta : 0;\n  },\n  deltaZ: 0,\n  // Browsers without \"deltaMode\" is reporting in raw wheel delta where one\n  // notch on the scroll is always +/- 120, roughly equivalent to pixels.\n  // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\n  // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\n  deltaMode: 0\n});\n\nvar SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface);\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\n\nvar START_KEYCODE = 229;\nvar canUseCompositionEvent = canUseDOM && 'CompositionEvent' in window;\nvar documentMode = null;\n\nif (canUseDOM && 'documentMode' in document) {\n  documentMode = document.documentMode;\n} // Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\n\n\nvar canUseTextInputEvent = canUseDOM && 'TextEvent' in window && !documentMode; // In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\n\nvar useFallbackCompositionData = canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\n\nfunction registerEvents() {\n  registerTwoPhaseEvent('onBeforeInput', ['compositionend', 'keypress', 'textInput', 'paste']);\n  registerTwoPhaseEvent('onCompositionEnd', ['compositionend', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);\n  registerTwoPhaseEvent('onCompositionStart', ['compositionstart', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);\n  registerTwoPhaseEvent('onCompositionUpdate', ['compositionupdate', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);\n} // Track whether we've ever handled a keypress on the space key.\n\n\nvar hasSpaceKeypress = false;\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\n\nfunction isKeypressCommand(nativeEvent) {\n  return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) && // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n  !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n/**\n * Translate native top level events into event types.\n */\n\n\nfunction getCompositionEventType(domEventName) {\n  switch (domEventName) {\n    case 'compositionstart':\n      return 'onCompositionStart';\n\n    case 'compositionend':\n      return 'onCompositionEnd';\n\n    case 'compositionupdate':\n      return 'onCompositionUpdate';\n  }\n}\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n */\n\n\nfunction isFallbackCompositionStart(domEventName, nativeEvent) {\n  return domEventName === 'keydown' && nativeEvent.keyCode === START_KEYCODE;\n}\n/**\n * Does our fallback mode think that this event is the end of composition?\n */\n\n\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case 'keyup':\n      // Command keys insert or clear IME input.\n      return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n\n    case 'keydown':\n      // Expect IME keyCode on each keydown. If we get any other\n      // code we must have exited earlier.\n      return nativeEvent.keyCode !== START_KEYCODE;\n\n    case 'keypress':\n    case 'mousedown':\n    case 'focusout':\n      // Events are not possible without cancelling IME.\n      return true;\n\n    default:\n      return false;\n  }\n}\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\n\n\nfunction getDataFromCustomEvent(nativeEvent) {\n  var detail = nativeEvent.detail;\n\n  if (typeof detail === 'object' && 'data' in detail) {\n    return detail.data;\n  }\n\n  return null;\n}\n/**\n * Check if a composition event was triggered by Korean IME.\n * Our fallback mode does not work well with IE's Korean IME,\n * so just use native composition events when Korean IME is used.\n * Although CompositionEvent.locale property is deprecated,\n * it is available in IE, where our fallback mode is enabled.\n *\n * @param {object} nativeEvent\n * @return {boolean}\n */\n\n\nfunction isUsingKoreanIME(nativeEvent) {\n  return nativeEvent.locale === 'ko';\n} // Track the current IME composition status, if any.\n\n\nvar isComposing = false;\n/**\n * @return {?object} A SyntheticCompositionEvent.\n */\n\nfunction extractCompositionEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget) {\n  var eventType;\n  var fallbackData;\n\n  if (canUseCompositionEvent) {\n    eventType = getCompositionEventType(domEventName);\n  } else if (!isComposing) {\n    if (isFallbackCompositionStart(domEventName, nativeEvent)) {\n      eventType = 'onCompositionStart';\n    }\n  } else if (isFallbackCompositionEnd(domEventName, nativeEvent)) {\n    eventType = 'onCompositionEnd';\n  }\n\n  if (!eventType) {\n    return null;\n  }\n\n  if (useFallbackCompositionData && !isUsingKoreanIME(nativeEvent)) {\n    // The current composition is stored statically and must not be\n    // overwritten while composition continues.\n    if (!isComposing && eventType === 'onCompositionStart') {\n      isComposing = initialize(nativeEventTarget);\n    } else if (eventType === 'onCompositionEnd') {\n      if (isComposing) {\n        fallbackData = getData();\n      }\n    }\n  }\n\n  var listeners = accumulateTwoPhaseListeners(targetInst, eventType);\n\n  if (listeners.length > 0) {\n    var event = new SyntheticCompositionEvent(eventType, domEventName, null, nativeEvent, nativeEventTarget);\n    dispatchQueue.push({\n      event: event,\n      listeners: listeners\n    });\n\n    if (fallbackData) {\n      // Inject data generated from fallback path into the synthetic event.\n      // This matches the property of native CompositionEventInterface.\n      event.data = fallbackData;\n    } else {\n      var customData = getDataFromCustomEvent(nativeEvent);\n\n      if (customData !== null) {\n        event.data = customData;\n      }\n    }\n  }\n}\n\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case 'compositionend':\n      return getDataFromCustomEvent(nativeEvent);\n\n    case 'keypress':\n      /**\n       * If native `textInput` events are available, our goal is to make\n       * use of them. However, there is a special case: the spacebar key.\n       * In Webkit, preventing default on a spacebar `textInput` event\n       * cancels character insertion, but it *also* causes the browser\n       * to fall back to its default spacebar behavior of scrolling the\n       * page.\n       *\n       * Tracking at:\n       * https://code.google.com/p/chromium/issues/detail?id=355103\n       *\n       * To avoid this issue, use the keypress event as if no `textInput`\n       * event is available.\n       */\n      var which = nativeEvent.which;\n\n      if (which !== SPACEBAR_CODE) {\n        return null;\n      }\n\n      hasSpaceKeypress = true;\n      return SPACEBAR_CHAR;\n\n    case 'textInput':\n      // Record the characters to be added to the DOM.\n      var chars = nativeEvent.data; // If it's a spacebar character, assume that we have already handled\n      // it at the keypress level and bail immediately. Android Chrome\n      // doesn't give us keycodes, so we need to ignore it.\n\n      if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n        return null;\n      }\n\n      return chars;\n\n    default:\n      // For other native event types, do nothing.\n      return null;\n  }\n}\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n */\n\n\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n  // If we are currently composing (IME) and using a fallback to do so,\n  // try to extract the composed characters from the fallback object.\n  // If composition event is available, we extract a string only at\n  // compositionevent, otherwise extract it at fallback events.\n  if (isComposing) {\n    if (domEventName === 'compositionend' || !canUseCompositionEvent && isFallbackCompositionEnd(domEventName, nativeEvent)) {\n      var chars = getData();\n      reset();\n      isComposing = false;\n      return chars;\n    }\n\n    return null;\n  }\n\n  switch (domEventName) {\n    case 'paste':\n      // If a paste event occurs after a keypress, throw out the input\n      // chars. Paste events should not lead to BeforeInput events.\n      return null;\n\n    case 'keypress':\n      /**\n       * As of v27, Firefox may fire keypress events even when no character\n       * will be inserted. A few possibilities:\n       *\n       * - `which` is `0`. Arrow keys, Esc key, etc.\n       *\n       * - `which` is the pressed key code, but no char is available.\n       *   Ex: 'AltGr + d` in Polish. There is no modified character for\n       *   this key combination and no character is inserted into the\n       *   document, but FF fires the keypress for char code `100` anyway.\n       *   No `input` event will occur.\n       *\n       * - `which` is the pressed key code, but a command combination is\n       *   being used. Ex: `Cmd+C`. No character is inserted, and no\n       *   `input` event will occur.\n       */\n      if (!isKeypressCommand(nativeEvent)) {\n        // IE fires the `keypress` event when a user types an emoji via\n        // Touch keyboard of Windows.  In such a case, the `char` property\n        // holds an emoji character like `\\uD83D\\uDE0A`.  Because its length\n        // is 2, the property `which` does not represent an emoji correctly.\n        // In such a case, we directly return the `char` property instead of\n        // using `which`.\n        if (nativeEvent.char && nativeEvent.char.length > 1) {\n          return nativeEvent.char;\n        } else if (nativeEvent.which) {\n          return String.fromCharCode(nativeEvent.which);\n        }\n      }\n\n      return null;\n\n    case 'compositionend':\n      return useFallbackCompositionData && !isUsingKoreanIME(nativeEvent) ? null : nativeEvent.data;\n\n    default:\n      return null;\n  }\n}\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @return {?object} A SyntheticInputEvent.\n */\n\n\nfunction extractBeforeInputEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget) {\n  var chars;\n\n  if (canUseTextInputEvent) {\n    chars = getNativeBeforeInputChars(domEventName, nativeEvent);\n  } else {\n    chars = getFallbackBeforeInputChars(domEventName, nativeEvent);\n  } // If no characters are being inserted, no BeforeInput event should\n  // be fired.\n\n\n  if (!chars) {\n    return null;\n  }\n\n  var listeners = accumulateTwoPhaseListeners(targetInst, 'onBeforeInput');\n\n  if (listeners.length > 0) {\n    var event = new SyntheticInputEvent('onBeforeInput', 'beforeinput', null, nativeEvent, nativeEventTarget);\n    dispatchQueue.push({\n      event: event,\n      listeners: listeners\n    });\n    event.data = chars;\n  }\n}\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\n\n\nfunction extractEvents(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n  extractCompositionEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n  extractBeforeInputEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n}\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\nvar supportedInputTypes = {\n  color: true,\n  date: true,\n  datetime: true,\n  'datetime-local': true,\n  email: true,\n  month: true,\n  number: true,\n  password: true,\n  range: true,\n  search: true,\n  tel: true,\n  text: true,\n  time: true,\n  url: true,\n  week: true\n};\n\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n\n  if (nodeName === 'input') {\n    return !!supportedInputTypes[elem.type];\n  }\n\n  if (nodeName === 'textarea') {\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\n\nfunction isEventSupported(eventNameSuffix) {\n  if (!canUseDOM) {\n    return false;\n  }\n\n  var eventName = 'on' + eventNameSuffix;\n  var isSupported = (eventName in document);\n\n  if (!isSupported) {\n    var element = document.createElement('div');\n    element.setAttribute(eventName, 'return;');\n    isSupported = typeof element[eventName] === 'function';\n  }\n\n  return isSupported;\n}\n\nfunction registerEvents$1() {\n  registerTwoPhaseEvent('onChange', ['change', 'click', 'focusin', 'focusout', 'input', 'keydown', 'keyup', 'selectionchange']);\n}\n\nfunction createAndAccumulateChangeEvent(dispatchQueue, inst, nativeEvent, target) {\n  // Flag this event loop as needing state restore.\n  enqueueStateRestore(target);\n  var listeners = accumulateTwoPhaseListeners(inst, 'onChange');\n\n  if (listeners.length > 0) {\n    var event = new SyntheticEvent('onChange', 'change', null, nativeEvent, target);\n    dispatchQueue.push({\n      event: event,\n      listeners: listeners\n    });\n  }\n}\n/**\n * For IE shims\n */\n\n\nvar activeElement = null;\nvar activeElementInst = null;\n/**\n * SECTION: handle `change` event\n */\n\nfunction shouldUseChangeEvent(elem) {\n  var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n  return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n  var dispatchQueue = [];\n  createAndAccumulateChangeEvent(dispatchQueue, activeElementInst, nativeEvent, getEventTarget(nativeEvent)); // If change and propertychange bubbled, we'd just bind to it like all the\n  // other events and have it go through ReactBrowserEventEmitter. Since it\n  // doesn't, we manually listen for the events and so we have to enqueue and\n  // process the abstract event manually.\n  //\n  // Batching is necessary here in order to ensure that all event handlers run\n  // before the next rerender (including event handlers attached to ancestor\n  // elements instead of directly on the input). Without this, controlled\n  // components don't work properly in conjunction with event bubbling because\n  // the component is rerendered and the value reverted before all the event\n  // handlers can run. See https://github.com/facebook/react/issues/708.\n\n  batchedUpdates(runEventInBatch, dispatchQueue);\n}\n\nfunction runEventInBatch(dispatchQueue) {\n  processDispatchQueue(dispatchQueue, 0);\n}\n\nfunction getInstIfValueChanged(targetInst) {\n  var targetNode = getNodeFromInstance(targetInst);\n\n  if (updateValueIfChanged(targetNode)) {\n    return targetInst;\n  }\n}\n\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n  if (domEventName === 'change') {\n    return targetInst;\n  }\n}\n/**\n * SECTION: handle `input` event\n */\n\n\nvar isInputEventSupported = false;\n\nif (canUseDOM) {\n  // IE9 claims to support the input event but fails to trigger it when\n  // deleting text, so we ignore its input events.\n  isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 9);\n}\n/**\n * (For IE <=9) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\n\n\nfunction startWatchingForValueChange(target, targetInst) {\n  activeElement = target;\n  activeElementInst = targetInst;\n  activeElement.attachEvent('onpropertychange', handlePropertyChange);\n}\n/**\n * (For IE <=9) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\n\n\nfunction stopWatchingForValueChange() {\n  if (!activeElement) {\n    return;\n  }\n\n  activeElement.detachEvent('onpropertychange', handlePropertyChange);\n  activeElement = null;\n  activeElementInst = null;\n}\n/**\n * (For IE <=9) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\n\n\nfunction handlePropertyChange(nativeEvent) {\n  if (nativeEvent.propertyName !== 'value') {\n    return;\n  }\n\n  if (getInstIfValueChanged(activeElementInst)) {\n    manualDispatchChangeEvent(nativeEvent);\n  }\n}\n\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n  if (domEventName === 'focusin') {\n    // In IE9, propertychange fires for most input events but is buggy and\n    // doesn't fire when text is deleted, but conveniently, selectionchange\n    // appears to fire in all of the remaining cases so we catch those and\n    // forward the event if the value has changed\n    // In either case, we don't want to call the event handler if the value\n    // is changed from JS so we redefine a setter for `.value` that updates\n    // our activeElementValue variable, allowing us to ignore those changes\n    //\n    // stopWatching() should be a noop here but we call it just in case we\n    // missed a blur event somehow.\n    stopWatchingForValueChange();\n    startWatchingForValueChange(target, targetInst);\n  } else if (domEventName === 'focusout') {\n    stopWatchingForValueChange();\n  }\n} // For IE8 and IE9.\n\n\nfunction getTargetInstForInputEventPolyfill(domEventName, targetInst) {\n  if (domEventName === 'selectionchange' || domEventName === 'keyup' || domEventName === 'keydown') {\n    // On the selectionchange event, the target is just document which isn't\n    // helpful for us so just check activeElement instead.\n    //\n    // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n    // propertychange on the first input event after setting `value` from a\n    // script and fires only keydown, keypress, keyup. Catching keyup usually\n    // gets it and catching keydown lets us fire an event for the first\n    // keystroke if user does a key repeat (it'll be a little delayed: right\n    // before the second keystroke). Other input methods (e.g., paste) seem to\n    // fire selectionchange normally.\n    return getInstIfValueChanged(activeElementInst);\n  }\n}\n/**\n * SECTION: handle `click` event\n */\n\n\nfunction shouldUseClickEvent(elem) {\n  // Use the `click` event to detect changes to checkbox and radio inputs.\n  // This approach works across all browsers, whereas `change` does not fire\n  // until `blur` in IE8.\n  var nodeName = elem.nodeName;\n  return nodeName && nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n  if (domEventName === 'click') {\n    return getInstIfValueChanged(targetInst);\n  }\n}\n\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n  if (domEventName === 'input' || domEventName === 'change') {\n    return getInstIfValueChanged(targetInst);\n  }\n}\n\nfunction handleControlledInputBlur(node) {\n  var state = node._wrapperState;\n\n  if (!state || !state.controlled || node.type !== 'number') {\n    return;\n  }\n\n  {\n    // If controlled, assign the value attribute to the current value on blur\n    setDefaultValue(node, 'number', node.value);\n  }\n}\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\n\n\nfunction extractEvents$1(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n  var targetNode = targetInst ? getNodeFromInstance(targetInst) : window;\n  var getTargetInstFunc, handleEventFunc;\n\n  if (shouldUseChangeEvent(targetNode)) {\n    getTargetInstFunc = getTargetInstForChangeEvent;\n  } else if (isTextInputElement(targetNode)) {\n    if (isInputEventSupported) {\n      getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n    } else {\n      getTargetInstFunc = getTargetInstForInputEventPolyfill;\n      handleEventFunc = handleEventsForInputEventPolyfill;\n    }\n  } else if (shouldUseClickEvent(targetNode)) {\n    getTargetInstFunc = getTargetInstForClickEvent;\n  }\n\n  if (getTargetInstFunc) {\n    var inst = getTargetInstFunc(domEventName, targetInst);\n\n    if (inst) {\n      createAndAccumulateChangeEvent(dispatchQueue, inst, nativeEvent, nativeEventTarget);\n      return;\n    }\n  }\n\n  if (handleEventFunc) {\n    handleEventFunc(domEventName, targetNode, targetInst);\n  } // When blurring, set the value attribute for number inputs\n\n\n  if (domEventName === 'focusout') {\n    handleControlledInputBlur(targetNode);\n  }\n}\n\nfunction registerEvents$2() {\n  registerDirectEvent('onMouseEnter', ['mouseout', 'mouseover']);\n  registerDirectEvent('onMouseLeave', ['mouseout', 'mouseover']);\n  registerDirectEvent('onPointerEnter', ['pointerout', 'pointerover']);\n  registerDirectEvent('onPointerLeave', ['pointerout', 'pointerover']);\n}\n/**\n * For almost every interaction we care about, there will be both a top-level\n * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n * we do not extract duplicate events. However, moving the mouse into the\n * browser from outside will not fire a `mouseout` event. In this case, we use\n * the `mouseover` top-level event.\n */\n\n\nfunction extractEvents$2(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n  var isOverEvent = domEventName === 'mouseover' || domEventName === 'pointerover';\n  var isOutEvent = domEventName === 'mouseout' || domEventName === 'pointerout';\n\n  if (isOverEvent && !isReplayingEvent(nativeEvent)) {\n    // If this is an over event with a target, we might have already dispatched\n    // the event in the out event of the other target. If this is replayed,\n    // then it's because we couldn't dispatch against this target previously\n    // so we have to do it now instead.\n    var related = nativeEvent.relatedTarget || nativeEvent.fromElement;\n\n    if (related) {\n      // If the related node is managed by React, we can assume that we have\n      // already dispatched the corresponding events during its mouseout.\n      if (getClosestInstanceFromNode(related) || isContainerMarkedAsRoot(related)) {\n        return;\n      }\n    }\n  }\n\n  if (!isOutEvent && !isOverEvent) {\n    // Must not be a mouse or pointer in or out - ignoring.\n    return;\n  }\n\n  var win; // TODO: why is this nullable in the types but we read from it?\n\n  if (nativeEventTarget.window === nativeEventTarget) {\n    // `nativeEventTarget` is probably a window object.\n    win = nativeEventTarget;\n  } else {\n    // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n    var doc = nativeEventTarget.ownerDocument;\n\n    if (doc) {\n      win = doc.defaultView || doc.parentWindow;\n    } else {\n      win = window;\n    }\n  }\n\n  var from;\n  var to;\n\n  if (isOutEvent) {\n    var _related = nativeEvent.relatedTarget || nativeEvent.toElement;\n\n    from = targetInst;\n    to = _related ? getClosestInstanceFromNode(_related) : null;\n\n    if (to !== null) {\n      var nearestMounted = getNearestMountedFiber(to);\n\n      if (to !== nearestMounted || to.tag !== HostComponent && to.tag !== HostText) {\n        to = null;\n      }\n    }\n  } else {\n    // Moving to a node from outside the window.\n    from = null;\n    to = targetInst;\n  }\n\n  if (from === to) {\n    // Nothing pertains to our managed components.\n    return;\n  }\n\n  var SyntheticEventCtor = SyntheticMouseEvent;\n  var leaveEventType = 'onMouseLeave';\n  var enterEventType = 'onMouseEnter';\n  var eventTypePrefix = 'mouse';\n\n  if (domEventName === 'pointerout' || domEventName === 'pointerover') {\n    SyntheticEventCtor = SyntheticPointerEvent;\n    leaveEventType = 'onPointerLeave';\n    enterEventType = 'onPointerEnter';\n    eventTypePrefix = 'pointer';\n  }\n\n  var fromNode = from == null ? win : getNodeFromInstance(from);\n  var toNode = to == null ? win : getNodeFromInstance(to);\n  var leave = new SyntheticEventCtor(leaveEventType, eventTypePrefix + 'leave', from, nativeEvent, nativeEventTarget);\n  leave.target = fromNode;\n  leave.relatedTarget = toNode;\n  var enter = null; // We should only process this nativeEvent if we are processing\n  // the first ancestor. Next time, we will ignore the event.\n\n  var nativeTargetInst = getClosestInstanceFromNode(nativeEventTarget);\n\n  if (nativeTargetInst === targetInst) {\n    var enterEvent = new SyntheticEventCtor(enterEventType, eventTypePrefix + 'enter', to, nativeEvent, nativeEventTarget);\n    enterEvent.target = toNode;\n    enterEvent.relatedTarget = fromNode;\n    enter = enterEvent;\n  }\n\n  accumulateEnterLeaveTwoPhaseListeners(dispatchQueue, leave, enter, from, to);\n}\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n  return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n  ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\n\nfunction shallowEqual(objA, objB) {\n  if (objectIs(objA, objB)) {\n    return true;\n  }\n\n  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  } // Test for A's keys different from B.\n\n\n  for (var i = 0; i < keysA.length; i++) {\n    var currentKey = keysA[i];\n\n    if (!hasOwnProperty.call(objB, currentKey) || !objectIs(objA[currentKey], objB[currentKey])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Given any node return the first leaf node without children.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {DOMElement|DOMTextNode}\n */\n\nfunction getLeafNode(node) {\n  while (node && node.firstChild) {\n    node = node.firstChild;\n  }\n\n  return node;\n}\n/**\n * Get the next sibling within a container. This will walk up the\n * DOM if a node's siblings have been exhausted.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {?DOMElement|DOMTextNode}\n */\n\n\nfunction getSiblingNode(node) {\n  while (node) {\n    if (node.nextSibling) {\n      return node.nextSibling;\n    }\n\n    node = node.parentNode;\n  }\n}\n/**\n * Get object describing the nodes which contain characters at offset.\n *\n * @param {DOMElement|DOMTextNode} root\n * @param {number} offset\n * @return {?object}\n */\n\n\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  var nodeStart = 0;\n  var nodeEnd = 0;\n\n  while (node) {\n    if (node.nodeType === TEXT_NODE) {\n      nodeEnd = nodeStart + node.textContent.length;\n\n      if (nodeStart <= offset && nodeEnd >= offset) {\n        return {\n          node: node,\n          offset: offset - nodeStart\n        };\n      }\n\n      nodeStart = nodeEnd;\n    }\n\n    node = getLeafNode(getSiblingNode(node));\n  }\n}\n\n/**\n * @param {DOMElement} outerNode\n * @return {?object}\n */\n\nfunction getOffsets(outerNode) {\n  var ownerDocument = outerNode.ownerDocument;\n  var win = ownerDocument && ownerDocument.defaultView || window;\n  var selection = win.getSelection && win.getSelection();\n\n  if (!selection || selection.rangeCount === 0) {\n    return null;\n  }\n\n  var anchorNode = selection.anchorNode,\n      anchorOffset = selection.anchorOffset,\n      focusNode = selection.focusNode,\n      focusOffset = selection.focusOffset; // In Firefox, anchorNode and focusNode can be \"anonymous divs\", e.g. the\n  // up/down buttons on an <input type=\"number\">. Anonymous divs do not seem to\n  // expose properties, triggering a \"Permission denied error\" if any of its\n  // properties are accessed. The only seemingly possible way to avoid erroring\n  // is to access a property that typically works for non-anonymous divs and\n  // catch any error that may otherwise arise. See\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n\n  try {\n    /* eslint-disable no-unused-expressions */\n    anchorNode.nodeType;\n    focusNode.nodeType;\n    /* eslint-enable no-unused-expressions */\n  } catch (e) {\n    return null;\n  }\n\n  return getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset);\n}\n/**\n * Returns {start, end} where `start` is the character/codepoint index of\n * (anchorNode, anchorOffset) within the textContent of `outerNode`, and\n * `end` is the index of (focusNode, focusOffset).\n *\n * Returns null if you pass in garbage input but we should probably just crash.\n *\n * Exported only for testing.\n */\n\nfunction getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset) {\n  var length = 0;\n  var start = -1;\n  var end = -1;\n  var indexWithinAnchor = 0;\n  var indexWithinFocus = 0;\n  var node = outerNode;\n  var parentNode = null;\n\n  outer: while (true) {\n    var next = null;\n\n    while (true) {\n      if (node === anchorNode && (anchorOffset === 0 || node.nodeType === TEXT_NODE)) {\n        start = length + anchorOffset;\n      }\n\n      if (node === focusNode && (focusOffset === 0 || node.nodeType === TEXT_NODE)) {\n        end = length + focusOffset;\n      }\n\n      if (node.nodeType === TEXT_NODE) {\n        length += node.nodeValue.length;\n      }\n\n      if ((next = node.firstChild) === null) {\n        break;\n      } // Moving from `node` to its first child `next`.\n\n\n      parentNode = node;\n      node = next;\n    }\n\n    while (true) {\n      if (node === outerNode) {\n        // If `outerNode` has children, this is always the second time visiting\n        // it. If it has no children, this is still the first loop, and the only\n        // valid selection is anchorNode and focusNode both equal to this node\n        // and both offsets 0, in which case we will have handled above.\n        break outer;\n      }\n\n      if (parentNode === anchorNode && ++indexWithinAnchor === anchorOffset) {\n        start = length;\n      }\n\n      if (parentNode === focusNode && ++indexWithinFocus === focusOffset) {\n        end = length;\n      }\n\n      if ((next = node.nextSibling) !== null) {\n        break;\n      }\n\n      node = parentNode;\n      parentNode = node.parentNode;\n    } // Moving from `node` to its next sibling `next`.\n\n\n    node = next;\n  }\n\n  if (start === -1 || end === -1) {\n    // This should never happen. (Would happen if the anchor/focus nodes aren't\n    // actually inside the passed-in node.)\n    return null;\n  }\n\n  return {\n    start: start,\n    end: end\n  };\n}\n/**\n * In modern non-IE browsers, we can support both forward and backward\n * selections.\n *\n * Note: IE10+ supports the Selection object, but it does not support\n * the `extend` method, which means that even in modern IE, it's not possible\n * to programmatically create a backward selection. Thus, for all IE\n * versions, we use the old IE API to create our selections.\n *\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\n\nfunction setOffsets(node, offsets) {\n  var doc = node.ownerDocument || document;\n  var win = doc && doc.defaultView || window; // Edge fails with \"Object expected\" in some scenarios.\n  // (For instance: TinyMCE editor used in a list component that supports pasting to add more,\n  // fails when pasting 100+ items)\n\n  if (!win.getSelection) {\n    return;\n  }\n\n  var selection = win.getSelection();\n  var length = node.textContent.length;\n  var start = Math.min(offsets.start, length);\n  var end = offsets.end === undefined ? start : Math.min(offsets.end, length); // IE 11 uses modern selection, but doesn't support the extend method.\n  // Flip backward selections, so we can set with a single range.\n\n  if (!selection.extend && start > end) {\n    var temp = end;\n    end = start;\n    start = temp;\n  }\n\n  var startMarker = getNodeForCharacterOffset(node, start);\n  var endMarker = getNodeForCharacterOffset(node, end);\n\n  if (startMarker && endMarker) {\n    if (selection.rangeCount === 1 && selection.anchorNode === startMarker.node && selection.anchorOffset === startMarker.offset && selection.focusNode === endMarker.node && selection.focusOffset === endMarker.offset) {\n      return;\n    }\n\n    var range = doc.createRange();\n    range.setStart(startMarker.node, startMarker.offset);\n    selection.removeAllRanges();\n\n    if (start > end) {\n      selection.addRange(range);\n      selection.extend(endMarker.node, endMarker.offset);\n    } else {\n      range.setEnd(endMarker.node, endMarker.offset);\n      selection.addRange(range);\n    }\n  }\n}\n\nfunction isTextNode(node) {\n  return node && node.nodeType === TEXT_NODE;\n}\n\nfunction containsNode(outerNode, innerNode) {\n  if (!outerNode || !innerNode) {\n    return false;\n  } else if (outerNode === innerNode) {\n    return true;\n  } else if (isTextNode(outerNode)) {\n    return false;\n  } else if (isTextNode(innerNode)) {\n    return containsNode(outerNode, innerNode.parentNode);\n  } else if ('contains' in outerNode) {\n    return outerNode.contains(innerNode);\n  } else if (outerNode.compareDocumentPosition) {\n    return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n  } else {\n    return false;\n  }\n}\n\nfunction isInDocument(node) {\n  return node && node.ownerDocument && containsNode(node.ownerDocument.documentElement, node);\n}\n\nfunction isSameOriginFrame(iframe) {\n  try {\n    // Accessing the contentDocument of a HTMLIframeElement can cause the browser\n    // to throw, e.g. if it has a cross-origin src attribute.\n    // Safari will show an error in the console when the access results in \"Blocked a frame with origin\". e.g:\n    // iframe.contentDocument.defaultView;\n    // A safety way is to access one of the cross origin properties: Window or Location\n    // Which might result in \"SecurityError\" DOM Exception and it is compatible to Safari.\n    // https://html.spec.whatwg.org/multipage/browsers.html#integration-with-idl\n    return typeof iframe.contentWindow.location.href === 'string';\n  } catch (err) {\n    return false;\n  }\n}\n\nfunction getActiveElementDeep() {\n  var win = window;\n  var element = getActiveElement();\n\n  while (element instanceof win.HTMLIFrameElement) {\n    if (isSameOriginFrame(element)) {\n      win = element.contentWindow;\n    } else {\n      return element;\n    }\n\n    element = getActiveElement(win.document);\n  }\n\n  return element;\n}\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\n\n/**\n * @hasSelectionCapabilities: we get the element types that support selection\n * from https://html.spec.whatwg.org/#do-not-apply, looking at `selectionStart`\n * and `selectionEnd` rows.\n */\n\n\nfunction hasSelectionCapabilities(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return nodeName && (nodeName === 'input' && (elem.type === 'text' || elem.type === 'search' || elem.type === 'tel' || elem.type === 'url' || elem.type === 'password') || nodeName === 'textarea' || elem.contentEditable === 'true');\n}\nfunction getSelectionInformation() {\n  var focusedElem = getActiveElementDeep();\n  return {\n    focusedElem: focusedElem,\n    selectionRange: hasSelectionCapabilities(focusedElem) ? getSelection(focusedElem) : null\n  };\n}\n/**\n * @restoreSelection: If any selection information was potentially lost,\n * restore it. This is useful when performing operations that could remove dom\n * nodes and place them back in, resulting in focus being lost.\n */\n\nfunction restoreSelection(priorSelectionInformation) {\n  var curFocusedElem = getActiveElementDeep();\n  var priorFocusedElem = priorSelectionInformation.focusedElem;\n  var priorSelectionRange = priorSelectionInformation.selectionRange;\n\n  if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n    if (priorSelectionRange !== null && hasSelectionCapabilities(priorFocusedElem)) {\n      setSelection(priorFocusedElem, priorSelectionRange);\n    } // Focusing a node can change the scroll position, which is undesirable\n\n\n    var ancestors = [];\n    var ancestor = priorFocusedElem;\n\n    while (ancestor = ancestor.parentNode) {\n      if (ancestor.nodeType === ELEMENT_NODE) {\n        ancestors.push({\n          element: ancestor,\n          left: ancestor.scrollLeft,\n          top: ancestor.scrollTop\n        });\n      }\n    }\n\n    if (typeof priorFocusedElem.focus === 'function') {\n      priorFocusedElem.focus();\n    }\n\n    for (var i = 0; i < ancestors.length; i++) {\n      var info = ancestors[i];\n      info.element.scrollLeft = info.left;\n      info.element.scrollTop = info.top;\n    }\n  }\n}\n/**\n * @getSelection: Gets the selection bounds of a focused textarea, input or\n * contentEditable node.\n * -@input: Look up selection bounds of this input\n * -@return {start: selectionStart, end: selectionEnd}\n */\n\nfunction getSelection(input) {\n  var selection;\n\n  if ('selectionStart' in input) {\n    // Modern browser with input or textarea.\n    selection = {\n      start: input.selectionStart,\n      end: input.selectionEnd\n    };\n  } else {\n    // Content editable or old IE textarea.\n    selection = getOffsets(input);\n  }\n\n  return selection || {\n    start: 0,\n    end: 0\n  };\n}\n/**\n * @setSelection: Sets the selection bounds of a textarea or input and focuses\n * the input.\n * -@input     Set selection bounds of this input or textarea\n * -@offsets   Object of same form that is returned from get*\n */\n\nfunction setSelection(input, offsets) {\n  var start = offsets.start;\n  var end = offsets.end;\n\n  if (end === undefined) {\n    end = start;\n  }\n\n  if ('selectionStart' in input) {\n    input.selectionStart = start;\n    input.selectionEnd = Math.min(end, input.value.length);\n  } else {\n    setOffsets(input, offsets);\n  }\n}\n\nvar skipSelectionChangeEvent = canUseDOM && 'documentMode' in document && document.documentMode <= 11;\n\nfunction registerEvents$3() {\n  registerTwoPhaseEvent('onSelect', ['focusout', 'contextmenu', 'dragend', 'focusin', 'keydown', 'keyup', 'mousedown', 'mouseup', 'selectionchange']);\n}\n\nvar activeElement$1 = null;\nvar activeElementInst$1 = null;\nvar lastSelection = null;\nvar mouseDown = false;\n/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n */\n\nfunction getSelection$1(node) {\n  if ('selectionStart' in node && hasSelectionCapabilities(node)) {\n    return {\n      start: node.selectionStart,\n      end: node.selectionEnd\n    };\n  } else {\n    var win = node.ownerDocument && node.ownerDocument.defaultView || window;\n    var selection = win.getSelection();\n    return {\n      anchorNode: selection.anchorNode,\n      anchorOffset: selection.anchorOffset,\n      focusNode: selection.focusNode,\n      focusOffset: selection.focusOffset\n    };\n  }\n}\n/**\n * Get document associated with the event target.\n */\n\n\nfunction getEventTargetDocument(eventTarget) {\n  return eventTarget.window === eventTarget ? eventTarget.document : eventTarget.nodeType === DOCUMENT_NODE ? eventTarget : eventTarget.ownerDocument;\n}\n/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @param {object} nativeEventTarget\n * @return {?SyntheticEvent}\n */\n\n\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n  // Ensure we have the right element, and that the user is not dragging a\n  // selection (this matches native `select` event behavior). In HTML5, select\n  // fires only on input and textarea thus if there's no focused element we\n  // won't dispatch.\n  var doc = getEventTargetDocument(nativeEventTarget);\n\n  if (mouseDown || activeElement$1 == null || activeElement$1 !== getActiveElement(doc)) {\n    return;\n  } // Only fire when selection has actually changed.\n\n\n  var currentSelection = getSelection$1(activeElement$1);\n\n  if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\n    lastSelection = currentSelection;\n    var listeners = accumulateTwoPhaseListeners(activeElementInst$1, 'onSelect');\n\n    if (listeners.length > 0) {\n      var event = new SyntheticEvent('onSelect', 'select', null, nativeEvent, nativeEventTarget);\n      dispatchQueue.push({\n        event: event,\n        listeners: listeners\n      });\n      event.target = activeElement$1;\n    }\n  }\n}\n/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */\n\n\nfunction extractEvents$3(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n  var targetNode = targetInst ? getNodeFromInstance(targetInst) : window;\n\n  switch (domEventName) {\n    // Track the input node that has focus.\n    case 'focusin':\n      if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {\n        activeElement$1 = targetNode;\n        activeElementInst$1 = targetInst;\n        lastSelection = null;\n      }\n\n      break;\n\n    case 'focusout':\n      activeElement$1 = null;\n      activeElementInst$1 = null;\n      lastSelection = null;\n      break;\n    // Don't fire the event while the user is dragging. This matches the\n    // semantics of the native select event.\n\n    case 'mousedown':\n      mouseDown = true;\n      break;\n\n    case 'contextmenu':\n    case 'mouseup':\n    case 'dragend':\n      mouseDown = false;\n      constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n      break;\n    // Chrome and IE fire non-standard event when selection is changed (and\n    // sometimes when it hasn't). IE's event fires out of order with respect\n    // to key and input events on deletion, so we discard it.\n    //\n    // Firefox doesn't support selectionchange, so check selection status\n    // after each key entry. The selection changes after keydown and before\n    // keyup, but we check on keydown as well in the case of holding down a\n    // key, when multiple keydown events are fired but only one keyup is.\n    // This is also our approach for IE handling, for the reason above.\n\n    case 'selectionchange':\n      if (skipSelectionChangeEvent) {\n        break;\n      }\n\n    // falls through\n\n    case 'keydown':\n    case 'keyup':\n      constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n  }\n}\n\n/**\n * Generate a mapping of standard vendor prefixes using the defined style property and event name.\n *\n * @param {string} styleProp\n * @param {string} eventName\n * @returns {object}\n */\n\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes['Webkit' + styleProp] = 'webkit' + eventName;\n  prefixes['Moz' + styleProp] = 'moz' + eventName;\n  return prefixes;\n}\n/**\n * A list of event names to a configurable list of vendor prefixes.\n */\n\n\nvar vendorPrefixes = {\n  animationend: makePrefixMap('Animation', 'AnimationEnd'),\n  animationiteration: makePrefixMap('Animation', 'AnimationIteration'),\n  animationstart: makePrefixMap('Animation', 'AnimationStart'),\n  transitionend: makePrefixMap('Transition', 'TransitionEnd')\n};\n/**\n * Event names that have already been detected and prefixed (if applicable).\n */\n\nvar prefixedEventNames = {};\n/**\n * Element to check for prefixes on.\n */\n\nvar style = {};\n/**\n * Bootstrap if a DOM exists.\n */\n\nif (canUseDOM) {\n  style = document.createElement('div').style; // On some platforms, in particular some releases of Android 4.x,\n  // the un-prefixed \"animation\" and \"transition\" properties are defined on the\n  // style object but the events that fire will still be prefixed, so we need\n  // to check if the un-prefixed events are usable, and if not remove them from the map.\n\n  if (!('AnimationEvent' in window)) {\n    delete vendorPrefixes.animationend.animation;\n    delete vendorPrefixes.animationiteration.animation;\n    delete vendorPrefixes.animationstart.animation;\n  } // Same as above\n\n\n  if (!('TransitionEvent' in window)) {\n    delete vendorPrefixes.transitionend.transition;\n  }\n}\n/**\n * Attempts to determine the correct vendor prefixed event name.\n *\n * @param {string} eventName\n * @returns {string}\n */\n\n\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) {\n    return prefixedEventNames[eventName];\n  } else if (!vendorPrefixes[eventName]) {\n    return eventName;\n  }\n\n  var prefixMap = vendorPrefixes[eventName];\n\n  for (var styleProp in prefixMap) {\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {\n      return prefixedEventNames[eventName] = prefixMap[styleProp];\n    }\n  }\n\n  return eventName;\n}\n\nvar ANIMATION_END = getVendorPrefixedEventName('animationend');\nvar ANIMATION_ITERATION = getVendorPrefixedEventName('animationiteration');\nvar ANIMATION_START = getVendorPrefixedEventName('animationstart');\nvar TRANSITION_END = getVendorPrefixedEventName('transitionend');\n\nvar topLevelEventsToReactNames = new Map(); // NOTE: Capitalization is important in this list!\n//\n// E.g. it needs \"pointerDown\", not \"pointerdown\".\n// This is because we derive both React name (\"onPointerDown\")\n// and DOM name (\"pointerdown\") from the same list.\n//\n// Exceptions that don't match this convention are listed separately.\n//\n// prettier-ignore\n\nvar simpleEventPluginEvents = ['abort', 'auxClick', 'cancel', 'canPlay', 'canPlayThrough', 'click', 'close', 'contextMenu', 'copy', 'cut', 'drag', 'dragEnd', 'dragEnter', 'dragExit', 'dragLeave', 'dragOver', 'dragStart', 'drop', 'durationChange', 'emptied', 'encrypted', 'ended', 'error', 'gotPointerCapture', 'input', 'invalid', 'keyDown', 'keyPress', 'keyUp', 'load', 'loadedData', 'loadedMetadata', 'loadStart', 'lostPointerCapture', 'mouseDown', 'mouseMove', 'mouseOut', 'mouseOver', 'mouseUp', 'paste', 'pause', 'play', 'playing', 'pointerCancel', 'pointerDown', 'pointerMove', 'pointerOut', 'pointerOver', 'pointerUp', 'progress', 'rateChange', 'reset', 'resize', 'seeked', 'seeking', 'stalled', 'submit', 'suspend', 'timeUpdate', 'touchCancel', 'touchEnd', 'touchStart', 'volumeChange', 'scroll', 'toggle', 'touchMove', 'waiting', 'wheel'];\n\nfunction registerSimpleEvent(domEventName, reactName) {\n  topLevelEventsToReactNames.set(domEventName, reactName);\n  registerTwoPhaseEvent(reactName, [domEventName]);\n}\n\nfunction registerSimpleEvents() {\n  for (var i = 0; i < simpleEventPluginEvents.length; i++) {\n    var eventName = simpleEventPluginEvents[i];\n    var domEventName = eventName.toLowerCase();\n    var capitalizedEvent = eventName[0].toUpperCase() + eventName.slice(1);\n    registerSimpleEvent(domEventName, 'on' + capitalizedEvent);\n  } // Special cases where event names don't match.\n\n\n  registerSimpleEvent(ANIMATION_END, 'onAnimationEnd');\n  registerSimpleEvent(ANIMATION_ITERATION, 'onAnimationIteration');\n  registerSimpleEvent(ANIMATION_START, 'onAnimationStart');\n  registerSimpleEvent('dblclick', 'onDoubleClick');\n  registerSimpleEvent('focusin', 'onFocus');\n  registerSimpleEvent('focusout', 'onBlur');\n  registerSimpleEvent(TRANSITION_END, 'onTransitionEnd');\n}\n\nfunction extractEvents$4(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n  var reactName = topLevelEventsToReactNames.get(domEventName);\n\n  if (reactName === undefined) {\n    return;\n  }\n\n  var SyntheticEventCtor = SyntheticEvent;\n  var reactEventType = domEventName;\n\n  switch (domEventName) {\n    case 'keypress':\n      // Firefox creates a keypress event for function keys too. This removes\n      // the unwanted keypress events. Enter is however both printable and\n      // non-printable. One would expect Tab to be as well (but it isn't).\n      if (getEventCharCode(nativeEvent) === 0) {\n        return;\n      }\n\n    /* falls through */\n\n    case 'keydown':\n    case 'keyup':\n      SyntheticEventCtor = SyntheticKeyboardEvent;\n      break;\n\n    case 'focusin':\n      reactEventType = 'focus';\n      SyntheticEventCtor = SyntheticFocusEvent;\n      break;\n\n    case 'focusout':\n      reactEventType = 'blur';\n      SyntheticEventCtor = SyntheticFocusEvent;\n      break;\n\n    case 'beforeblur':\n    case 'afterblur':\n      SyntheticEventCtor = SyntheticFocusEvent;\n      break;\n\n    case 'click':\n      // Firefox creates a click event on right mouse clicks. This removes the\n      // unwanted click events.\n      if (nativeEvent.button === 2) {\n        return;\n      }\n\n    /* falls through */\n\n    case 'auxclick':\n    case 'dblclick':\n    case 'mousedown':\n    case 'mousemove':\n    case 'mouseup': // TODO: Disabled elements should not respond to mouse events\n\n    /* falls through */\n\n    case 'mouseout':\n    case 'mouseover':\n    case 'contextmenu':\n      SyntheticEventCtor = SyntheticMouseEvent;\n      break;\n\n    case 'drag':\n    case 'dragend':\n    case 'dragenter':\n    case 'dragexit':\n    case 'dragleave':\n    case 'dragover':\n    case 'dragstart':\n    case 'drop':\n      SyntheticEventCtor = SyntheticDragEvent;\n      break;\n\n    case 'touchcancel':\n    case 'touchend':\n    case 'touchmove':\n    case 'touchstart':\n      SyntheticEventCtor = SyntheticTouchEvent;\n      break;\n\n    case ANIMATION_END:\n    case ANIMATION_ITERATION:\n    case ANIMATION_START:\n      SyntheticEventCtor = SyntheticAnimationEvent;\n      break;\n\n    case TRANSITION_END:\n      SyntheticEventCtor = SyntheticTransitionEvent;\n      break;\n\n    case 'scroll':\n      SyntheticEventCtor = SyntheticUIEvent;\n      break;\n\n    case 'wheel':\n      SyntheticEventCtor = SyntheticWheelEvent;\n      break;\n\n    case 'copy':\n    case 'cut':\n    case 'paste':\n      SyntheticEventCtor = SyntheticClipboardEvent;\n      break;\n\n    case 'gotpointercapture':\n    case 'lostpointercapture':\n    case 'pointercancel':\n    case 'pointerdown':\n    case 'pointermove':\n    case 'pointerout':\n    case 'pointerover':\n    case 'pointerup':\n      SyntheticEventCtor = SyntheticPointerEvent;\n      break;\n  }\n\n  var inCapturePhase = (eventSystemFlags & IS_CAPTURE_PHASE) !== 0;\n\n  {\n    // Some events don't bubble in the browser.\n    // In the past, React has always bubbled them, but this can be surprising.\n    // We're going to try aligning closer to the browser behavior by not bubbling\n    // them in React either. We'll start by not bubbling onScroll, and then expand.\n    var accumulateTargetOnly = !inCapturePhase && // TODO: ideally, we'd eventually add all events from\n    // nonDelegatedEvents list in DOMPluginEventSystem.\n    // Then we can remove this special list.\n    // This is a breaking change that can wait until React 18.\n    domEventName === 'scroll';\n\n    var _listeners = accumulateSinglePhaseListeners(targetInst, reactName, nativeEvent.type, inCapturePhase, accumulateTargetOnly);\n\n    if (_listeners.length > 0) {\n      // Intentionally create event lazily.\n      var _event = new SyntheticEventCtor(reactName, reactEventType, null, nativeEvent, nativeEventTarget);\n\n      dispatchQueue.push({\n        event: _event,\n        listeners: _listeners\n      });\n    }\n  }\n}\n\n// TODO: remove top-level side effect.\nregisterSimpleEvents();\nregisterEvents$2();\nregisterEvents$1();\nregisterEvents$3();\nregisterEvents();\n\nfunction extractEvents$5(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n  // TODO: we should remove the concept of a \"SimpleEventPlugin\".\n  // This is the basic functionality of the event system. All\n  // the other plugins are essentially polyfills. So the plugin\n  // should probably be inlined somewhere and have its logic\n  // be core the to event system. This would potentially allow\n  // us to ship builds of React without the polyfilled plugins below.\n  extractEvents$4(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);\n  var shouldProcessPolyfillPlugins = (eventSystemFlags & SHOULD_NOT_PROCESS_POLYFILL_EVENT_PLUGINS) === 0; // We don't process these events unless we are in the\n  // event's native \"bubble\" phase, which means that we're\n  // not in the capture phase. That's because we emulate\n  // the capture phase here still. This is a trade-off,\n  // because in an ideal world we would not emulate and use\n  // the phases properly, like we do with the SimpleEvent\n  // plugin. However, the plugins below either expect\n  // emulation (EnterLeave) or use state localized to that\n  // plugin (BeforeInput, Change, Select). The state in\n  // these modules complicates things, as you'll essentially\n  // get the case where the capture phase event might change\n  // state, only for the following bubble event to come in\n  // later and not trigger anything as the state now\n  // invalidates the heuristics of the event plugin. We\n  // could alter all these plugins to work in such ways, but\n  // that might cause other unknown side-effects that we\n  // can't foresee right now.\n\n  if (shouldProcessPolyfillPlugins) {\n    extractEvents$2(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n    extractEvents$1(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n    extractEvents$3(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n    extractEvents(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n  }\n} // List of events that need to be individually attached to media elements.\n\n\nvar mediaEventTypes = ['abort', 'canplay', 'canplaythrough', 'durationchange', 'emptied', 'encrypted', 'ended', 'error', 'loadeddata', 'loadedmetadata', 'loadstart', 'pause', 'play', 'playing', 'progress', 'ratechange', 'resize', 'seeked', 'seeking', 'stalled', 'suspend', 'timeupdate', 'volumechange', 'waiting']; // We should not delegate these events to the container, but rather\n// set them on the actual target element itself. This is primarily\n// because these events do not consistently bubble in the DOM.\n\nvar nonDelegatedEvents = new Set(['cancel', 'close', 'invalid', 'load', 'scroll', 'toggle'].concat(mediaEventTypes));\n\nfunction executeDispatch(event, listener, currentTarget) {\n  var type = event.type || 'unknown-event';\n  event.currentTarget = currentTarget;\n  invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event);\n  event.currentTarget = null;\n}\n\nfunction processDispatchQueueItemsInOrder(event, dispatchListeners, inCapturePhase) {\n  var previousInstance;\n\n  if (inCapturePhase) {\n    for (var i = dispatchListeners.length - 1; i >= 0; i--) {\n      var _dispatchListeners$i = dispatchListeners[i],\n          instance = _dispatchListeners$i.instance,\n          currentTarget = _dispatchListeners$i.currentTarget,\n          listener = _dispatchListeners$i.listener;\n\n      if (instance !== previousInstance && event.isPropagationStopped()) {\n        return;\n      }\n\n      executeDispatch(event, listener, currentTarget);\n      previousInstance = instance;\n    }\n  } else {\n    for (var _i = 0; _i < dispatchListeners.length; _i++) {\n      var _dispatchListeners$_i = dispatchListeners[_i],\n          _instance = _dispatchListeners$_i.instance,\n          _currentTarget = _dispatchListeners$_i.currentTarget,\n          _listener = _dispatchListeners$_i.listener;\n\n      if (_instance !== previousInstance && event.isPropagationStopped()) {\n        return;\n      }\n\n      executeDispatch(event, _listener, _currentTarget);\n      previousInstance = _instance;\n    }\n  }\n}\n\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n  var inCapturePhase = (eventSystemFlags & IS_CAPTURE_PHASE) !== 0;\n\n  for (var i = 0; i < dispatchQueue.length; i++) {\n    var _dispatchQueue$i = dispatchQueue[i],\n        event = _dispatchQueue$i.event,\n        listeners = _dispatchQueue$i.listeners;\n    processDispatchQueueItemsInOrder(event, listeners, inCapturePhase); //  event system doesn't use pooling.\n  } // This would be a good time to rethrow if any of the event handlers threw.\n\n\n  rethrowCaughtError();\n}\n\nfunction dispatchEventsForPlugins(domEventName, eventSystemFlags, nativeEvent, targetInst, targetContainer) {\n  var nativeEventTarget = getEventTarget(nativeEvent);\n  var dispatchQueue = [];\n  extractEvents$5(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);\n  processDispatchQueue(dispatchQueue, eventSystemFlags);\n}\n\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n  {\n    if (!nonDelegatedEvents.has(domEventName)) {\n      error('Did not expect a listenToNonDelegatedEvent() call for \"%s\". ' + 'This is a bug in React. Please file an issue.', domEventName);\n    }\n  }\n\n  var isCapturePhaseListener = false;\n  var listenerSet = getEventListenerSet(targetElement);\n  var listenerSetKey = getListenerSetKey(domEventName, isCapturePhaseListener);\n\n  if (!listenerSet.has(listenerSetKey)) {\n    addTrappedEventListener(targetElement, domEventName, IS_NON_DELEGATED, isCapturePhaseListener);\n    listenerSet.add(listenerSetKey);\n  }\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n  {\n    if (nonDelegatedEvents.has(domEventName) && !isCapturePhaseListener) {\n      error('Did not expect a listenToNativeEvent() call for \"%s\" in the bubble phase. ' + 'This is a bug in React. Please file an issue.', domEventName);\n    }\n  }\n\n  var eventSystemFlags = 0;\n\n  if (isCapturePhaseListener) {\n    eventSystemFlags |= IS_CAPTURE_PHASE;\n  }\n\n  addTrappedEventListener(target, domEventName, eventSystemFlags, isCapturePhaseListener);\n} // This is only used by createEventHandle when the\nvar listeningMarker = '_reactListening' + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n  if (!rootContainerElement[listeningMarker]) {\n    rootContainerElement[listeningMarker] = true;\n    allNativeEvents.forEach(function (domEventName) {\n      // We handle selectionchange separately because it\n      // doesn't bubble and needs to be on the document.\n      if (domEventName !== 'selectionchange') {\n        if (!nonDelegatedEvents.has(domEventName)) {\n          listenToNativeEvent(domEventName, false, rootContainerElement);\n        }\n\n        listenToNativeEvent(domEventName, true, rootContainerElement);\n      }\n    });\n    var ownerDocument = rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;\n\n    if (ownerDocument !== null) {\n      // The selectionchange event also needs deduplication\n      // but it is attached to the document.\n      if (!ownerDocument[listeningMarker]) {\n        ownerDocument[listeningMarker] = true;\n        listenToNativeEvent('selectionchange', false, ownerDocument);\n      }\n    }\n  }\n}\n\nfunction addTrappedEventListener(targetContainer, domEventName, eventSystemFlags, isCapturePhaseListener, isDeferredListenerForLegacyFBSupport) {\n  var listener = createEventListenerWrapperWithPriority(targetContainer, domEventName, eventSystemFlags); // If passive option is not supported, then the event will be\n  // active and not passive.\n\n  var isPassiveListener = undefined;\n\n  if (passiveBrowserEventsSupported) {\n    // Browsers introduced an intervention, making these events\n    // passive by default on document. React doesn't bind them\n    // to document anymore, but changing this now would undo\n    // the performance wins from the change. So we emulate\n    // the existing behavior manually on the roots now.\n    // https://github.com/facebook/react/issues/19651\n    if (domEventName === 'touchstart' || domEventName === 'touchmove' || domEventName === 'wheel') {\n      isPassiveListener = true;\n    }\n  }\n\n  targetContainer =  targetContainer;\n  var unsubscribeListener; // When legacyFBSupport is enabled, it's for when we\n\n\n  if (isCapturePhaseListener) {\n    if (isPassiveListener !== undefined) {\n      unsubscribeListener = addEventCaptureListenerWithPassiveFlag(targetContainer, domEventName, listener, isPassiveListener);\n    } else {\n      unsubscribeListener = addEventCaptureListener(targetContainer, domEventName, listener);\n    }\n  } else {\n    if (isPassiveListener !== undefined) {\n      unsubscribeListener = addEventBubbleListenerWithPassiveFlag(targetContainer, domEventName, listener, isPassiveListener);\n    } else {\n      unsubscribeListener = addEventBubbleListener(targetContainer, domEventName, listener);\n    }\n  }\n}\n\nfunction isMatchingRootContainer(grandContainer, targetContainer) {\n  return grandContainer === targetContainer || grandContainer.nodeType === COMMENT_NODE && grandContainer.parentNode === targetContainer;\n}\n\nfunction dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, targetInst, targetContainer) {\n  var ancestorInst = targetInst;\n\n  if ((eventSystemFlags & IS_EVENT_HANDLE_NON_MANAGED_NODE) === 0 && (eventSystemFlags & IS_NON_DELEGATED) === 0) {\n    var targetContainerNode = targetContainer; // If we are using the legacy FB support flag, we\n\n    if (targetInst !== null) {\n      // The below logic attempts to work out if we need to change\n      // the target fiber to a different ancestor. We had similar logic\n      // in the legacy event system, except the big difference between\n      // systems is that the modern event system now has an event listener\n      // attached to each React Root and React Portal Root. Together,\n      // the DOM nodes representing these roots are the \"rootContainer\".\n      // To figure out which ancestor instance we should use, we traverse\n      // up the fiber tree from the target instance and attempt to find\n      // root boundaries that match that of our current \"rootContainer\".\n      // If we find that \"rootContainer\", we find the parent fiber\n      // sub-tree for that root and make that our ancestor instance.\n      var node = targetInst;\n\n      mainLoop: while (true) {\n        if (node === null) {\n          return;\n        }\n\n        var nodeTag = node.tag;\n\n        if (nodeTag === HostRoot || nodeTag === HostPortal) {\n          var container = node.stateNode.containerInfo;\n\n          if (isMatchingRootContainer(container, targetContainerNode)) {\n            break;\n          }\n\n          if (nodeTag === HostPortal) {\n            // The target is a portal, but it's not the rootContainer we're looking for.\n            // Normally portals handle their own events all the way down to the root.\n            // So we should be able to stop now. However, we don't know if this portal\n            // was part of *our* root.\n            var grandNode = node.return;\n\n            while (grandNode !== null) {\n              var grandTag = grandNode.tag;\n\n              if (grandTag === HostRoot || grandTag === HostPortal) {\n                var grandContainer = grandNode.stateNode.containerInfo;\n\n                if (isMatchingRootContainer(grandContainer, targetContainerNode)) {\n                  // This is the rootContainer we're looking for and we found it as\n                  // a parent of the Portal. That means we can ignore it because the\n                  // Portal will bubble through to us.\n                  return;\n                }\n              }\n\n              grandNode = grandNode.return;\n            }\n          } // Now we need to find it's corresponding host fiber in the other\n          // tree. To do this we can use getClosestInstanceFromNode, but we\n          // need to validate that the fiber is a host instance, otherwise\n          // we need to traverse up through the DOM till we find the correct\n          // node that is from the other tree.\n\n\n          while (container !== null) {\n            var parentNode = getClosestInstanceFromNode(container);\n\n            if (parentNode === null) {\n              return;\n            }\n\n            var parentTag = parentNode.tag;\n\n            if (parentTag === HostComponent || parentTag === HostText) {\n              node = ancestorInst = parentNode;\n              continue mainLoop;\n            }\n\n            container = container.parentNode;\n          }\n        }\n\n        node = node.return;\n      }\n    }\n  }\n\n  batchedUpdates(function () {\n    return dispatchEventsForPlugins(domEventName, eventSystemFlags, nativeEvent, ancestorInst);\n  });\n}\n\nfunction createDispatchListener(instance, listener, currentTarget) {\n  return {\n    instance: instance,\n    listener: listener,\n    currentTarget: currentTarget\n  };\n}\n\nfunction accumulateSinglePhaseListeners(targetFiber, reactName, nativeEventType, inCapturePhase, accumulateTargetOnly, nativeEvent) {\n  var captureName = reactName !== null ? reactName + 'Capture' : null;\n  var reactEventName = inCapturePhase ? captureName : reactName;\n  var listeners = [];\n  var instance = targetFiber;\n  var lastHostComponent = null; // Accumulate all instances and listeners via the target -> root path.\n\n  while (instance !== null) {\n    var _instance2 = instance,\n        stateNode = _instance2.stateNode,\n        tag = _instance2.tag; // Handle listeners that are on HostComponents (i.e. <div>)\n\n    if (tag === HostComponent && stateNode !== null) {\n      lastHostComponent = stateNode; // createEventHandle listeners\n\n\n      if (reactEventName !== null) {\n        var listener = getListener(instance, reactEventName);\n\n        if (listener != null) {\n          listeners.push(createDispatchListener(instance, listener, lastHostComponent));\n        }\n      }\n    } // If we are only accumulating events for the target, then we don't\n    // continue to propagate through the React fiber tree to find other\n    // listeners.\n\n\n    if (accumulateTargetOnly) {\n      break;\n    } // If we are processing the onBeforeBlur event, then we need to take\n\n    instance = instance.return;\n  }\n\n  return listeners;\n} // We should only use this function for:\n// - BeforeInputEventPlugin\n// - ChangeEventPlugin\n// - SelectEventPlugin\n// This is because we only process these plugins\n// in the bubble phase, so we need to accumulate two\n// phase event listeners (via emulation).\n\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n  var captureName = reactName + 'Capture';\n  var listeners = [];\n  var instance = targetFiber; // Accumulate all instances and listeners via the target -> root path.\n\n  while (instance !== null) {\n    var _instance3 = instance,\n        stateNode = _instance3.stateNode,\n        tag = _instance3.tag; // Handle listeners that are on HostComponents (i.e. <div>)\n\n    if (tag === HostComponent && stateNode !== null) {\n      var currentTarget = stateNode;\n      var captureListener = getListener(instance, captureName);\n\n      if (captureListener != null) {\n        listeners.unshift(createDispatchListener(instance, captureListener, currentTarget));\n      }\n\n      var bubbleListener = getListener(instance, reactName);\n\n      if (bubbleListener != null) {\n        listeners.push(createDispatchListener(instance, bubbleListener, currentTarget));\n      }\n    }\n\n    instance = instance.return;\n  }\n\n  return listeners;\n}\n\nfunction getParent(inst) {\n  if (inst === null) {\n    return null;\n  }\n\n  do {\n    inst = inst.return; // TODO: If this is a HostRoot we might want to bail out.\n    // That is depending on if we want nested subtrees (layers) to bubble\n    // events to their parent. We could also go through parentNode on the\n    // host node but that wouldn't work for React Native and doesn't let us\n    // do the portal feature.\n  } while (inst && inst.tag !== HostComponent);\n\n  if (inst) {\n    return inst;\n  }\n\n  return null;\n}\n/**\n * Return the lowest common ancestor of A and B, or null if they are in\n * different trees.\n */\n\n\nfunction getLowestCommonAncestor(instA, instB) {\n  var nodeA = instA;\n  var nodeB = instB;\n  var depthA = 0;\n\n  for (var tempA = nodeA; tempA; tempA = getParent(tempA)) {\n    depthA++;\n  }\n\n  var depthB = 0;\n\n  for (var tempB = nodeB; tempB; tempB = getParent(tempB)) {\n    depthB++;\n  } // If A is deeper, crawl up.\n\n\n  while (depthA - depthB > 0) {\n    nodeA = getParent(nodeA);\n    depthA--;\n  } // If B is deeper, crawl up.\n\n\n  while (depthB - depthA > 0) {\n    nodeB = getParent(nodeB);\n    depthB--;\n  } // Walk in lockstep until we find a match.\n\n\n  var depth = depthA;\n\n  while (depth--) {\n    if (nodeA === nodeB || nodeB !== null && nodeA === nodeB.alternate) {\n      return nodeA;\n    }\n\n    nodeA = getParent(nodeA);\n    nodeB = getParent(nodeB);\n  }\n\n  return null;\n}\n\nfunction accumulateEnterLeaveListenersForEvent(dispatchQueue, event, target, common, inCapturePhase) {\n  var registrationName = event._reactName;\n  var listeners = [];\n  var instance = target;\n\n  while (instance !== null) {\n    if (instance === common) {\n      break;\n    }\n\n    var _instance4 = instance,\n        alternate = _instance4.alternate,\n        stateNode = _instance4.stateNode,\n        tag = _instance4.tag;\n\n    if (alternate !== null && alternate === common) {\n      break;\n    }\n\n    if (tag === HostComponent && stateNode !== null) {\n      var currentTarget = stateNode;\n\n      if (inCapturePhase) {\n        var captureListener = getListener(instance, registrationName);\n\n        if (captureListener != null) {\n          listeners.unshift(createDispatchListener(instance, captureListener, currentTarget));\n        }\n      } else if (!inCapturePhase) {\n        var bubbleListener = getListener(instance, registrationName);\n\n        if (bubbleListener != null) {\n          listeners.push(createDispatchListener(instance, bubbleListener, currentTarget));\n        }\n      }\n    }\n\n    instance = instance.return;\n  }\n\n  if (listeners.length !== 0) {\n    dispatchQueue.push({\n      event: event,\n      listeners: listeners\n    });\n  }\n} // We should only use this function for:\n// - EnterLeaveEventPlugin\n// This is because we only process this plugin\n// in the bubble phase, so we need to accumulate two\n// phase event listeners.\n\n\nfunction accumulateEnterLeaveTwoPhaseListeners(dispatchQueue, leaveEvent, enterEvent, from, to) {\n  var common = from && to ? getLowestCommonAncestor(from, to) : null;\n\n  if (from !== null) {\n    accumulateEnterLeaveListenersForEvent(dispatchQueue, leaveEvent, from, common, false);\n  }\n\n  if (to !== null && enterEvent !== null) {\n    accumulateEnterLeaveListenersForEvent(dispatchQueue, enterEvent, to, common, true);\n  }\n}\nfunction getListenerSetKey(domEventName, capture) {\n  return domEventName + \"__\" + (capture ? 'capture' : 'bubble');\n}\n\nvar didWarnInvalidHydration = false;\nvar DANGEROUSLY_SET_INNER_HTML = 'dangerouslySetInnerHTML';\nvar SUPPRESS_CONTENT_EDITABLE_WARNING = 'suppressContentEditableWarning';\nvar SUPPRESS_HYDRATION_WARNING = 'suppressHydrationWarning';\nvar AUTOFOCUS = 'autoFocus';\nvar CHILDREN = 'children';\nvar STYLE = 'style';\nvar HTML$1 = '__html';\nvar warnedUnknownTags;\nvar validatePropertiesInDevelopment;\nvar warnForPropDifference;\nvar warnForExtraAttributes;\nvar warnForInvalidEventListener;\nvar canDiffStyleForHydrationWarning;\nvar normalizeHTML;\n\n{\n  warnedUnknownTags = {\n    // There are working polyfills for <dialog>. Let people use it.\n    dialog: true,\n    // Electron ships a custom <webview> tag to display external web content in\n    // an isolated frame and process.\n    // This tag is not present in non Electron environments such as JSDom which\n    // is often used for testing purposes.\n    // @see https://electronjs.org/docs/api/webview-tag\n    webview: true\n  };\n\n  validatePropertiesInDevelopment = function (type, props) {\n    validateProperties(type, props);\n    validateProperties$1(type, props);\n    validateProperties$2(type, props, {\n      registrationNameDependencies: registrationNameDependencies,\n      possibleRegistrationNames: possibleRegistrationNames\n    });\n  }; // IE 11 parses & normalizes the style attribute as opposed to other\n  // browsers. It adds spaces and sorts the properties in some\n  // non-alphabetical order. Handling that would require sorting CSS\n  // properties in the client & server versions or applying\n  // `expectedStyle` to a temporary DOM node to read its `style` attribute\n  // normalized. Since it only affects IE, we're skipping style warnings\n  // in that browser completely in favor of doing all that work.\n  // See https://github.com/facebook/react/issues/11807\n\n\n  canDiffStyleForHydrationWarning = canUseDOM && !document.documentMode;\n\n  warnForPropDifference = function (propName, serverValue, clientValue) {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    var normalizedClientValue = normalizeMarkupForTextOrAttribute(clientValue);\n    var normalizedServerValue = normalizeMarkupForTextOrAttribute(serverValue);\n\n    if (normalizedServerValue === normalizedClientValue) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Prop `%s` did not match. Server: %s Client: %s', propName, JSON.stringify(normalizedServerValue), JSON.stringify(normalizedClientValue));\n  };\n\n  warnForExtraAttributes = function (attributeNames) {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n    var names = [];\n    attributeNames.forEach(function (name) {\n      names.push(name);\n    });\n\n    error('Extra attributes from the server: %s', names);\n  };\n\n  warnForInvalidEventListener = function (registrationName, listener) {\n    if (listener === false) {\n      error('Expected `%s` listener to be a function, instead got `false`.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', registrationName, registrationName, registrationName);\n    } else {\n      error('Expected `%s` listener to be a function, instead got a value of `%s` type.', registrationName, typeof listener);\n    }\n  }; // Parse the HTML and read it back to normalize the HTML string so that it\n  // can be used for comparison.\n\n\n  normalizeHTML = function (parent, html) {\n    // We could have created a separate document here to avoid\n    // re-initializing custom elements if they exist. But this breaks\n    // how <noscript> is being handled. So we use the same document.\n    // See the discussion in https://github.com/facebook/react/pull/11157.\n    var testElement = parent.namespaceURI === HTML_NAMESPACE ? parent.ownerDocument.createElement(parent.tagName) : parent.ownerDocument.createElementNS(parent.namespaceURI, parent.tagName);\n    testElement.innerHTML = html;\n    return testElement.innerHTML;\n  };\n} // HTML parsing normalizes CR and CRLF to LF.\n// It also can turn \\u0000 into \\uFFFD inside attributes.\n// https://www.w3.org/TR/html5/single-page.html#preprocessing-the-input-stream\n// If we have a mismatch, it might be caused by that.\n// We will still patch up in this case but not fire the warning.\n\n\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g;\nvar NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\n\nfunction normalizeMarkupForTextOrAttribute(markup) {\n  {\n    checkHtmlStringCoercion(markup);\n  }\n\n  var markupString = typeof markup === 'string' ? markup : '' + markup;\n  return markupString.replace(NORMALIZE_NEWLINES_REGEX, '\\n').replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, '');\n}\n\nfunction checkForUnmatchedText(serverText, clientText, isConcurrentMode, shouldWarnDev) {\n  var normalizedClientText = normalizeMarkupForTextOrAttribute(clientText);\n  var normalizedServerText = normalizeMarkupForTextOrAttribute(serverText);\n\n  if (normalizedServerText === normalizedClientText) {\n    return;\n  }\n\n  if (shouldWarnDev) {\n    {\n      if (!didWarnInvalidHydration) {\n        didWarnInvalidHydration = true;\n\n        error('Text content did not match. Server: \"%s\" Client: \"%s\"', normalizedServerText, normalizedClientText);\n      }\n    }\n  }\n\n  if (isConcurrentMode && enableClientRenderFallbackOnTextMismatch) {\n    // In concurrent roots, we throw when there's a text mismatch and revert to\n    // client rendering, up to the nearest Suspense boundary.\n    throw new Error('Text content does not match server-rendered HTML.');\n  }\n}\n\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n  return rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;\n}\n\nfunction noop() {}\n\nfunction trapClickOnNonInteractiveElement(node) {\n  // Mobile Safari does not fire properly bubble click events on\n  // non-interactive elements, which means delegated click listeners do not\n  // fire. The workaround for this bug involves attaching an empty click\n  // listener on the target node.\n  // https://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n  // Just set it using the onclick property so that we don't have to manage any\n  // bookkeeping for it. Not sure if we need to clear it when the listener is\n  // removed.\n  // TODO: Only do this for the relevant Safaris maybe?\n  node.onclick = noop;\n}\n\nfunction setInitialDOMProperties(tag, domElement, rootContainerElement, nextProps, isCustomComponentTag) {\n  for (var propKey in nextProps) {\n    if (!nextProps.hasOwnProperty(propKey)) {\n      continue;\n    }\n\n    var nextProp = nextProps[propKey];\n\n    if (propKey === STYLE) {\n      {\n        if (nextProp) {\n          // Freeze the next style object so that we can assume it won't be\n          // mutated. We have already warned for this in the past.\n          Object.freeze(nextProp);\n        }\n      } // Relies on `updateStylesByID` not mutating `styleUpdates`.\n\n\n      setValueForStyles(domElement, nextProp);\n    } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n      var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n\n      if (nextHtml != null) {\n        setInnerHTML(domElement, nextHtml);\n      }\n    } else if (propKey === CHILDREN) {\n      if (typeof nextProp === 'string') {\n        // Avoid setting initial textContent when the text is empty. In IE11 setting\n        // textContent on a <textarea> will cause the placeholder to not\n        // show within the <textarea> until it has been focused and blurred again.\n        // https://github.com/facebook/react/issues/6731#issuecomment-254874553\n        var canSetTextContent = tag !== 'textarea' || nextProp !== '';\n\n        if (canSetTextContent) {\n          setTextContent(domElement, nextProp);\n        }\n      } else if (typeof nextProp === 'number') {\n        setTextContent(domElement, '' + nextProp);\n      }\n    } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) {\n      if (nextProp != null) {\n        if ( typeof nextProp !== 'function') {\n          warnForInvalidEventListener(propKey, nextProp);\n        }\n\n        if (propKey === 'onScroll') {\n          listenToNonDelegatedEvent('scroll', domElement);\n        }\n      }\n    } else if (nextProp != null) {\n      setValueForProperty(domElement, propKey, nextProp, isCustomComponentTag);\n    }\n  }\n}\n\nfunction updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag) {\n  // TODO: Handle wasCustomComponentTag\n  for (var i = 0; i < updatePayload.length; i += 2) {\n    var propKey = updatePayload[i];\n    var propValue = updatePayload[i + 1];\n\n    if (propKey === STYLE) {\n      setValueForStyles(domElement, propValue);\n    } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n      setInnerHTML(domElement, propValue);\n    } else if (propKey === CHILDREN) {\n      setTextContent(domElement, propValue);\n    } else {\n      setValueForProperty(domElement, propKey, propValue, isCustomComponentTag);\n    }\n  }\n}\n\nfunction createElement(type, props, rootContainerElement, parentNamespace) {\n  var isCustomComponentTag; // We create tags in the namespace of their parent container, except HTML\n  // tags get no namespace.\n\n  var ownerDocument = getOwnerDocumentFromRootContainer(rootContainerElement);\n  var domElement;\n  var namespaceURI = parentNamespace;\n\n  if (namespaceURI === HTML_NAMESPACE) {\n    namespaceURI = getIntrinsicNamespace(type);\n  }\n\n  if (namespaceURI === HTML_NAMESPACE) {\n    {\n      isCustomComponentTag = isCustomComponent(type, props); // Should this check be gated by parent namespace? Not sure we want to\n      // allow <SVG> or <mATH>.\n\n      if (!isCustomComponentTag && type !== type.toLowerCase()) {\n        error('<%s /> is using incorrect casing. ' + 'Use PascalCase for React components, ' + 'or lowercase for HTML elements.', type);\n      }\n    }\n\n    if (type === 'script') {\n      // Create the script via .innerHTML so its \"parser-inserted\" flag is\n      // set to true and it does not execute\n      var div = ownerDocument.createElement('div');\n\n      div.innerHTML = '<script><' + '/script>'; // eslint-disable-line\n      // This is guaranteed to yield a script element.\n\n      var firstChild = div.firstChild;\n      domElement = div.removeChild(firstChild);\n    } else if (typeof props.is === 'string') {\n      // $FlowIssue `createElement` should be updated for Web Components\n      domElement = ownerDocument.createElement(type, {\n        is: props.is\n      });\n    } else {\n      // Separate else branch instead of using `props.is || undefined` above because of a Firefox bug.\n      // See discussion in https://github.com/facebook/react/pull/6896\n      // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240\n      domElement = ownerDocument.createElement(type); // Normally attributes are assigned in `setInitialDOMProperties`, however the `multiple` and `size`\n      // attributes on `select`s needs to be added before `option`s are inserted.\n      // This prevents:\n      // - a bug where the `select` does not scroll to the correct option because singular\n      //  `select` elements automatically pick the first item #13222\n      // - a bug where the `select` set the first item as selected despite the `size` attribute #14239\n      // See https://github.com/facebook/react/issues/13222\n      // and https://github.com/facebook/react/issues/14239\n\n      if (type === 'select') {\n        var node = domElement;\n\n        if (props.multiple) {\n          node.multiple = true;\n        } else if (props.size) {\n          // Setting a size greater than 1 causes a select to behave like `multiple=true`, where\n          // it is possible that no option is selected.\n          //\n          // This is only necessary when a select in \"single selection mode\".\n          node.size = props.size;\n        }\n      }\n    }\n  } else {\n    domElement = ownerDocument.createElementNS(namespaceURI, type);\n  }\n\n  {\n    if (namespaceURI === HTML_NAMESPACE) {\n      if (!isCustomComponentTag && Object.prototype.toString.call(domElement) === '[object HTMLUnknownElement]' && !hasOwnProperty.call(warnedUnknownTags, type)) {\n        warnedUnknownTags[type] = true;\n\n        error('The tag <%s> is unrecognized in this browser. ' + 'If you meant to render a React component, start its name with ' + 'an uppercase letter.', type);\n      }\n    }\n  }\n\n  return domElement;\n}\nfunction createTextNode(text, rootContainerElement) {\n  return getOwnerDocumentFromRootContainer(rootContainerElement).createTextNode(text);\n}\nfunction setInitialProperties(domElement, tag, rawProps, rootContainerElement) {\n  var isCustomComponentTag = isCustomComponent(tag, rawProps);\n\n  {\n    validatePropertiesInDevelopment(tag, rawProps);\n  } // TODO: Make sure that we check isMounted before firing any of these events.\n\n\n  var props;\n\n  switch (tag) {\n    case 'dialog':\n      listenToNonDelegatedEvent('cancel', domElement);\n      listenToNonDelegatedEvent('close', domElement);\n      props = rawProps;\n      break;\n\n    case 'iframe':\n    case 'object':\n    case 'embed':\n      // We listen to this event in case to ensure emulated bubble\n      // listeners still fire for the load event.\n      listenToNonDelegatedEvent('load', domElement);\n      props = rawProps;\n      break;\n\n    case 'video':\n    case 'audio':\n      // We listen to these events in case to ensure emulated bubble\n      // listeners still fire for all the media events.\n      for (var i = 0; i < mediaEventTypes.length; i++) {\n        listenToNonDelegatedEvent(mediaEventTypes[i], domElement);\n      }\n\n      props = rawProps;\n      break;\n\n    case 'source':\n      // We listen to this event in case to ensure emulated bubble\n      // listeners still fire for the error event.\n      listenToNonDelegatedEvent('error', domElement);\n      props = rawProps;\n      break;\n\n    case 'img':\n    case 'image':\n    case 'link':\n      // We listen to these events in case to ensure emulated bubble\n      // listeners still fire for error and load events.\n      listenToNonDelegatedEvent('error', domElement);\n      listenToNonDelegatedEvent('load', domElement);\n      props = rawProps;\n      break;\n\n    case 'details':\n      // We listen to this event in case to ensure emulated bubble\n      // listeners still fire for the toggle event.\n      listenToNonDelegatedEvent('toggle', domElement);\n      props = rawProps;\n      break;\n\n    case 'input':\n      initWrapperState(domElement, rawProps);\n      props = getHostProps(domElement, rawProps); // We listen to this event in case to ensure emulated bubble\n      // listeners still fire for the invalid event.\n\n      listenToNonDelegatedEvent('invalid', domElement);\n      break;\n\n    case 'option':\n      validateProps(domElement, rawProps);\n      props = rawProps;\n      break;\n\n    case 'select':\n      initWrapperState$1(domElement, rawProps);\n      props = getHostProps$1(domElement, rawProps); // We listen to this event in case to ensure emulated bubble\n      // listeners still fire for the invalid event.\n\n      listenToNonDelegatedEvent('invalid', domElement);\n      break;\n\n    case 'textarea':\n      initWrapperState$2(domElement, rawProps);\n      props = getHostProps$2(domElement, rawProps); // We listen to this event in case to ensure emulated bubble\n      // listeners still fire for the invalid event.\n\n      listenToNonDelegatedEvent('invalid', domElement);\n      break;\n\n    default:\n      props = rawProps;\n  }\n\n  assertValidProps(tag, props);\n  setInitialDOMProperties(tag, domElement, rootContainerElement, props, isCustomComponentTag);\n\n  switch (tag) {\n    case 'input':\n      // TODO: Make sure we check if this is still unmounted or do any clean\n      // up necessary since we never stop tracking anymore.\n      track(domElement);\n      postMountWrapper(domElement, rawProps, false);\n      break;\n\n    case 'textarea':\n      // TODO: Make sure we check if this is still unmounted or do any clean\n      // up necessary since we never stop tracking anymore.\n      track(domElement);\n      postMountWrapper$3(domElement);\n      break;\n\n    case 'option':\n      postMountWrapper$1(domElement, rawProps);\n      break;\n\n    case 'select':\n      postMountWrapper$2(domElement, rawProps);\n      break;\n\n    default:\n      if (typeof props.onClick === 'function') {\n        // TODO: This cast may not be sound for SVG, MathML or custom elements.\n        trapClickOnNonInteractiveElement(domElement);\n      }\n\n      break;\n  }\n} // Calculate the diff between the two objects.\n\nfunction diffProperties(domElement, tag, lastRawProps, nextRawProps, rootContainerElement) {\n  {\n    validatePropertiesInDevelopment(tag, nextRawProps);\n  }\n\n  var updatePayload = null;\n  var lastProps;\n  var nextProps;\n\n  switch (tag) {\n    case 'input':\n      lastProps = getHostProps(domElement, lastRawProps);\n      nextProps = getHostProps(domElement, nextRawProps);\n      updatePayload = [];\n      break;\n\n    case 'select':\n      lastProps = getHostProps$1(domElement, lastRawProps);\n      nextProps = getHostProps$1(domElement, nextRawProps);\n      updatePayload = [];\n      break;\n\n    case 'textarea':\n      lastProps = getHostProps$2(domElement, lastRawProps);\n      nextProps = getHostProps$2(domElement, nextRawProps);\n      updatePayload = [];\n      break;\n\n    default:\n      lastProps = lastRawProps;\n      nextProps = nextRawProps;\n\n      if (typeof lastProps.onClick !== 'function' && typeof nextProps.onClick === 'function') {\n        // TODO: This cast may not be sound for SVG, MathML or custom elements.\n        trapClickOnNonInteractiveElement(domElement);\n      }\n\n      break;\n  }\n\n  assertValidProps(tag, nextProps);\n  var propKey;\n  var styleName;\n  var styleUpdates = null;\n\n  for (propKey in lastProps) {\n    if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {\n      continue;\n    }\n\n    if (propKey === STYLE) {\n      var lastStyle = lastProps[propKey];\n\n      for (styleName in lastStyle) {\n        if (lastStyle.hasOwnProperty(styleName)) {\n          if (!styleUpdates) {\n            styleUpdates = {};\n          }\n\n          styleUpdates[styleName] = '';\n        }\n      }\n    } else if (propKey === DANGEROUSLY_SET_INNER_HTML || propKey === CHILDREN) ; else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) {\n      // This is a special case. If any listener updates we need to ensure\n      // that the \"current\" fiber pointer gets updated so we need a commit\n      // to update this element.\n      if (!updatePayload) {\n        updatePayload = [];\n      }\n    } else {\n      // For all other deleted properties we add it to the queue. We use\n      // the allowed property list in the commit phase instead.\n      (updatePayload = updatePayload || []).push(propKey, null);\n    }\n  }\n\n  for (propKey in nextProps) {\n    var nextProp = nextProps[propKey];\n    var lastProp = lastProps != null ? lastProps[propKey] : undefined;\n\n    if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {\n      continue;\n    }\n\n    if (propKey === STYLE) {\n      {\n        if (nextProp) {\n          // Freeze the next style object so that we can assume it won't be\n          // mutated. We have already warned for this in the past.\n          Object.freeze(nextProp);\n        }\n      }\n\n      if (lastProp) {\n        // Unset styles on `lastProp` but not on `nextProp`.\n        for (styleName in lastProp) {\n          if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {\n            if (!styleUpdates) {\n              styleUpdates = {};\n            }\n\n            styleUpdates[styleName] = '';\n          }\n        } // Update styles that changed since `lastProp`.\n\n\n        for (styleName in nextProp) {\n          if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {\n            if (!styleUpdates) {\n              styleUpdates = {};\n            }\n\n            styleUpdates[styleName] = nextProp[styleName];\n          }\n        }\n      } else {\n        // Relies on `updateStylesByID` not mutating `styleUpdates`.\n        if (!styleUpdates) {\n          if (!updatePayload) {\n            updatePayload = [];\n          }\n\n          updatePayload.push(propKey, styleUpdates);\n        }\n\n        styleUpdates = nextProp;\n      }\n    } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n      var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n      var lastHtml = lastProp ? lastProp[HTML$1] : undefined;\n\n      if (nextHtml != null) {\n        if (lastHtml !== nextHtml) {\n          (updatePayload = updatePayload || []).push(propKey, nextHtml);\n        }\n      }\n    } else if (propKey === CHILDREN) {\n      if (typeof nextProp === 'string' || typeof nextProp === 'number') {\n        (updatePayload = updatePayload || []).push(propKey, '' + nextProp);\n      }\n    } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) {\n      if (nextProp != null) {\n        // We eagerly listen to this even though we haven't committed yet.\n        if ( typeof nextProp !== 'function') {\n          warnForInvalidEventListener(propKey, nextProp);\n        }\n\n        if (propKey === 'onScroll') {\n          listenToNonDelegatedEvent('scroll', domElement);\n        }\n      }\n\n      if (!updatePayload && lastProp !== nextProp) {\n        // This is a special case. If any listener updates we need to ensure\n        // that the \"current\" props pointer gets updated so we need a commit\n        // to update this element.\n        updatePayload = [];\n      }\n    } else {\n      // For any other property we always add it to the queue and then we\n      // filter it out using the allowed property list during the commit.\n      (updatePayload = updatePayload || []).push(propKey, nextProp);\n    }\n  }\n\n  if (styleUpdates) {\n    {\n      validateShorthandPropertyCollisionInDev(styleUpdates, nextProps[STYLE]);\n    }\n\n    (updatePayload = updatePayload || []).push(STYLE, styleUpdates);\n  }\n\n  return updatePayload;\n} // Apply the diff.\n\nfunction updateProperties(domElement, updatePayload, tag, lastRawProps, nextRawProps) {\n  // Update checked *before* name.\n  // In the middle of an update, it is possible to have multiple checked.\n  // When a checked radio tries to change name, browser makes another radio's checked false.\n  if (tag === 'input' && nextRawProps.type === 'radio' && nextRawProps.name != null) {\n    updateChecked(domElement, nextRawProps);\n  }\n\n  var wasCustomComponentTag = isCustomComponent(tag, lastRawProps);\n  var isCustomComponentTag = isCustomComponent(tag, nextRawProps); // Apply the diff.\n\n  updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag); // TODO: Ensure that an update gets scheduled if any of the special props\n  // changed.\n\n  switch (tag) {\n    case 'input':\n      // Update the wrapper around inputs *after* updating props. This has to\n      // happen after `updateDOMProperties`. Otherwise HTML5 input validations\n      // raise warnings and prevent the new value from being assigned.\n      updateWrapper(domElement, nextRawProps);\n      break;\n\n    case 'textarea':\n      updateWrapper$1(domElement, nextRawProps);\n      break;\n\n    case 'select':\n      // <select> value update needs to occur after <option> children\n      // reconciliation\n      postUpdateWrapper(domElement, nextRawProps);\n      break;\n  }\n}\n\nfunction getPossibleStandardName(propName) {\n  {\n    var lowerCasedName = propName.toLowerCase();\n\n    if (!possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n      return null;\n    }\n\n    return possibleStandardNames[lowerCasedName] || null;\n  }\n}\n\nfunction diffHydratedProperties(domElement, tag, rawProps, parentNamespace, rootContainerElement, isConcurrentMode, shouldWarnDev) {\n  var isCustomComponentTag;\n  var extraAttributeNames;\n\n  {\n    isCustomComponentTag = isCustomComponent(tag, rawProps);\n    validatePropertiesInDevelopment(tag, rawProps);\n  } // TODO: Make sure that we check isMounted before firing any of these events.\n\n\n  switch (tag) {\n    case 'dialog':\n      listenToNonDelegatedEvent('cancel', domElement);\n      listenToNonDelegatedEvent('close', domElement);\n      break;\n\n    case 'iframe':\n    case 'object':\n    case 'embed':\n      // We listen to this event in case to ensure emulated bubble\n      // listeners still fire for the load event.\n      listenToNonDelegatedEvent('load', domElement);\n      break;\n\n    case 'video':\n    case 'audio':\n      // We listen to these events in case to ensure emulated bubble\n      // listeners still fire for all the media events.\n      for (var i = 0; i < mediaEventTypes.length; i++) {\n        listenToNonDelegatedEvent(mediaEventTypes[i], domElement);\n      }\n\n      break;\n\n    case 'source':\n      // We listen to this event in case to ensure emulated bubble\n      // listeners still fire for the error event.\n      listenToNonDelegatedEvent('error', domElement);\n      break;\n\n    case 'img':\n    case 'image':\n    case 'link':\n      // We listen to these events in case to ensure emulated bubble\n      // listeners still fire for error and load events.\n      listenToNonDelegatedEvent('error', domElement);\n      listenToNonDelegatedEvent('load', domElement);\n      break;\n\n    case 'details':\n      // We listen to this event in case to ensure emulated bubble\n      // listeners still fire for the toggle event.\n      listenToNonDelegatedEvent('toggle', domElement);\n      break;\n\n    case 'input':\n      initWrapperState(domElement, rawProps); // We listen to this event in case to ensure emulated bubble\n      // listeners still fire for the invalid event.\n\n      listenToNonDelegatedEvent('invalid', domElement);\n      break;\n\n    case 'option':\n      validateProps(domElement, rawProps);\n      break;\n\n    case 'select':\n      initWrapperState$1(domElement, rawProps); // We listen to this event in case to ensure emulated bubble\n      // listeners still fire for the invalid event.\n\n      listenToNonDelegatedEvent('invalid', domElement);\n      break;\n\n    case 'textarea':\n      initWrapperState$2(domElement, rawProps); // We listen to this event in case to ensure emulated bubble\n      // listeners still fire for the invalid event.\n\n      listenToNonDelegatedEvent('invalid', domElement);\n      break;\n  }\n\n  assertValidProps(tag, rawProps);\n\n  {\n    extraAttributeNames = new Set();\n    var attributes = domElement.attributes;\n\n    for (var _i = 0; _i < attributes.length; _i++) {\n      var name = attributes[_i].name.toLowerCase();\n\n      switch (name) {\n        // Controlled attributes are not validated\n        // TODO: Only ignore them on controlled tags.\n        case 'value':\n          break;\n\n        case 'checked':\n          break;\n\n        case 'selected':\n          break;\n\n        default:\n          // Intentionally use the original name.\n          // See discussion in https://github.com/facebook/react/pull/10676.\n          extraAttributeNames.add(attributes[_i].name);\n      }\n    }\n  }\n\n  var updatePayload = null;\n\n  for (var propKey in rawProps) {\n    if (!rawProps.hasOwnProperty(propKey)) {\n      continue;\n    }\n\n    var nextProp = rawProps[propKey];\n\n    if (propKey === CHILDREN) {\n      // For text content children we compare against textContent. This\n      // might match additional HTML that is hidden when we read it using\n      // textContent. E.g. \"foo\" will match \"f<span>oo</span>\" but that still\n      // satisfies our requirement. Our requirement is not to produce perfect\n      // HTML and attributes. Ideally we should preserve structure but it's\n      // ok not to if the visible content is still enough to indicate what\n      // even listeners these nodes might be wired up to.\n      // TODO: Warn if there is more than a single textNode as a child.\n      // TODO: Should we use domElement.firstChild.nodeValue to compare?\n      if (typeof nextProp === 'string') {\n        if (domElement.textContent !== nextProp) {\n          if (rawProps[SUPPRESS_HYDRATION_WARNING] !== true) {\n            checkForUnmatchedText(domElement.textContent, nextProp, isConcurrentMode, shouldWarnDev);\n          }\n\n          updatePayload = [CHILDREN, nextProp];\n        }\n      } else if (typeof nextProp === 'number') {\n        if (domElement.textContent !== '' + nextProp) {\n          if (rawProps[SUPPRESS_HYDRATION_WARNING] !== true) {\n            checkForUnmatchedText(domElement.textContent, nextProp, isConcurrentMode, shouldWarnDev);\n          }\n\n          updatePayload = [CHILDREN, '' + nextProp];\n        }\n      }\n    } else if (registrationNameDependencies.hasOwnProperty(propKey)) {\n      if (nextProp != null) {\n        if ( typeof nextProp !== 'function') {\n          warnForInvalidEventListener(propKey, nextProp);\n        }\n\n        if (propKey === 'onScroll') {\n          listenToNonDelegatedEvent('scroll', domElement);\n        }\n      }\n    } else if (shouldWarnDev && true && // Convince Flow we've calculated it (it's DEV-only in this method.)\n    typeof isCustomComponentTag === 'boolean') {\n      // Validate that the properties correspond to their expected values.\n      var serverValue = void 0;\n      var propertyInfo = isCustomComponentTag && enableCustomElementPropertySupport ? null : getPropertyInfo(propKey);\n\n      if (rawProps[SUPPRESS_HYDRATION_WARNING] === true) ; else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING || // Controlled attributes are not validated\n      // TODO: Only ignore them on controlled tags.\n      propKey === 'value' || propKey === 'checked' || propKey === 'selected') ; else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n        var serverHTML = domElement.innerHTML;\n        var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n\n        if (nextHtml != null) {\n          var expectedHTML = normalizeHTML(domElement, nextHtml);\n\n          if (expectedHTML !== serverHTML) {\n            warnForPropDifference(propKey, serverHTML, expectedHTML);\n          }\n        }\n      } else if (propKey === STYLE) {\n        // $FlowFixMe - Should be inferred as not undefined.\n        extraAttributeNames.delete(propKey);\n\n        if (canDiffStyleForHydrationWarning) {\n          var expectedStyle = createDangerousStringForStyles(nextProp);\n          serverValue = domElement.getAttribute('style');\n\n          if (expectedStyle !== serverValue) {\n            warnForPropDifference(propKey, serverValue, expectedStyle);\n          }\n        }\n      } else if (isCustomComponentTag && !enableCustomElementPropertySupport) {\n        // $FlowFixMe - Should be inferred as not undefined.\n        extraAttributeNames.delete(propKey.toLowerCase());\n        serverValue = getValueForAttribute(domElement, propKey, nextProp);\n\n        if (nextProp !== serverValue) {\n          warnForPropDifference(propKey, serverValue, nextProp);\n        }\n      } else if (!shouldIgnoreAttribute(propKey, propertyInfo, isCustomComponentTag) && !shouldRemoveAttribute(propKey, nextProp, propertyInfo, isCustomComponentTag)) {\n        var isMismatchDueToBadCasing = false;\n\n        if (propertyInfo !== null) {\n          // $FlowFixMe - Should be inferred as not undefined.\n          extraAttributeNames.delete(propertyInfo.attributeName);\n          serverValue = getValueForProperty(domElement, propKey, nextProp, propertyInfo);\n        } else {\n          var ownNamespace = parentNamespace;\n\n          if (ownNamespace === HTML_NAMESPACE) {\n            ownNamespace = getIntrinsicNamespace(tag);\n          }\n\n          if (ownNamespace === HTML_NAMESPACE) {\n            // $FlowFixMe - Should be inferred as not undefined.\n            extraAttributeNames.delete(propKey.toLowerCase());\n          } else {\n            var standardName = getPossibleStandardName(propKey);\n\n            if (standardName !== null && standardName !== propKey) {\n              // If an SVG prop is supplied with bad casing, it will\n              // be successfully parsed from HTML, but will produce a mismatch\n              // (and would be incorrectly rendered on the client).\n              // However, we already warn about bad casing elsewhere.\n              // So we'll skip the misleading extra mismatch warning in this case.\n              isMismatchDueToBadCasing = true; // $FlowFixMe - Should be inferred as not undefined.\n\n              extraAttributeNames.delete(standardName);\n            } // $FlowFixMe - Should be inferred as not undefined.\n\n\n            extraAttributeNames.delete(propKey);\n          }\n\n          serverValue = getValueForAttribute(domElement, propKey, nextProp);\n        }\n\n        var dontWarnCustomElement = enableCustomElementPropertySupport  ;\n\n        if (!dontWarnCustomElement && nextProp !== serverValue && !isMismatchDueToBadCasing) {\n          warnForPropDifference(propKey, serverValue, nextProp);\n        }\n      }\n    }\n  }\n\n  {\n    if (shouldWarnDev) {\n      if ( // $FlowFixMe - Should be inferred as not undefined.\n      extraAttributeNames.size > 0 && rawProps[SUPPRESS_HYDRATION_WARNING] !== true) {\n        // $FlowFixMe - Should be inferred as not undefined.\n        warnForExtraAttributes(extraAttributeNames);\n      }\n    }\n  }\n\n  switch (tag) {\n    case 'input':\n      // TODO: Make sure we check if this is still unmounted or do any clean\n      // up necessary since we never stop tracking anymore.\n      track(domElement);\n      postMountWrapper(domElement, rawProps, true);\n      break;\n\n    case 'textarea':\n      // TODO: Make sure we check if this is still unmounted or do any clean\n      // up necessary since we never stop tracking anymore.\n      track(domElement);\n      postMountWrapper$3(domElement);\n      break;\n\n    case 'select':\n    case 'option':\n      // For input and textarea we current always set the value property at\n      // post mount to force it to diverge from attributes. However, for\n      // option and select we don't quite do the same thing and select\n      // is not resilient to the DOM state changing so we don't do that here.\n      // TODO: Consider not doing this for input and textarea.\n      break;\n\n    default:\n      if (typeof rawProps.onClick === 'function') {\n        // TODO: This cast may not be sound for SVG, MathML or custom elements.\n        trapClickOnNonInteractiveElement(domElement);\n      }\n\n      break;\n  }\n\n  return updatePayload;\n}\nfunction diffHydratedText(textNode, text, isConcurrentMode) {\n  var isDifferent = textNode.nodeValue !== text;\n  return isDifferent;\n}\nfunction warnForDeletedHydratableElement(parentNode, child) {\n  {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Did not expect server HTML to contain a <%s> in <%s>.', child.nodeName.toLowerCase(), parentNode.nodeName.toLowerCase());\n  }\n}\nfunction warnForDeletedHydratableText(parentNode, child) {\n  {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Did not expect server HTML to contain the text node \"%s\" in <%s>.', child.nodeValue, parentNode.nodeName.toLowerCase());\n  }\n}\nfunction warnForInsertedHydratedElement(parentNode, tag, props) {\n  {\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Expected server HTML to contain a matching <%s> in <%s>.', tag, parentNode.nodeName.toLowerCase());\n  }\n}\nfunction warnForInsertedHydratedText(parentNode, text) {\n  {\n    if (text === '') {\n      // We expect to insert empty text nodes since they're not represented in\n      // the HTML.\n      // TODO: Remove this special case if we can just avoid inserting empty\n      // text nodes.\n      return;\n    }\n\n    if (didWarnInvalidHydration) {\n      return;\n    }\n\n    didWarnInvalidHydration = true;\n\n    error('Expected server HTML to contain a matching text node for \"%s\" in <%s>.', text, parentNode.nodeName.toLowerCase());\n  }\n}\nfunction restoreControlledState$3(domElement, tag, props) {\n  switch (tag) {\n    case 'input':\n      restoreControlledState(domElement, props);\n      return;\n\n    case 'textarea':\n      restoreControlledState$2(domElement, props);\n      return;\n\n    case 'select':\n      restoreControlledState$1(domElement, props);\n      return;\n  }\n}\n\nvar validateDOMNesting = function () {};\n\nvar updatedAncestorInfo = function () {};\n\n{\n  // This validation code was written based on the HTML5 parsing spec:\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n  //\n  // Note: this does not catch all invalid nesting, nor does it try to (as it's\n  // not clear what practical benefit doing so provides); instead, we warn only\n  // for cases where the parser will give a parse tree differing from what React\n  // intended. For example, <b><div></div></b> is invalid but we don't warn\n  // because it still parses correctly; we do warn for other cases like nested\n  // <p> tags where the beginning of the second element implicitly closes the\n  // first, causing a confusing mess.\n  // https://html.spec.whatwg.org/multipage/syntax.html#special\n  var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n\n  var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template', // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n  // TODO: Distinguish by namespace here -- for <title>, including it here\n  // errs on the side of fewer warnings\n  'foreignObject', 'desc', 'title']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n\n  var buttonScopeTags = inScopeTags.concat(['button']); // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n\n  var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\n  var emptyAncestorInfo = {\n    current: null,\n    formTag: null,\n    aTagInScope: null,\n    buttonTagInScope: null,\n    nobrTagInScope: null,\n    pTagInButtonScope: null,\n    listItemTagAutoclosing: null,\n    dlItemTagAutoclosing: null\n  };\n\n  updatedAncestorInfo = function (oldInfo, tag) {\n    var ancestorInfo = assign({}, oldInfo || emptyAncestorInfo);\n\n    var info = {\n      tag: tag\n    };\n\n    if (inScopeTags.indexOf(tag) !== -1) {\n      ancestorInfo.aTagInScope = null;\n      ancestorInfo.buttonTagInScope = null;\n      ancestorInfo.nobrTagInScope = null;\n    }\n\n    if (buttonScopeTags.indexOf(tag) !== -1) {\n      ancestorInfo.pTagInButtonScope = null;\n    } // See rules for 'li', 'dd', 'dt' start tags in\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n\n\n    if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n      ancestorInfo.listItemTagAutoclosing = null;\n      ancestorInfo.dlItemTagAutoclosing = null;\n    }\n\n    ancestorInfo.current = info;\n\n    if (tag === 'form') {\n      ancestorInfo.formTag = info;\n    }\n\n    if (tag === 'a') {\n      ancestorInfo.aTagInScope = info;\n    }\n\n    if (tag === 'button') {\n      ancestorInfo.buttonTagInScope = info;\n    }\n\n    if (tag === 'nobr') {\n      ancestorInfo.nobrTagInScope = info;\n    }\n\n    if (tag === 'p') {\n      ancestorInfo.pTagInButtonScope = info;\n    }\n\n    if (tag === 'li') {\n      ancestorInfo.listItemTagAutoclosing = info;\n    }\n\n    if (tag === 'dd' || tag === 'dt') {\n      ancestorInfo.dlItemTagAutoclosing = info;\n    }\n\n    return ancestorInfo;\n  };\n  /**\n   * Returns whether\n   */\n\n\n  var isTagValidWithParent = function (tag, parentTag) {\n    // First, let's check if we're in an unusual parsing mode...\n    switch (parentTag) {\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n      case 'select':\n        return tag === 'option' || tag === 'optgroup' || tag === '#text';\n\n      case 'optgroup':\n        return tag === 'option' || tag === '#text';\n      // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n      // but\n\n      case 'option':\n        return tag === '#text';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n      // No special behavior since these rules fall back to \"in body\" mode for\n      // all except special table nodes which cause bad parsing behavior anyway.\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n\n      case 'tr':\n        return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n\n      case 'tbody':\n      case 'thead':\n      case 'tfoot':\n        return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n\n      case 'colgroup':\n        return tag === 'col' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n\n      case 'table':\n        return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n\n      case 'head':\n        return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n\n      case 'html':\n        return tag === 'head' || tag === 'body' || tag === 'frameset';\n\n      case 'frameset':\n        return tag === 'frame';\n\n      case '#document':\n        return tag === 'html';\n    } // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n    // where the parsing rules cause implicit opens or closes to be added.\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n\n\n    switch (tag) {\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n      case 'rp':\n      case 'rt':\n        return impliedEndTags.indexOf(parentTag) === -1;\n\n      case 'body':\n      case 'caption':\n      case 'col':\n      case 'colgroup':\n      case 'frameset':\n      case 'frame':\n      case 'head':\n      case 'html':\n      case 'tbody':\n      case 'td':\n      case 'tfoot':\n      case 'th':\n      case 'thead':\n      case 'tr':\n        // These tags are only valid with a few parents that have special child\n        // parsing rules -- if we're down here, then none of those matched and\n        // so we allow it only if we don't know what the parent is, as all other\n        // cases are invalid.\n        return parentTag == null;\n    }\n\n    return true;\n  };\n  /**\n   * Returns whether\n   */\n\n\n  var findInvalidAncestorForTag = function (tag, ancestorInfo) {\n    switch (tag) {\n      case 'address':\n      case 'article':\n      case 'aside':\n      case 'blockquote':\n      case 'center':\n      case 'details':\n      case 'dialog':\n      case 'dir':\n      case 'div':\n      case 'dl':\n      case 'fieldset':\n      case 'figcaption':\n      case 'figure':\n      case 'footer':\n      case 'header':\n      case 'hgroup':\n      case 'main':\n      case 'menu':\n      case 'nav':\n      case 'ol':\n      case 'p':\n      case 'section':\n      case 'summary':\n      case 'ul':\n      case 'pre':\n      case 'listing':\n      case 'table':\n      case 'hr':\n      case 'xmp':\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return ancestorInfo.pTagInButtonScope;\n\n      case 'form':\n        return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n      case 'li':\n        return ancestorInfo.listItemTagAutoclosing;\n\n      case 'dd':\n      case 'dt':\n        return ancestorInfo.dlItemTagAutoclosing;\n\n      case 'button':\n        return ancestorInfo.buttonTagInScope;\n\n      case 'a':\n        // Spec says something about storing a list of markers, but it sounds\n        // equivalent to this check.\n        return ancestorInfo.aTagInScope;\n\n      case 'nobr':\n        return ancestorInfo.nobrTagInScope;\n    }\n\n    return null;\n  };\n\n  var didWarn$1 = {};\n\n  validateDOMNesting = function (childTag, childText, ancestorInfo) {\n    ancestorInfo = ancestorInfo || emptyAncestorInfo;\n    var parentInfo = ancestorInfo.current;\n    var parentTag = parentInfo && parentInfo.tag;\n\n    if (childText != null) {\n      if (childTag != null) {\n        error('validateDOMNesting: when childText is passed, childTag should be null');\n      }\n\n      childTag = '#text';\n    }\n\n    var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n    var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n    var invalidParentOrAncestor = invalidParent || invalidAncestor;\n\n    if (!invalidParentOrAncestor) {\n      return;\n    }\n\n    var ancestorTag = invalidParentOrAncestor.tag;\n    var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag;\n\n    if (didWarn$1[warnKey]) {\n      return;\n    }\n\n    didWarn$1[warnKey] = true;\n    var tagDisplayName = childTag;\n    var whitespaceInfo = '';\n\n    if (childTag === '#text') {\n      if (/\\S/.test(childText)) {\n        tagDisplayName = 'Text nodes';\n      } else {\n        tagDisplayName = 'Whitespace text nodes';\n        whitespaceInfo = \" Make sure you don't have any extra whitespace between tags on \" + 'each line of your source code.';\n      }\n    } else {\n      tagDisplayName = '<' + childTag + '>';\n    }\n\n    if (invalidParent) {\n      var info = '';\n\n      if (ancestorTag === 'table' && childTag === 'tr') {\n        info += ' Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by ' + 'the browser.';\n      }\n\n      error('validateDOMNesting(...): %s cannot appear as a child of <%s>.%s%s', tagDisplayName, ancestorTag, whitespaceInfo, info);\n    } else {\n      error('validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>.', tagDisplayName, ancestorTag);\n    }\n  };\n}\n\nvar SUPPRESS_HYDRATION_WARNING$1 = 'suppressHydrationWarning';\nvar SUSPENSE_START_DATA = '$';\nvar SUSPENSE_END_DATA = '/$';\nvar SUSPENSE_PENDING_START_DATA = '$?';\nvar SUSPENSE_FALLBACK_START_DATA = '$!';\nvar STYLE$1 = 'style';\nvar eventsEnabled = null;\nvar selectionInformation = null;\nfunction getRootHostContext(rootContainerInstance) {\n  var type;\n  var namespace;\n  var nodeType = rootContainerInstance.nodeType;\n\n  switch (nodeType) {\n    case DOCUMENT_NODE:\n    case DOCUMENT_FRAGMENT_NODE:\n      {\n        type = nodeType === DOCUMENT_NODE ? '#document' : '#fragment';\n        var root = rootContainerInstance.documentElement;\n        namespace = root ? root.namespaceURI : getChildNamespace(null, '');\n        break;\n      }\n\n    default:\n      {\n        var container = nodeType === COMMENT_NODE ? rootContainerInstance.parentNode : rootContainerInstance;\n        var ownNamespace = container.namespaceURI || null;\n        type = container.tagName;\n        namespace = getChildNamespace(ownNamespace, type);\n        break;\n      }\n  }\n\n  {\n    var validatedTag = type.toLowerCase();\n    var ancestorInfo = updatedAncestorInfo(null, validatedTag);\n    return {\n      namespace: namespace,\n      ancestorInfo: ancestorInfo\n    };\n  }\n}\nfunction getChildHostContext(parentHostContext, type, rootContainerInstance) {\n  {\n    var parentHostContextDev = parentHostContext;\n    var namespace = getChildNamespace(parentHostContextDev.namespace, type);\n    var ancestorInfo = updatedAncestorInfo(parentHostContextDev.ancestorInfo, type);\n    return {\n      namespace: namespace,\n      ancestorInfo: ancestorInfo\n    };\n  }\n}\nfunction getPublicInstance(instance) {\n  return instance;\n}\nfunction prepareForCommit(containerInfo) {\n  eventsEnabled = isEnabled();\n  selectionInformation = getSelectionInformation();\n  var activeInstance = null;\n\n  setEnabled(false);\n  return activeInstance;\n}\nfunction resetAfterCommit(containerInfo) {\n  restoreSelection(selectionInformation);\n  setEnabled(eventsEnabled);\n  eventsEnabled = null;\n  selectionInformation = null;\n}\nfunction createInstance(type, props, rootContainerInstance, hostContext, internalInstanceHandle) {\n  var parentNamespace;\n\n  {\n    // TODO: take namespace into account when validating.\n    var hostContextDev = hostContext;\n    validateDOMNesting(type, null, hostContextDev.ancestorInfo);\n\n    if (typeof props.children === 'string' || typeof props.children === 'number') {\n      var string = '' + props.children;\n      var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);\n      validateDOMNesting(null, string, ownAncestorInfo);\n    }\n\n    parentNamespace = hostContextDev.namespace;\n  }\n\n  var domElement = createElement(type, props, rootContainerInstance, parentNamespace);\n  precacheFiberNode(internalInstanceHandle, domElement);\n  updateFiberProps(domElement, props);\n  return domElement;\n}\nfunction appendInitialChild(parentInstance, child) {\n  parentInstance.appendChild(child);\n}\nfunction finalizeInitialChildren(domElement, type, props, rootContainerInstance, hostContext) {\n  setInitialProperties(domElement, type, props, rootContainerInstance);\n\n  switch (type) {\n    case 'button':\n    case 'input':\n    case 'select':\n    case 'textarea':\n      return !!props.autoFocus;\n\n    case 'img':\n      return true;\n\n    default:\n      return false;\n  }\n}\nfunction prepareUpdate(domElement, type, oldProps, newProps, rootContainerInstance, hostContext) {\n  {\n    var hostContextDev = hostContext;\n\n    if (typeof newProps.children !== typeof oldProps.children && (typeof newProps.children === 'string' || typeof newProps.children === 'number')) {\n      var string = '' + newProps.children;\n      var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);\n      validateDOMNesting(null, string, ownAncestorInfo);\n    }\n  }\n\n  return diffProperties(domElement, type, oldProps, newProps);\n}\nfunction shouldSetTextContent(type, props) {\n  return type === 'textarea' || type === 'noscript' || typeof props.children === 'string' || typeof props.children === 'number' || typeof props.dangerouslySetInnerHTML === 'object' && props.dangerouslySetInnerHTML !== null && props.dangerouslySetInnerHTML.__html != null;\n}\nfunction createTextInstance(text, rootContainerInstance, hostContext, internalInstanceHandle) {\n  {\n    var hostContextDev = hostContext;\n    validateDOMNesting(null, text, hostContextDev.ancestorInfo);\n  }\n\n  var textNode = createTextNode(text, rootContainerInstance);\n  precacheFiberNode(internalInstanceHandle, textNode);\n  return textNode;\n}\nfunction getCurrentEventPriority() {\n  var currentEvent = window.event;\n\n  if (currentEvent === undefined) {\n    return DefaultEventPriority;\n  }\n\n  return getEventPriority(currentEvent.type);\n}\n// if a component just imports ReactDOM (e.g. for findDOMNode).\n// Some environments might not have setTimeout or clearTimeout.\n\nvar scheduleTimeout = typeof setTimeout === 'function' ? setTimeout : undefined;\nvar cancelTimeout = typeof clearTimeout === 'function' ? clearTimeout : undefined;\nvar noTimeout = -1;\nvar localPromise = typeof Promise === 'function' ? Promise : undefined; // -------------------\nvar scheduleMicrotask = typeof queueMicrotask === 'function' ? queueMicrotask : typeof localPromise !== 'undefined' ? function (callback) {\n  return localPromise.resolve(null).then(callback).catch(handleErrorInNextTick);\n} : scheduleTimeout; // TODO: Determine the best fallback here.\n\nfunction handleErrorInNextTick(error) {\n  setTimeout(function () {\n    throw error;\n  });\n} // -------------------\nfunction commitMount(domElement, type, newProps, internalInstanceHandle) {\n  // Despite the naming that might imply otherwise, this method only\n  // fires if there is an `Update` effect scheduled during mounting.\n  // This happens if `finalizeInitialChildren` returns `true` (which it\n  // does to implement the `autoFocus` attribute on the client). But\n  // there are also other cases when this might happen (such as patching\n  // up text content during hydration mismatch). So we'll check this again.\n  switch (type) {\n    case 'button':\n    case 'input':\n    case 'select':\n    case 'textarea':\n      if (newProps.autoFocus) {\n        domElement.focus();\n      }\n\n      return;\n\n    case 'img':\n      {\n        if (newProps.src) {\n          domElement.src = newProps.src;\n        }\n\n        return;\n      }\n  }\n}\nfunction commitUpdate(domElement, updatePayload, type, oldProps, newProps, internalInstanceHandle) {\n  // Apply the diff to the DOM node.\n  updateProperties(domElement, updatePayload, type, oldProps, newProps); // Update the props handle so that we know which props are the ones with\n  // with current event handlers.\n\n  updateFiberProps(domElement, newProps);\n}\nfunction resetTextContent(domElement) {\n  setTextContent(domElement, '');\n}\nfunction commitTextUpdate(textInstance, oldText, newText) {\n  textInstance.nodeValue = newText;\n}\nfunction appendChild(parentInstance, child) {\n  parentInstance.appendChild(child);\n}\nfunction appendChildToContainer(container, child) {\n  var parentNode;\n\n  if (container.nodeType === COMMENT_NODE) {\n    parentNode = container.parentNode;\n    parentNode.insertBefore(child, container);\n  } else {\n    parentNode = container;\n    parentNode.appendChild(child);\n  } // This container might be used for a portal.\n  // If something inside a portal is clicked, that click should bubble\n  // through the React tree. However, on Mobile Safari the click would\n  // never bubble through the *DOM* tree unless an ancestor with onclick\n  // event exists. So we wouldn't see it and dispatch it.\n  // This is why we ensure that non React root containers have inline onclick\n  // defined.\n  // https://github.com/facebook/react/issues/11918\n\n\n  var reactRootContainer = container._reactRootContainer;\n\n  if ((reactRootContainer === null || reactRootContainer === undefined) && parentNode.onclick === null) {\n    // TODO: This cast may not be sound for SVG, MathML or custom elements.\n    trapClickOnNonInteractiveElement(parentNode);\n  }\n}\nfunction insertBefore(parentInstance, child, beforeChild) {\n  parentInstance.insertBefore(child, beforeChild);\n}\nfunction insertInContainerBefore(container, child, beforeChild) {\n  if (container.nodeType === COMMENT_NODE) {\n    container.parentNode.insertBefore(child, beforeChild);\n  } else {\n    container.insertBefore(child, beforeChild);\n  }\n}\n\nfunction removeChild(parentInstance, child) {\n  parentInstance.removeChild(child);\n}\nfunction removeChildFromContainer(container, child) {\n  if (container.nodeType === COMMENT_NODE) {\n    container.parentNode.removeChild(child);\n  } else {\n    container.removeChild(child);\n  }\n}\nfunction clearSuspenseBoundary(parentInstance, suspenseInstance) {\n  var node = suspenseInstance; // Delete all nodes within this suspense boundary.\n  // There might be nested nodes so we need to keep track of how\n  // deep we are and only break out when we're back on top.\n\n  var depth = 0;\n\n  do {\n    var nextNode = node.nextSibling;\n    parentInstance.removeChild(node);\n\n    if (nextNode && nextNode.nodeType === COMMENT_NODE) {\n      var data = nextNode.data;\n\n      if (data === SUSPENSE_END_DATA) {\n        if (depth === 0) {\n          parentInstance.removeChild(nextNode); // Retry if any event replaying was blocked on this.\n\n          retryIfBlockedOn(suspenseInstance);\n          return;\n        } else {\n          depth--;\n        }\n      } else if (data === SUSPENSE_START_DATA || data === SUSPENSE_PENDING_START_DATA || data === SUSPENSE_FALLBACK_START_DATA) {\n        depth++;\n      }\n    }\n\n    node = nextNode;\n  } while (node); // TODO: Warn, we didn't find the end comment boundary.\n  // Retry if any event replaying was blocked on this.\n\n\n  retryIfBlockedOn(suspenseInstance);\n}\nfunction clearSuspenseBoundaryFromContainer(container, suspenseInstance) {\n  if (container.nodeType === COMMENT_NODE) {\n    clearSuspenseBoundary(container.parentNode, suspenseInstance);\n  } else if (container.nodeType === ELEMENT_NODE) {\n    clearSuspenseBoundary(container, suspenseInstance);\n  } // Retry if any event replaying was blocked on this.\n\n\n  retryIfBlockedOn(container);\n}\nfunction hideInstance(instance) {\n  // TODO: Does this work for all element types? What about MathML? Should we\n  // pass host context to this method?\n  instance = instance;\n  var style = instance.style;\n\n  if (typeof style.setProperty === 'function') {\n    style.setProperty('display', 'none', 'important');\n  } else {\n    style.display = 'none';\n  }\n}\nfunction hideTextInstance(textInstance) {\n  textInstance.nodeValue = '';\n}\nfunction unhideInstance(instance, props) {\n  instance = instance;\n  var styleProp = props[STYLE$1];\n  var display = styleProp !== undefined && styleProp !== null && styleProp.hasOwnProperty('display') ? styleProp.display : null;\n  instance.style.display = dangerousStyleValue('display', display);\n}\nfunction unhideTextInstance(textInstance, text) {\n  textInstance.nodeValue = text;\n}\nfunction clearContainer(container) {\n  if (container.nodeType === ELEMENT_NODE) {\n    container.textContent = '';\n  } else if (container.nodeType === DOCUMENT_NODE) {\n    if (container.documentElement) {\n      container.removeChild(container.documentElement);\n    }\n  }\n} // -------------------\nfunction canHydrateInstance(instance, type, props) {\n  if (instance.nodeType !== ELEMENT_NODE || type.toLowerCase() !== instance.nodeName.toLowerCase()) {\n    return null;\n  } // This has now been refined to an element node.\n\n\n  return instance;\n}\nfunction canHydrateTextInstance(instance, text) {\n  if (text === '' || instance.nodeType !== TEXT_NODE) {\n    // Empty strings are not parsed by HTML so there won't be a correct match here.\n    return null;\n  } // This has now been refined to a text node.\n\n\n  return instance;\n}\nfunction canHydrateSuspenseInstance(instance) {\n  if (instance.nodeType !== COMMENT_NODE) {\n    // Empty strings are not parsed by HTML so there won't be a correct match here.\n    return null;\n  } // This has now been refined to a suspense node.\n\n\n  return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n  return instance.data === SUSPENSE_PENDING_START_DATA;\n}\nfunction isSuspenseInstanceFallback(instance) {\n  return instance.data === SUSPENSE_FALLBACK_START_DATA;\n}\nfunction getSuspenseInstanceFallbackErrorDetails(instance) {\n  var dataset = instance.nextSibling && instance.nextSibling.dataset;\n  var digest, message, stack;\n\n  if (dataset) {\n    digest = dataset.dgst;\n\n    {\n      message = dataset.msg;\n      stack = dataset.stck;\n    }\n  }\n\n  {\n    return {\n      message: message,\n      digest: digest,\n      stack: stack\n    };\n  } // let value = {message: undefined, hash: undefined};\n  // const nextSibling = instance.nextSibling;\n  // if (nextSibling) {\n  //   const dataset = ((nextSibling: any): HTMLTemplateElement).dataset;\n  //   value.message = dataset.msg;\n  //   value.hash = dataset.hash;\n  //   if (true) {\n  //     value.stack = dataset.stack;\n  //   }\n  // }\n  // return value;\n\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n  instance._reactRetry = callback;\n}\n\nfunction getNextHydratable(node) {\n  // Skip non-hydratable nodes.\n  for (; node != null; node = node.nextSibling) {\n    var nodeType = node.nodeType;\n\n    if (nodeType === ELEMENT_NODE || nodeType === TEXT_NODE) {\n      break;\n    }\n\n    if (nodeType === COMMENT_NODE) {\n      var nodeData = node.data;\n\n      if (nodeData === SUSPENSE_START_DATA || nodeData === SUSPENSE_FALLBACK_START_DATA || nodeData === SUSPENSE_PENDING_START_DATA) {\n        break;\n      }\n\n      if (nodeData === SUSPENSE_END_DATA) {\n        return null;\n      }\n    }\n  }\n\n  return node;\n}\n\nfunction getNextHydratableSibling(instance) {\n  return getNextHydratable(instance.nextSibling);\n}\nfunction getFirstHydratableChild(parentInstance) {\n  return getNextHydratable(parentInstance.firstChild);\n}\nfunction getFirstHydratableChildWithinContainer(parentContainer) {\n  return getNextHydratable(parentContainer.firstChild);\n}\nfunction getFirstHydratableChildWithinSuspenseInstance(parentInstance) {\n  return getNextHydratable(parentInstance.nextSibling);\n}\nfunction hydrateInstance(instance, type, props, rootContainerInstance, hostContext, internalInstanceHandle, shouldWarnDev) {\n  precacheFiberNode(internalInstanceHandle, instance); // TODO: Possibly defer this until the commit phase where all the events\n  // get attached.\n\n  updateFiberProps(instance, props);\n  var parentNamespace;\n\n  {\n    var hostContextDev = hostContext;\n    parentNamespace = hostContextDev.namespace;\n  } // TODO: Temporary hack to check if we're in a concurrent root. We can delete\n  // when the legacy root API is removed.\n\n\n  var isConcurrentMode = (internalInstanceHandle.mode & ConcurrentMode) !== NoMode;\n  return diffHydratedProperties(instance, type, props, parentNamespace, rootContainerInstance, isConcurrentMode, shouldWarnDev);\n}\nfunction hydrateTextInstance(textInstance, text, internalInstanceHandle, shouldWarnDev) {\n  precacheFiberNode(internalInstanceHandle, textInstance); // TODO: Temporary hack to check if we're in a concurrent root. We can delete\n  // when the legacy root API is removed.\n\n  var isConcurrentMode = (internalInstanceHandle.mode & ConcurrentMode) !== NoMode;\n  return diffHydratedText(textInstance, text);\n}\nfunction hydrateSuspenseInstance(suspenseInstance, internalInstanceHandle) {\n  precacheFiberNode(internalInstanceHandle, suspenseInstance);\n}\nfunction getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) {\n  var node = suspenseInstance.nextSibling; // Skip past all nodes within this suspense boundary.\n  // There might be nested nodes so we need to keep track of how\n  // deep we are and only break out when we're back on top.\n\n  var depth = 0;\n\n  while (node) {\n    if (node.nodeType === COMMENT_NODE) {\n      var data = node.data;\n\n      if (data === SUSPENSE_END_DATA) {\n        if (depth === 0) {\n          return getNextHydratableSibling(node);\n        } else {\n          depth--;\n        }\n      } else if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {\n        depth++;\n      }\n    }\n\n    node = node.nextSibling;\n  } // TODO: Warn, we didn't find the end comment boundary.\n\n\n  return null;\n} // Returns the SuspenseInstance if this node is a direct child of a\n// SuspenseInstance. I.e. if its previous sibling is a Comment with\n// SUSPENSE_x_START_DATA. Otherwise, null.\n\nfunction getParentSuspenseInstance(targetInstance) {\n  var node = targetInstance.previousSibling; // Skip past all nodes within this suspense boundary.\n  // There might be nested nodes so we need to keep track of how\n  // deep we are and only break out when we're back on top.\n\n  var depth = 0;\n\n  while (node) {\n    if (node.nodeType === COMMENT_NODE) {\n      var data = node.data;\n\n      if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {\n        if (depth === 0) {\n          return node;\n        } else {\n          depth--;\n        }\n      } else if (data === SUSPENSE_END_DATA) {\n        depth++;\n      }\n    }\n\n    node = node.previousSibling;\n  }\n\n  return null;\n}\nfunction commitHydratedContainer(container) {\n  // Retry if any event replaying was blocked on this.\n  retryIfBlockedOn(container);\n}\nfunction commitHydratedSuspenseInstance(suspenseInstance) {\n  // Retry if any event replaying was blocked on this.\n  retryIfBlockedOn(suspenseInstance);\n}\nfunction shouldDeleteUnhydratedTailInstances(parentType) {\n  return parentType !== 'head' && parentType !== 'body';\n}\nfunction didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, text, isConcurrentMode) {\n  var shouldWarnDev = true;\n  checkForUnmatchedText(textInstance.nodeValue, text, isConcurrentMode, shouldWarnDev);\n}\nfunction didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, text, isConcurrentMode) {\n  if (parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n    var shouldWarnDev = true;\n    checkForUnmatchedText(textInstance.nodeValue, text, isConcurrentMode, shouldWarnDev);\n  }\n}\nfunction didNotHydrateInstanceWithinContainer(parentContainer, instance) {\n  {\n    if (instance.nodeType === ELEMENT_NODE) {\n      warnForDeletedHydratableElement(parentContainer, instance);\n    } else if (instance.nodeType === COMMENT_NODE) ; else {\n      warnForDeletedHydratableText(parentContainer, instance);\n    }\n  }\n}\nfunction didNotHydrateInstanceWithinSuspenseInstance(parentInstance, instance) {\n  {\n    // $FlowFixMe: Only Element or Document can be parent nodes.\n    var parentNode = parentInstance.parentNode;\n\n    if (parentNode !== null) {\n      if (instance.nodeType === ELEMENT_NODE) {\n        warnForDeletedHydratableElement(parentNode, instance);\n      } else if (instance.nodeType === COMMENT_NODE) ; else {\n        warnForDeletedHydratableText(parentNode, instance);\n      }\n    }\n  }\n}\nfunction didNotHydrateInstance(parentType, parentProps, parentInstance, instance, isConcurrentMode) {\n  {\n    if (isConcurrentMode || parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n      if (instance.nodeType === ELEMENT_NODE) {\n        warnForDeletedHydratableElement(parentInstance, instance);\n      } else if (instance.nodeType === COMMENT_NODE) ; else {\n        warnForDeletedHydratableText(parentInstance, instance);\n      }\n    }\n  }\n}\nfunction didNotFindHydratableInstanceWithinContainer(parentContainer, type, props) {\n  {\n    warnForInsertedHydratedElement(parentContainer, type);\n  }\n}\nfunction didNotFindHydratableTextInstanceWithinContainer(parentContainer, text) {\n  {\n    warnForInsertedHydratedText(parentContainer, text);\n  }\n}\nfunction didNotFindHydratableInstanceWithinSuspenseInstance(parentInstance, type, props) {\n  {\n    // $FlowFixMe: Only Element or Document can be parent nodes.\n    var parentNode = parentInstance.parentNode;\n    if (parentNode !== null) warnForInsertedHydratedElement(parentNode, type);\n  }\n}\nfunction didNotFindHydratableTextInstanceWithinSuspenseInstance(parentInstance, text) {\n  {\n    // $FlowFixMe: Only Element or Document can be parent nodes.\n    var parentNode = parentInstance.parentNode;\n    if (parentNode !== null) warnForInsertedHydratedText(parentNode, text);\n  }\n}\nfunction didNotFindHydratableInstance(parentType, parentProps, parentInstance, type, props, isConcurrentMode) {\n  {\n    if (isConcurrentMode || parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n      warnForInsertedHydratedElement(parentInstance, type);\n    }\n  }\n}\nfunction didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, text, isConcurrentMode) {\n  {\n    if (isConcurrentMode || parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n      warnForInsertedHydratedText(parentInstance, text);\n    }\n  }\n}\nfunction errorHydratingContainer(parentContainer) {\n  {\n    // TODO: This gets logged by onRecoverableError, too, so we should be\n    // able to remove it.\n    error('An error occurred during hydration. The server HTML was replaced with client content in <%s>.', parentContainer.nodeName.toLowerCase());\n  }\n}\nfunction preparePortalMount(portalInstance) {\n  listenToAllSupportedEvents(portalInstance);\n}\n\nvar randomKey = Math.random().toString(36).slice(2);\nvar internalInstanceKey = '__reactFiber$' + randomKey;\nvar internalPropsKey = '__reactProps$' + randomKey;\nvar internalContainerInstanceKey = '__reactContainer$' + randomKey;\nvar internalEventHandlersKey = '__reactEvents$' + randomKey;\nvar internalEventHandlerListenersKey = '__reactListeners$' + randomKey;\nvar internalEventHandlesSetKey = '__reactHandles$' + randomKey;\nfunction detachDeletedInstance(node) {\n  // TODO: This function is only called on host components. I don't think all of\n  // these fields are relevant.\n  delete node[internalInstanceKey];\n  delete node[internalPropsKey];\n  delete node[internalEventHandlersKey];\n  delete node[internalEventHandlerListenersKey];\n  delete node[internalEventHandlesSetKey];\n}\nfunction precacheFiberNode(hostInst, node) {\n  node[internalInstanceKey] = hostInst;\n}\nfunction markContainerAsRoot(hostRoot, node) {\n  node[internalContainerInstanceKey] = hostRoot;\n}\nfunction unmarkContainerAsRoot(node) {\n  node[internalContainerInstanceKey] = null;\n}\nfunction isContainerMarkedAsRoot(node) {\n  return !!node[internalContainerInstanceKey];\n} // Given a DOM node, return the closest HostComponent or HostText fiber ancestor.\n// If the target node is part of a hydrated or not yet rendered subtree, then\n// this may also return a SuspenseComponent or HostRoot to indicate that.\n// Conceptually the HostRoot fiber is a child of the Container node. So if you\n// pass the Container node as the targetNode, you will not actually get the\n// HostRoot back. To get to the HostRoot, you need to pass a child of it.\n// The same thing applies to Suspense boundaries.\n\nfunction getClosestInstanceFromNode(targetNode) {\n  var targetInst = targetNode[internalInstanceKey];\n\n  if (targetInst) {\n    // Don't return HostRoot or SuspenseComponent here.\n    return targetInst;\n  } // If the direct event target isn't a React owned DOM node, we need to look\n  // to see if one of its parents is a React owned DOM node.\n\n\n  var parentNode = targetNode.parentNode;\n\n  while (parentNode) {\n    // We'll check if this is a container root that could include\n    // React nodes in the future. We need to check this first because\n    // if we're a child of a dehydrated container, we need to first\n    // find that inner container before moving on to finding the parent\n    // instance. Note that we don't check this field on  the targetNode\n    // itself because the fibers are conceptually between the container\n    // node and the first child. It isn't surrounding the container node.\n    // If it's not a container, we check if it's an instance.\n    targetInst = parentNode[internalContainerInstanceKey] || parentNode[internalInstanceKey];\n\n    if (targetInst) {\n      // Since this wasn't the direct target of the event, we might have\n      // stepped past dehydrated DOM nodes to get here. However they could\n      // also have been non-React nodes. We need to answer which one.\n      // If we the instance doesn't have any children, then there can't be\n      // a nested suspense boundary within it. So we can use this as a fast\n      // bailout. Most of the time, when people add non-React children to\n      // the tree, it is using a ref to a child-less DOM node.\n      // Normally we'd only need to check one of the fibers because if it\n      // has ever gone from having children to deleting them or vice versa\n      // it would have deleted the dehydrated boundary nested inside already.\n      // However, since the HostRoot starts out with an alternate it might\n      // have one on the alternate so we need to check in case this was a\n      // root.\n      var alternate = targetInst.alternate;\n\n      if (targetInst.child !== null || alternate !== null && alternate.child !== null) {\n        // Next we need to figure out if the node that skipped past is\n        // nested within a dehydrated boundary and if so, which one.\n        var suspenseInstance = getParentSuspenseInstance(targetNode);\n\n        while (suspenseInstance !== null) {\n          // We found a suspense instance. That means that we haven't\n          // hydrated it yet. Even though we leave the comments in the\n          // DOM after hydrating, and there are boundaries in the DOM\n          // that could already be hydrated, we wouldn't have found them\n          // through this pass since if the target is hydrated it would\n          // have had an internalInstanceKey on it.\n          // Let's get the fiber associated with the SuspenseComponent\n          // as the deepest instance.\n          var targetSuspenseInst = suspenseInstance[internalInstanceKey];\n\n          if (targetSuspenseInst) {\n            return targetSuspenseInst;\n          } // If we don't find a Fiber on the comment, it might be because\n          // we haven't gotten to hydrate it yet. There might still be a\n          // parent boundary that hasn't above this one so we need to find\n          // the outer most that is known.\n\n\n          suspenseInstance = getParentSuspenseInstance(suspenseInstance); // If we don't find one, then that should mean that the parent\n          // host component also hasn't hydrated yet. We can return it\n          // below since it will bail out on the isMounted check later.\n        }\n      }\n\n      return targetInst;\n    }\n\n    targetNode = parentNode;\n    parentNode = targetNode.parentNode;\n  }\n\n  return null;\n}\n/**\n * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\n * instance, or null if the node was not rendered by this React.\n */\n\nfunction getInstanceFromNode(node) {\n  var inst = node[internalInstanceKey] || node[internalContainerInstanceKey];\n\n  if (inst) {\n    if (inst.tag === HostComponent || inst.tag === HostText || inst.tag === SuspenseComponent || inst.tag === HostRoot) {\n      return inst;\n    } else {\n      return null;\n    }\n  }\n\n  return null;\n}\n/**\n * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\n * DOM node.\n */\n\nfunction getNodeFromInstance(inst) {\n  if (inst.tag === HostComponent || inst.tag === HostText) {\n    // In Fiber this, is just the state node right now. We assume it will be\n    // a host component or host text.\n    return inst.stateNode;\n  } // Without this first invariant, passing a non-DOM-component triggers the next\n  // invariant for a missing parent, which is super confusing.\n\n\n  throw new Error('getNodeFromInstance: Invalid argument.');\n}\nfunction getFiberCurrentPropsFromNode(node) {\n  return node[internalPropsKey] || null;\n}\nfunction updateFiberProps(node, props) {\n  node[internalPropsKey] = props;\n}\nfunction getEventListenerSet(node) {\n  var elementListenerSet = node[internalEventHandlersKey];\n\n  if (elementListenerSet === undefined) {\n    elementListenerSet = node[internalEventHandlersKey] = new Set();\n  }\n\n  return elementListenerSet;\n}\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n    }\n  }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n  {\n    // $FlowFixMe This is okay but Flow doesn't know it.\n    var has = Function.call.bind(hasOwnProperty);\n\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            // eslint-disable-next-line react-internal/prod-error-codes\n            var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n\n          error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n        } catch (ex) {\n          error$1 = ex;\n        }\n\n        if (error$1 && !(error$1 instanceof Error)) {\n          setCurrentlyValidatingElement(element);\n\n          error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n          setCurrentlyValidatingElement(null);\n        }\n\n        if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error$1.message] = true;\n          setCurrentlyValidatingElement(element);\n\n          error('Failed %s type: %s', location, error$1.message);\n\n          setCurrentlyValidatingElement(null);\n        }\n      }\n    }\n  }\n}\n\nvar valueStack = [];\nvar fiberStack;\n\n{\n  fiberStack = [];\n}\n\nvar index = -1;\n\nfunction createCursor(defaultValue) {\n  return {\n    current: defaultValue\n  };\n}\n\nfunction pop(cursor, fiber) {\n  if (index < 0) {\n    {\n      error('Unexpected pop.');\n    }\n\n    return;\n  }\n\n  {\n    if (fiber !== fiberStack[index]) {\n      error('Unexpected Fiber popped.');\n    }\n  }\n\n  cursor.current = valueStack[index];\n  valueStack[index] = null;\n\n  {\n    fiberStack[index] = null;\n  }\n\n  index--;\n}\n\nfunction push(cursor, value, fiber) {\n  index++;\n  valueStack[index] = cursor.current;\n\n  {\n    fiberStack[index] = fiber;\n  }\n\n  cursor.current = value;\n}\n\nvar warnedAboutMissingGetChildContext;\n\n{\n  warnedAboutMissingGetChildContext = {};\n}\n\nvar emptyContextObject = {};\n\n{\n  Object.freeze(emptyContextObject);\n} // A cursor to the current merged context object on the stack.\n\n\nvar contextStackCursor = createCursor(emptyContextObject); // A cursor to a boolean indicating whether the context has changed.\n\nvar didPerformWorkStackCursor = createCursor(false); // Keep track of the previous context object that was on the stack.\n// We use this to get access to the parent context after we have already\n// pushed the next context provider, and now need to merge their contexts.\n\nvar previousContext = emptyContextObject;\n\nfunction getUnmaskedContext(workInProgress, Component, didPushOwnContextIfProvider) {\n  {\n    if (didPushOwnContextIfProvider && isContextProvider(Component)) {\n      // If the fiber is a context provider itself, when we read its context\n      // we may have already pushed its own child context on the stack. A context\n      // provider should not \"see\" its own child context. Therefore we read the\n      // previous (parent) context instead for a context provider.\n      return previousContext;\n    }\n\n    return contextStackCursor.current;\n  }\n}\n\nfunction cacheContext(workInProgress, unmaskedContext, maskedContext) {\n  {\n    var instance = workInProgress.stateNode;\n    instance.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext;\n    instance.__reactInternalMemoizedMaskedChildContext = maskedContext;\n  }\n}\n\nfunction getMaskedContext(workInProgress, unmaskedContext) {\n  {\n    var type = workInProgress.type;\n    var contextTypes = type.contextTypes;\n\n    if (!contextTypes) {\n      return emptyContextObject;\n    } // Avoid recreating masked context unless unmasked context has changed.\n    // Failing to do this will result in unnecessary calls to componentWillReceiveProps.\n    // This may trigger infinite loops if componentWillReceiveProps calls setState.\n\n\n    var instance = workInProgress.stateNode;\n\n    if (instance && instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext) {\n      return instance.__reactInternalMemoizedMaskedChildContext;\n    }\n\n    var context = {};\n\n    for (var key in contextTypes) {\n      context[key] = unmaskedContext[key];\n    }\n\n    {\n      var name = getComponentNameFromFiber(workInProgress) || 'Unknown';\n      checkPropTypes(contextTypes, context, 'context', name);\n    } // Cache unmasked context so we can avoid recreating masked context unless necessary.\n    // Context is created before the class component is instantiated so check for instance.\n\n\n    if (instance) {\n      cacheContext(workInProgress, unmaskedContext, context);\n    }\n\n    return context;\n  }\n}\n\nfunction hasContextChanged() {\n  {\n    return didPerformWorkStackCursor.current;\n  }\n}\n\nfunction isContextProvider(type) {\n  {\n    var childContextTypes = type.childContextTypes;\n    return childContextTypes !== null && childContextTypes !== undefined;\n  }\n}\n\nfunction popContext(fiber) {\n  {\n    pop(didPerformWorkStackCursor, fiber);\n    pop(contextStackCursor, fiber);\n  }\n}\n\nfunction popTopLevelContextObject(fiber) {\n  {\n    pop(didPerformWorkStackCursor, fiber);\n    pop(contextStackCursor, fiber);\n  }\n}\n\nfunction pushTopLevelContextObject(fiber, context, didChange) {\n  {\n    if (contextStackCursor.current !== emptyContextObject) {\n      throw new Error('Unexpected context found on stack. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n    }\n\n    push(contextStackCursor, context, fiber);\n    push(didPerformWorkStackCursor, didChange, fiber);\n  }\n}\n\nfunction processChildContext(fiber, type, parentContext) {\n  {\n    var instance = fiber.stateNode;\n    var childContextTypes = type.childContextTypes; // TODO (bvaughn) Replace this behavior with an invariant() in the future.\n    // It has only been added in Fiber to match the (unintentional) behavior in Stack.\n\n    if (typeof instance.getChildContext !== 'function') {\n      {\n        var componentName = getComponentNameFromFiber(fiber) || 'Unknown';\n\n        if (!warnedAboutMissingGetChildContext[componentName]) {\n          warnedAboutMissingGetChildContext[componentName] = true;\n\n          error('%s.childContextTypes is specified but there is no getChildContext() method ' + 'on the instance. You can either define getChildContext() on %s or remove ' + 'childContextTypes from it.', componentName, componentName);\n        }\n      }\n\n      return parentContext;\n    }\n\n    var childContext = instance.getChildContext();\n\n    for (var contextKey in childContext) {\n      if (!(contextKey in childContextTypes)) {\n        throw new Error((getComponentNameFromFiber(fiber) || 'Unknown') + \".getChildContext(): key \\\"\" + contextKey + \"\\\" is not defined in childContextTypes.\");\n      }\n    }\n\n    {\n      var name = getComponentNameFromFiber(fiber) || 'Unknown';\n      checkPropTypes(childContextTypes, childContext, 'child context', name);\n    }\n\n    return assign({}, parentContext, childContext);\n  }\n}\n\nfunction pushContextProvider(workInProgress) {\n  {\n    var instance = workInProgress.stateNode; // We push the context as early as possible to ensure stack integrity.\n    // If the instance does not exist yet, we will push null at first,\n    // and replace it on the stack later when invalidating the context.\n\n    var memoizedMergedChildContext = instance && instance.__reactInternalMemoizedMergedChildContext || emptyContextObject; // Remember the parent context so we can merge with it later.\n    // Inherit the parent's did-perform-work value to avoid inadvertently blocking updates.\n\n    previousContext = contextStackCursor.current;\n    push(contextStackCursor, memoizedMergedChildContext, workInProgress);\n    push(didPerformWorkStackCursor, didPerformWorkStackCursor.current, workInProgress);\n    return true;\n  }\n}\n\nfunction invalidateContextProvider(workInProgress, type, didChange) {\n  {\n    var instance = workInProgress.stateNode;\n\n    if (!instance) {\n      throw new Error('Expected to have an instance by this point. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n    }\n\n    if (didChange) {\n      // Merge parent and own context.\n      // Skip this if we're not updating due to sCU.\n      // This avoids unnecessarily recomputing memoized values.\n      var mergedContext = processChildContext(workInProgress, type, previousContext);\n      instance.__reactInternalMemoizedMergedChildContext = mergedContext; // Replace the old (or empty) context with the new one.\n      // It is important to unwind the context in the reverse order.\n\n      pop(didPerformWorkStackCursor, workInProgress);\n      pop(contextStackCursor, workInProgress); // Now push the new context and mark that it has changed.\n\n      push(contextStackCursor, mergedContext, workInProgress);\n      push(didPerformWorkStackCursor, didChange, workInProgress);\n    } else {\n      pop(didPerformWorkStackCursor, workInProgress);\n      push(didPerformWorkStackCursor, didChange, workInProgress);\n    }\n  }\n}\n\nfunction findCurrentUnmaskedContext(fiber) {\n  {\n    // Currently this is only used with renderSubtreeIntoContainer; not sure if it\n    // makes sense elsewhere\n    if (!isFiberMounted(fiber) || fiber.tag !== ClassComponent) {\n      throw new Error('Expected subtree parent to be a mounted class component. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n    }\n\n    var node = fiber;\n\n    do {\n      switch (node.tag) {\n        case HostRoot:\n          return node.stateNode.context;\n\n        case ClassComponent:\n          {\n            var Component = node.type;\n\n            if (isContextProvider(Component)) {\n              return node.stateNode.__reactInternalMemoizedMergedChildContext;\n            }\n\n            break;\n          }\n      }\n\n      node = node.return;\n    } while (node !== null);\n\n    throw new Error('Found unexpected detached subtree parent. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n  }\n}\n\nvar LegacyRoot = 0;\nvar ConcurrentRoot = 1;\n\nvar syncQueue = null;\nvar includesLegacySyncCallbacks = false;\nvar isFlushingSyncQueue = false;\nfunction scheduleSyncCallback(callback) {\n  // Push this callback into an internal queue. We'll flush these either in\n  // the next tick, or earlier if something calls `flushSyncCallbackQueue`.\n  if (syncQueue === null) {\n    syncQueue = [callback];\n  } else {\n    // Push onto existing queue. Don't need to schedule a callback because\n    // we already scheduled one when we created the queue.\n    syncQueue.push(callback);\n  }\n}\nfunction scheduleLegacySyncCallback(callback) {\n  includesLegacySyncCallbacks = true;\n  scheduleSyncCallback(callback);\n}\nfunction flushSyncCallbacksOnlyInLegacyMode() {\n  // Only flushes the queue if there's a legacy sync callback scheduled.\n  // TODO: There's only a single type of callback: performSyncOnWorkOnRoot. So\n  // it might make more sense for the queue to be a list of roots instead of a\n  // list of generic callbacks. Then we can have two: one for legacy roots, one\n  // for concurrent roots. And this method would only flush the legacy ones.\n  if (includesLegacySyncCallbacks) {\n    flushSyncCallbacks();\n  }\n}\nfunction flushSyncCallbacks() {\n  if (!isFlushingSyncQueue && syncQueue !== null) {\n    // Prevent re-entrance.\n    isFlushingSyncQueue = true;\n    var i = 0;\n    var previousUpdatePriority = getCurrentUpdatePriority();\n\n    try {\n      var isSync = true;\n      var queue = syncQueue; // TODO: Is this necessary anymore? The only user code that runs in this\n      // queue is in the render or commit phases.\n\n      setCurrentUpdatePriority(DiscreteEventPriority);\n\n      for (; i < queue.length; i++) {\n        var callback = queue[i];\n\n        do {\n          callback = callback(isSync);\n        } while (callback !== null);\n      }\n\n      syncQueue = null;\n      includesLegacySyncCallbacks = false;\n    } catch (error) {\n      // If something throws, leave the remaining callbacks on the queue.\n      if (syncQueue !== null) {\n        syncQueue = syncQueue.slice(i + 1);\n      } // Resume flushing in the next tick\n\n\n      scheduleCallback(ImmediatePriority, flushSyncCallbacks);\n      throw error;\n    } finally {\n      setCurrentUpdatePriority(previousUpdatePriority);\n      isFlushingSyncQueue = false;\n    }\n  }\n\n  return null;\n}\n\n// TODO: Use the unified fiber stack module instead of this local one?\n// Intentionally not using it yet to derisk the initial implementation, because\n// the way we push/pop these values is a bit unusual. If there's a mistake, I'd\n// rather the ids be wrong than crash the whole reconciler.\nvar forkStack = [];\nvar forkStackIndex = 0;\nvar treeForkProvider = null;\nvar treeForkCount = 0;\nvar idStack = [];\nvar idStackIndex = 0;\nvar treeContextProvider = null;\nvar treeContextId = 1;\nvar treeContextOverflow = '';\nfunction isForkedChild(workInProgress) {\n  warnIfNotHydrating();\n  return (workInProgress.flags & Forked) !== NoFlags;\n}\nfunction getForksAtLevel(workInProgress) {\n  warnIfNotHydrating();\n  return treeForkCount;\n}\nfunction getTreeId() {\n  var overflow = treeContextOverflow;\n  var idWithLeadingBit = treeContextId;\n  var id = idWithLeadingBit & ~getLeadingBit(idWithLeadingBit);\n  return id.toString(32) + overflow;\n}\nfunction pushTreeFork(workInProgress, totalChildren) {\n  // This is called right after we reconcile an array (or iterator) of child\n  // fibers, because that's the only place where we know how many children in\n  // the whole set without doing extra work later, or storing addtional\n  // information on the fiber.\n  //\n  // That's why this function is separate from pushTreeId — it's called during\n  // the render phase of the fork parent, not the child, which is where we push\n  // the other context values.\n  //\n  // In the Fizz implementation this is much simpler because the child is\n  // rendered in the same callstack as the parent.\n  //\n  // It might be better to just add a `forks` field to the Fiber type. It would\n  // make this module simpler.\n  warnIfNotHydrating();\n  forkStack[forkStackIndex++] = treeForkCount;\n  forkStack[forkStackIndex++] = treeForkProvider;\n  treeForkProvider = workInProgress;\n  treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n  warnIfNotHydrating();\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextProvider = workInProgress;\n  var baseIdWithLeadingBit = treeContextId;\n  var baseOverflow = treeContextOverflow; // The leftmost 1 marks the end of the sequence, non-inclusive. It's not part\n  // of the id; we use it to account for leading 0s.\n\n  var baseLength = getBitLength(baseIdWithLeadingBit) - 1;\n  var baseId = baseIdWithLeadingBit & ~(1 << baseLength);\n  var slot = index + 1;\n  var length = getBitLength(totalChildren) + baseLength; // 30 is the max length we can store without overflowing, taking into\n  // consideration the leading 1 we use to mark the end of the sequence.\n\n  if (length > 30) {\n    // We overflowed the bitwise-safe range. Fall back to slower algorithm.\n    // This branch assumes the length of the base id is greater than 5; it won't\n    // work for smaller ids, because you need 5 bits per character.\n    //\n    // We encode the id in multiple steps: first the base id, then the\n    // remaining digits.\n    //\n    // Each 5 bit sequence corresponds to a single base 32 character. So for\n    // example, if the current id is 23 bits long, we can convert 20 of those\n    // bits into a string of 4 characters, with 3 bits left over.\n    //\n    // First calculate how many bits in the base id represent a complete\n    // sequence of characters.\n    var numberOfOverflowBits = baseLength - baseLength % 5; // Then create a bitmask that selects only those bits.\n\n    var newOverflowBits = (1 << numberOfOverflowBits) - 1; // Select the bits, and convert them to a base 32 string.\n\n    var newOverflow = (baseId & newOverflowBits).toString(32); // Now we can remove those bits from the base id.\n\n    var restOfBaseId = baseId >> numberOfOverflowBits;\n    var restOfBaseLength = baseLength - numberOfOverflowBits; // Finally, encode the rest of the bits using the normal algorithm. Because\n    // we made more room, this time it won't overflow.\n\n    var restOfLength = getBitLength(totalChildren) + restOfBaseLength;\n    var restOfNewBits = slot << restOfBaseLength;\n    var id = restOfNewBits | restOfBaseId;\n    var overflow = newOverflow + baseOverflow;\n    treeContextId = 1 << restOfLength | id;\n    treeContextOverflow = overflow;\n  } else {\n    // Normal path\n    var newBits = slot << baseLength;\n\n    var _id = newBits | baseId;\n\n    var _overflow = baseOverflow;\n    treeContextId = 1 << length | _id;\n    treeContextOverflow = _overflow;\n  }\n}\nfunction pushMaterializedTreeId(workInProgress) {\n  warnIfNotHydrating(); // This component materialized an id. This will affect any ids that appear\n  // in its children.\n\n  var returnFiber = workInProgress.return;\n\n  if (returnFiber !== null) {\n    var numberOfForks = 1;\n    var slotIndex = 0;\n    pushTreeFork(workInProgress, numberOfForks);\n    pushTreeId(workInProgress, numberOfForks, slotIndex);\n  }\n}\n\nfunction getBitLength(number) {\n  return 32 - clz32(number);\n}\n\nfunction getLeadingBit(id) {\n  return 1 << getBitLength(id) - 1;\n}\n\nfunction popTreeContext(workInProgress) {\n  // Restore the previous values.\n  // This is a bit more complicated than other context-like modules in Fiber\n  // because the same Fiber may appear on the stack multiple times and for\n  // different reasons. We have to keep popping until the work-in-progress is\n  // no longer at the top of the stack.\n  while (workInProgress === treeForkProvider) {\n    treeForkProvider = forkStack[--forkStackIndex];\n    forkStack[forkStackIndex] = null;\n    treeForkCount = forkStack[--forkStackIndex];\n    forkStack[forkStackIndex] = null;\n  }\n\n  while (workInProgress === treeContextProvider) {\n    treeContextProvider = idStack[--idStackIndex];\n    idStack[idStackIndex] = null;\n    treeContextOverflow = idStack[--idStackIndex];\n    idStack[idStackIndex] = null;\n    treeContextId = idStack[--idStackIndex];\n    idStack[idStackIndex] = null;\n  }\n}\nfunction getSuspendedTreeContext() {\n  warnIfNotHydrating();\n\n  if (treeContextProvider !== null) {\n    return {\n      id: treeContextId,\n      overflow: treeContextOverflow\n    };\n  } else {\n    return null;\n  }\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n  warnIfNotHydrating();\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextId = suspendedContext.id;\n  treeContextOverflow = suspendedContext.overflow;\n  treeContextProvider = workInProgress;\n}\n\nfunction warnIfNotHydrating() {\n  {\n    if (!getIsHydrating()) {\n      error('Expected to be hydrating. This is a bug in React. Please file ' + 'an issue.');\n    }\n  }\n}\n\n// This may have been an insertion or a hydration.\n\nvar hydrationParentFiber = null;\nvar nextHydratableInstance = null;\nvar isHydrating = false; // This flag allows for warning supression when we expect there to be mismatches\n// due to earlier mismatches or a suspended fiber.\n\nvar didSuspendOrErrorDEV = false; // Hydration errors that were thrown inside this boundary\n\nvar hydrationErrors = null;\n\nfunction warnIfHydrating() {\n  {\n    if (isHydrating) {\n      error('We should not be hydrating here. This is a bug in React. Please file a bug.');\n    }\n  }\n}\n\nfunction markDidThrowWhileHydratingDEV() {\n  {\n    didSuspendOrErrorDEV = true;\n  }\n}\nfunction didSuspendOrErrorWhileHydratingDEV() {\n  {\n    return didSuspendOrErrorDEV;\n  }\n}\n\nfunction enterHydrationState(fiber) {\n\n  var parentInstance = fiber.stateNode.containerInfo;\n  nextHydratableInstance = getFirstHydratableChildWithinContainer(parentInstance);\n  hydrationParentFiber = fiber;\n  isHydrating = true;\n  hydrationErrors = null;\n  didSuspendOrErrorDEV = false;\n  return true;\n}\n\nfunction reenterHydrationStateFromDehydratedSuspenseInstance(fiber, suspenseInstance, treeContext) {\n\n  nextHydratableInstance = getFirstHydratableChildWithinSuspenseInstance(suspenseInstance);\n  hydrationParentFiber = fiber;\n  isHydrating = true;\n  hydrationErrors = null;\n  didSuspendOrErrorDEV = false;\n\n  if (treeContext !== null) {\n    restoreSuspendedTreeContext(fiber, treeContext);\n  }\n\n  return true;\n}\n\nfunction warnUnhydratedInstance(returnFiber, instance) {\n  {\n    switch (returnFiber.tag) {\n      case HostRoot:\n        {\n          didNotHydrateInstanceWithinContainer(returnFiber.stateNode.containerInfo, instance);\n          break;\n        }\n\n      case HostComponent:\n        {\n          var isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;\n          didNotHydrateInstance(returnFiber.type, returnFiber.memoizedProps, returnFiber.stateNode, instance, // TODO: Delete this argument when we remove the legacy root API.\n          isConcurrentMode);\n          break;\n        }\n\n      case SuspenseComponent:\n        {\n          var suspenseState = returnFiber.memoizedState;\n          if (suspenseState.dehydrated !== null) didNotHydrateInstanceWithinSuspenseInstance(suspenseState.dehydrated, instance);\n          break;\n        }\n    }\n  }\n}\n\nfunction deleteHydratableInstance(returnFiber, instance) {\n  warnUnhydratedInstance(returnFiber, instance);\n  var childToDelete = createFiberFromHostInstanceForDeletion();\n  childToDelete.stateNode = instance;\n  childToDelete.return = returnFiber;\n  var deletions = returnFiber.deletions;\n\n  if (deletions === null) {\n    returnFiber.deletions = [childToDelete];\n    returnFiber.flags |= ChildDeletion;\n  } else {\n    deletions.push(childToDelete);\n  }\n}\n\nfunction warnNonhydratedInstance(returnFiber, fiber) {\n  {\n    if (didSuspendOrErrorDEV) {\n      // Inside a boundary that already suspended. We're currently rendering the\n      // siblings of a suspended node. The mismatch may be due to the missing\n      // data, so it's probably a false positive.\n      return;\n    }\n\n    switch (returnFiber.tag) {\n      case HostRoot:\n        {\n          var parentContainer = returnFiber.stateNode.containerInfo;\n\n          switch (fiber.tag) {\n            case HostComponent:\n              var type = fiber.type;\n              var props = fiber.pendingProps;\n              didNotFindHydratableInstanceWithinContainer(parentContainer, type);\n              break;\n\n            case HostText:\n              var text = fiber.pendingProps;\n              didNotFindHydratableTextInstanceWithinContainer(parentContainer, text);\n              break;\n          }\n\n          break;\n        }\n\n      case HostComponent:\n        {\n          var parentType = returnFiber.type;\n          var parentProps = returnFiber.memoizedProps;\n          var parentInstance = returnFiber.stateNode;\n\n          switch (fiber.tag) {\n            case HostComponent:\n              {\n                var _type = fiber.type;\n                var _props = fiber.pendingProps;\n                var isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;\n                didNotFindHydratableInstance(parentType, parentProps, parentInstance, _type, _props, // TODO: Delete this argument when we remove the legacy root API.\n                isConcurrentMode);\n                break;\n              }\n\n            case HostText:\n              {\n                var _text = fiber.pendingProps;\n\n                var _isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;\n\n                didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, _text, // TODO: Delete this argument when we remove the legacy root API.\n                _isConcurrentMode);\n                break;\n              }\n          }\n\n          break;\n        }\n\n      case SuspenseComponent:\n        {\n          var suspenseState = returnFiber.memoizedState;\n          var _parentInstance = suspenseState.dehydrated;\n          if (_parentInstance !== null) switch (fiber.tag) {\n            case HostComponent:\n              var _type2 = fiber.type;\n              var _props2 = fiber.pendingProps;\n              didNotFindHydratableInstanceWithinSuspenseInstance(_parentInstance, _type2);\n              break;\n\n            case HostText:\n              var _text2 = fiber.pendingProps;\n              didNotFindHydratableTextInstanceWithinSuspenseInstance(_parentInstance, _text2);\n              break;\n          }\n          break;\n        }\n\n      default:\n        return;\n    }\n  }\n}\n\nfunction insertNonHydratedInstance(returnFiber, fiber) {\n  fiber.flags = fiber.flags & ~Hydrating | Placement;\n  warnNonhydratedInstance(returnFiber, fiber);\n}\n\nfunction tryHydrate(fiber, nextInstance) {\n  switch (fiber.tag) {\n    case HostComponent:\n      {\n        var type = fiber.type;\n        var props = fiber.pendingProps;\n        var instance = canHydrateInstance(nextInstance, type);\n\n        if (instance !== null) {\n          fiber.stateNode = instance;\n          hydrationParentFiber = fiber;\n          nextHydratableInstance = getFirstHydratableChild(instance);\n          return true;\n        }\n\n        return false;\n      }\n\n    case HostText:\n      {\n        var text = fiber.pendingProps;\n        var textInstance = canHydrateTextInstance(nextInstance, text);\n\n        if (textInstance !== null) {\n          fiber.stateNode = textInstance;\n          hydrationParentFiber = fiber; // Text Instances don't have children so there's nothing to hydrate.\n\n          nextHydratableInstance = null;\n          return true;\n        }\n\n        return false;\n      }\n\n    case SuspenseComponent:\n      {\n        var suspenseInstance = canHydrateSuspenseInstance(nextInstance);\n\n        if (suspenseInstance !== null) {\n          var suspenseState = {\n            dehydrated: suspenseInstance,\n            treeContext: getSuspendedTreeContext(),\n            retryLane: OffscreenLane\n          };\n          fiber.memoizedState = suspenseState; // Store the dehydrated fragment as a child fiber.\n          // This simplifies the code for getHostSibling and deleting nodes,\n          // since it doesn't have to consider all Suspense boundaries and\n          // check if they're dehydrated ones or not.\n\n          var dehydratedFragment = createFiberFromDehydratedFragment(suspenseInstance);\n          dehydratedFragment.return = fiber;\n          fiber.child = dehydratedFragment;\n          hydrationParentFiber = fiber; // While a Suspense Instance does have children, we won't step into\n          // it during the first pass. Instead, we'll reenter it later.\n\n          nextHydratableInstance = null;\n          return true;\n        }\n\n        return false;\n      }\n\n    default:\n      return false;\n  }\n}\n\nfunction shouldClientRenderOnMismatch(fiber) {\n  return (fiber.mode & ConcurrentMode) !== NoMode && (fiber.flags & DidCapture) === NoFlags;\n}\n\nfunction throwOnHydrationMismatch(fiber) {\n  throw new Error('Hydration failed because the initial UI does not match what was ' + 'rendered on the server.');\n}\n\nfunction tryToClaimNextHydratableInstance(fiber) {\n  if (!isHydrating) {\n    return;\n  }\n\n  var nextInstance = nextHydratableInstance;\n\n  if (!nextInstance) {\n    if (shouldClientRenderOnMismatch(fiber)) {\n      warnNonhydratedInstance(hydrationParentFiber, fiber);\n      throwOnHydrationMismatch();\n    } // Nothing to hydrate. Make it an insertion.\n\n\n    insertNonHydratedInstance(hydrationParentFiber, fiber);\n    isHydrating = false;\n    hydrationParentFiber = fiber;\n    return;\n  }\n\n  var firstAttemptedInstance = nextInstance;\n\n  if (!tryHydrate(fiber, nextInstance)) {\n    if (shouldClientRenderOnMismatch(fiber)) {\n      warnNonhydratedInstance(hydrationParentFiber, fiber);\n      throwOnHydrationMismatch();\n    } // If we can't hydrate this instance let's try the next one.\n    // We use this as a heuristic. It's based on intuition and not data so it\n    // might be flawed or unnecessary.\n\n\n    nextInstance = getNextHydratableSibling(firstAttemptedInstance);\n    var prevHydrationParentFiber = hydrationParentFiber;\n\n    if (!nextInstance || !tryHydrate(fiber, nextInstance)) {\n      // Nothing to hydrate. Make it an insertion.\n      insertNonHydratedInstance(hydrationParentFiber, fiber);\n      isHydrating = false;\n      hydrationParentFiber = fiber;\n      return;\n    } // We matched the next one, we'll now assume that the first one was\n    // superfluous and we'll delete it. Since we can't eagerly delete it\n    // we'll have to schedule a deletion. To do that, this node needs a dummy\n    // fiber associated with it.\n\n\n    deleteHydratableInstance(prevHydrationParentFiber, firstAttemptedInstance);\n  }\n}\n\nfunction prepareToHydrateHostInstance(fiber, rootContainerInstance, hostContext) {\n\n  var instance = fiber.stateNode;\n  var shouldWarnIfMismatchDev = !didSuspendOrErrorDEV;\n  var updatePayload = hydrateInstance(instance, fiber.type, fiber.memoizedProps, rootContainerInstance, hostContext, fiber, shouldWarnIfMismatchDev); // TODO: Type this specific to this type of component.\n\n  fiber.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there\n  // is a new ref we mark this as an update.\n\n  if (updatePayload !== null) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction prepareToHydrateHostTextInstance(fiber) {\n\n  var textInstance = fiber.stateNode;\n  var textContent = fiber.memoizedProps;\n  var shouldUpdate = hydrateTextInstance(textInstance, textContent, fiber);\n\n  if (shouldUpdate) {\n    // We assume that prepareToHydrateHostTextInstance is called in a context where the\n    // hydration parent is the parent host component of this host text.\n    var returnFiber = hydrationParentFiber;\n\n    if (returnFiber !== null) {\n      switch (returnFiber.tag) {\n        case HostRoot:\n          {\n            var parentContainer = returnFiber.stateNode.containerInfo;\n            var isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;\n            didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, textContent, // TODO: Delete this argument when we remove the legacy root API.\n            isConcurrentMode);\n            break;\n          }\n\n        case HostComponent:\n          {\n            var parentType = returnFiber.type;\n            var parentProps = returnFiber.memoizedProps;\n            var parentInstance = returnFiber.stateNode;\n\n            var _isConcurrentMode2 = (returnFiber.mode & ConcurrentMode) !== NoMode;\n\n            didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, textContent, // TODO: Delete this argument when we remove the legacy root API.\n            _isConcurrentMode2);\n            break;\n          }\n      }\n    }\n  }\n\n  return shouldUpdate;\n}\n\nfunction prepareToHydrateHostSuspenseInstance(fiber) {\n\n  var suspenseState = fiber.memoizedState;\n  var suspenseInstance = suspenseState !== null ? suspenseState.dehydrated : null;\n\n  if (!suspenseInstance) {\n    throw new Error('Expected to have a hydrated suspense instance. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n  }\n\n  hydrateSuspenseInstance(suspenseInstance, fiber);\n}\n\nfunction skipPastDehydratedSuspenseInstance(fiber) {\n\n  var suspenseState = fiber.memoizedState;\n  var suspenseInstance = suspenseState !== null ? suspenseState.dehydrated : null;\n\n  if (!suspenseInstance) {\n    throw new Error('Expected to have a hydrated suspense instance. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n  }\n\n  return getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance);\n}\n\nfunction popToNextHostParent(fiber) {\n  var parent = fiber.return;\n\n  while (parent !== null && parent.tag !== HostComponent && parent.tag !== HostRoot && parent.tag !== SuspenseComponent) {\n    parent = parent.return;\n  }\n\n  hydrationParentFiber = parent;\n}\n\nfunction popHydrationState(fiber) {\n\n  if (fiber !== hydrationParentFiber) {\n    // We're deeper than the current hydration context, inside an inserted\n    // tree.\n    return false;\n  }\n\n  if (!isHydrating) {\n    // If we're not currently hydrating but we're in a hydration context, then\n    // we were an insertion and now need to pop up reenter hydration of our\n    // siblings.\n    popToNextHostParent(fiber);\n    isHydrating = true;\n    return false;\n  } // If we have any remaining hydratable nodes, we need to delete them now.\n  // We only do this deeper than head and body since they tend to have random\n  // other nodes in them. We also ignore components with pure text content in\n  // side of them. We also don't delete anything inside the root container.\n\n\n  if (fiber.tag !== HostRoot && (fiber.tag !== HostComponent || shouldDeleteUnhydratedTailInstances(fiber.type) && !shouldSetTextContent(fiber.type, fiber.memoizedProps))) {\n    var nextInstance = nextHydratableInstance;\n\n    if (nextInstance) {\n      if (shouldClientRenderOnMismatch(fiber)) {\n        warnIfUnhydratedTailNodes(fiber);\n        throwOnHydrationMismatch();\n      } else {\n        while (nextInstance) {\n          deleteHydratableInstance(fiber, nextInstance);\n          nextInstance = getNextHydratableSibling(nextInstance);\n        }\n      }\n    }\n  }\n\n  popToNextHostParent(fiber);\n\n  if (fiber.tag === SuspenseComponent) {\n    nextHydratableInstance = skipPastDehydratedSuspenseInstance(fiber);\n  } else {\n    nextHydratableInstance = hydrationParentFiber ? getNextHydratableSibling(fiber.stateNode) : null;\n  }\n\n  return true;\n}\n\nfunction hasUnhydratedTailNodes() {\n  return isHydrating && nextHydratableInstance !== null;\n}\n\nfunction warnIfUnhydratedTailNodes(fiber) {\n  var nextInstance = nextHydratableInstance;\n\n  while (nextInstance) {\n    warnUnhydratedInstance(fiber, nextInstance);\n    nextInstance = getNextHydratableSibling(nextInstance);\n  }\n}\n\nfunction resetHydrationState() {\n\n  hydrationParentFiber = null;\n  nextHydratableInstance = null;\n  isHydrating = false;\n  didSuspendOrErrorDEV = false;\n}\n\nfunction upgradeHydrationErrorsToRecoverable() {\n  if (hydrationErrors !== null) {\n    // Successfully completed a forced client render. The errors that occurred\n    // during the hydration attempt are now recovered. We will log them in\n    // commit phase, once the entire tree has finished.\n    queueRecoverableErrors(hydrationErrors);\n    hydrationErrors = null;\n  }\n}\n\nfunction getIsHydrating() {\n  return isHydrating;\n}\n\nfunction queueHydrationError(error) {\n  if (hydrationErrors === null) {\n    hydrationErrors = [error];\n  } else {\n    hydrationErrors.push(error);\n  }\n}\n\nvar ReactCurrentBatchConfig$1 = ReactSharedInternals.ReactCurrentBatchConfig;\nvar NoTransition = null;\nfunction requestCurrentTransition() {\n  return ReactCurrentBatchConfig$1.transition;\n}\n\nvar ReactStrictModeWarnings = {\n  recordUnsafeLifecycleWarnings: function (fiber, instance) {},\n  flushPendingUnsafeLifecycleWarnings: function () {},\n  recordLegacyContextWarning: function (fiber, instance) {},\n  flushLegacyContextWarning: function () {},\n  discardPendingWarnings: function () {}\n};\n\n{\n  var findStrictRoot = function (fiber) {\n    var maybeStrictRoot = null;\n    var node = fiber;\n\n    while (node !== null) {\n      if (node.mode & StrictLegacyMode) {\n        maybeStrictRoot = node;\n      }\n\n      node = node.return;\n    }\n\n    return maybeStrictRoot;\n  };\n\n  var setToSortedString = function (set) {\n    var array = [];\n    set.forEach(function (value) {\n      array.push(value);\n    });\n    return array.sort().join(', ');\n  };\n\n  var pendingComponentWillMountWarnings = [];\n  var pendingUNSAFE_ComponentWillMountWarnings = [];\n  var pendingComponentWillReceivePropsWarnings = [];\n  var pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n  var pendingComponentWillUpdateWarnings = [];\n  var pendingUNSAFE_ComponentWillUpdateWarnings = []; // Tracks components we have already warned about.\n\n  var didWarnAboutUnsafeLifecycles = new Set();\n\n  ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (fiber, instance) {\n    // Dedupe strategy: Warn once per component.\n    if (didWarnAboutUnsafeLifecycles.has(fiber.type)) {\n      return;\n    }\n\n    if (typeof instance.componentWillMount === 'function' && // Don't warn about react-lifecycles-compat polyfilled components.\n    instance.componentWillMount.__suppressDeprecationWarning !== true) {\n      pendingComponentWillMountWarnings.push(fiber);\n    }\n\n    if (fiber.mode & StrictLegacyMode && typeof instance.UNSAFE_componentWillMount === 'function') {\n      pendingUNSAFE_ComponentWillMountWarnings.push(fiber);\n    }\n\n    if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n      pendingComponentWillReceivePropsWarnings.push(fiber);\n    }\n\n    if (fiber.mode & StrictLegacyMode && typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n      pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber);\n    }\n\n    if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n      pendingComponentWillUpdateWarnings.push(fiber);\n    }\n\n    if (fiber.mode & StrictLegacyMode && typeof instance.UNSAFE_componentWillUpdate === 'function') {\n      pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber);\n    }\n  };\n\n  ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {\n    // We do an initial pass to gather component names\n    var componentWillMountUniqueNames = new Set();\n\n    if (pendingComponentWillMountWarnings.length > 0) {\n      pendingComponentWillMountWarnings.forEach(function (fiber) {\n        componentWillMountUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingComponentWillMountWarnings = [];\n    }\n\n    var UNSAFE_componentWillMountUniqueNames = new Set();\n\n    if (pendingUNSAFE_ComponentWillMountWarnings.length > 0) {\n      pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {\n        UNSAFE_componentWillMountUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingUNSAFE_ComponentWillMountWarnings = [];\n    }\n\n    var componentWillReceivePropsUniqueNames = new Set();\n\n    if (pendingComponentWillReceivePropsWarnings.length > 0) {\n      pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {\n        componentWillReceivePropsUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingComponentWillReceivePropsWarnings = [];\n    }\n\n    var UNSAFE_componentWillReceivePropsUniqueNames = new Set();\n\n    if (pendingUNSAFE_ComponentWillReceivePropsWarnings.length > 0) {\n      pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(function (fiber) {\n        UNSAFE_componentWillReceivePropsUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n    }\n\n    var componentWillUpdateUniqueNames = new Set();\n\n    if (pendingComponentWillUpdateWarnings.length > 0) {\n      pendingComponentWillUpdateWarnings.forEach(function (fiber) {\n        componentWillUpdateUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingComponentWillUpdateWarnings = [];\n    }\n\n    var UNSAFE_componentWillUpdateUniqueNames = new Set();\n\n    if (pendingUNSAFE_ComponentWillUpdateWarnings.length > 0) {\n      pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {\n        UNSAFE_componentWillUpdateUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n        didWarnAboutUnsafeLifecycles.add(fiber.type);\n      });\n      pendingUNSAFE_ComponentWillUpdateWarnings = [];\n    } // Finally, we flush all the warnings\n    // UNSAFE_ ones before the deprecated ones, since they'll be 'louder'\n\n\n    if (UNSAFE_componentWillMountUniqueNames.size > 0) {\n      var sortedNames = setToSortedString(UNSAFE_componentWillMountUniqueNames);\n\n      error('Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n' + '\\nPlease update the following components: %s', sortedNames);\n    }\n\n    if (UNSAFE_componentWillReceivePropsUniqueNames.size > 0) {\n      var _sortedNames = setToSortedString(UNSAFE_componentWillReceivePropsUniqueNames);\n\n      error('Using UNSAFE_componentWillReceiveProps in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + \"* If you're updating state whenever props change, \" + 'refactor your code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://reactjs.org/link/derived-state\\n' + '\\nPlease update the following components: %s', _sortedNames);\n    }\n\n    if (UNSAFE_componentWillUpdateUniqueNames.size > 0) {\n      var _sortedNames2 = setToSortedString(UNSAFE_componentWillUpdateUniqueNames);\n\n      error('Using UNSAFE_componentWillUpdate in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + '\\nPlease update the following components: %s', _sortedNames2);\n    }\n\n    if (componentWillMountUniqueNames.size > 0) {\n      var _sortedNames3 = setToSortedString(componentWillMountUniqueNames);\n\n      warn('componentWillMount has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n' + '* Rename componentWillMount to UNSAFE_componentWillMount to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames3);\n    }\n\n    if (componentWillReceivePropsUniqueNames.size > 0) {\n      var _sortedNames4 = setToSortedString(componentWillReceivePropsUniqueNames);\n\n      warn('componentWillReceiveProps has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + \"* If you're updating state whenever props change, refactor your \" + 'code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://reactjs.org/link/derived-state\\n' + '* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames4);\n    }\n\n    if (componentWillUpdateUniqueNames.size > 0) {\n      var _sortedNames5 = setToSortedString(componentWillUpdateUniqueNames);\n\n      warn('componentWillUpdate has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + '* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames5);\n    }\n  };\n\n  var pendingLegacyContextWarning = new Map(); // Tracks components we have already warned about.\n\n  var didWarnAboutLegacyContext = new Set();\n\n  ReactStrictModeWarnings.recordLegacyContextWarning = function (fiber, instance) {\n    var strictRoot = findStrictRoot(fiber);\n\n    if (strictRoot === null) {\n      error('Expected to find a StrictMode component in a strict mode tree. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n\n      return;\n    } // Dedup strategy: Warn once per component.\n\n\n    if (didWarnAboutLegacyContext.has(fiber.type)) {\n      return;\n    }\n\n    var warningsForRoot = pendingLegacyContextWarning.get(strictRoot);\n\n    if (fiber.type.contextTypes != null || fiber.type.childContextTypes != null || instance !== null && typeof instance.getChildContext === 'function') {\n      if (warningsForRoot === undefined) {\n        warningsForRoot = [];\n        pendingLegacyContextWarning.set(strictRoot, warningsForRoot);\n      }\n\n      warningsForRoot.push(fiber);\n    }\n  };\n\n  ReactStrictModeWarnings.flushLegacyContextWarning = function () {\n    pendingLegacyContextWarning.forEach(function (fiberArray, strictRoot) {\n      if (fiberArray.length === 0) {\n        return;\n      }\n\n      var firstFiber = fiberArray[0];\n      var uniqueNames = new Set();\n      fiberArray.forEach(function (fiber) {\n        uniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n        didWarnAboutLegacyContext.add(fiber.type);\n      });\n      var sortedNames = setToSortedString(uniqueNames);\n\n      try {\n        setCurrentFiber(firstFiber);\n\n        error('Legacy context API has been detected within a strict-mode tree.' + '\\n\\nThe old API will be supported in all 16.x releases, but applications ' + 'using it should migrate to the new version.' + '\\n\\nPlease update the following components: %s' + '\\n\\nLearn more about this warning here: https://reactjs.org/link/legacy-context', sortedNames);\n      } finally {\n        resetCurrentFiber();\n      }\n    });\n  };\n\n  ReactStrictModeWarnings.discardPendingWarnings = function () {\n    pendingComponentWillMountWarnings = [];\n    pendingUNSAFE_ComponentWillMountWarnings = [];\n    pendingComponentWillReceivePropsWarnings = [];\n    pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n    pendingComponentWillUpdateWarnings = [];\n    pendingUNSAFE_ComponentWillUpdateWarnings = [];\n    pendingLegacyContextWarning = new Map();\n  };\n}\n\nvar didWarnAboutMaps;\nvar didWarnAboutGenerators;\nvar didWarnAboutStringRefs;\nvar ownerHasKeyUseWarning;\nvar ownerHasFunctionTypeWarning;\n\nvar warnForMissingKey = function (child, returnFiber) {};\n\n{\n  didWarnAboutMaps = false;\n  didWarnAboutGenerators = false;\n  didWarnAboutStringRefs = {};\n  /**\n   * Warn if there's no key explicitly set on dynamic arrays of children or\n   * object keys are not valid. This allows us to keep track of children between\n   * updates.\n   */\n\n  ownerHasKeyUseWarning = {};\n  ownerHasFunctionTypeWarning = {};\n\n  warnForMissingKey = function (child, returnFiber) {\n    if (child === null || typeof child !== 'object') {\n      return;\n    }\n\n    if (!child._store || child._store.validated || child.key != null) {\n      return;\n    }\n\n    if (typeof child._store !== 'object') {\n      throw new Error('React Component in warnForMissingKey should have a _store. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n    }\n\n    child._store.validated = true;\n    var componentName = getComponentNameFromFiber(returnFiber) || 'Component';\n\n    if (ownerHasKeyUseWarning[componentName]) {\n      return;\n    }\n\n    ownerHasKeyUseWarning[componentName] = true;\n\n    error('Each child in a list should have a unique ' + '\"key\" prop. See https://reactjs.org/link/warning-keys for ' + 'more information.');\n  };\n}\n\nfunction isReactClass(type) {\n  return type.prototype && type.prototype.isReactComponent;\n}\n\nfunction coerceRef(returnFiber, current, element) {\n  var mixedRef = element.ref;\n\n  if (mixedRef !== null && typeof mixedRef !== 'function' && typeof mixedRef !== 'object') {\n    {\n      // TODO: Clean this up once we turn on the string ref warning for\n      // everyone, because the strict mode case will no longer be relevant\n      if ((returnFiber.mode & StrictLegacyMode || warnAboutStringRefs) && // We warn in ReactElement.js if owner and self are equal for string refs\n      // because these cannot be automatically converted to an arrow function\n      // using a codemod. Therefore, we don't have to warn about string refs again.\n      !(element._owner && element._self && element._owner.stateNode !== element._self) && // Will already throw with \"Function components cannot have string refs\"\n      !(element._owner && element._owner.tag !== ClassComponent) && // Will already warn with \"Function components cannot be given refs\"\n      !(typeof element.type === 'function' && !isReactClass(element.type)) && // Will already throw with \"Element ref was specified as a string (someStringRef) but no owner was set\"\n      element._owner) {\n        var componentName = getComponentNameFromFiber(returnFiber) || 'Component';\n\n        if (!didWarnAboutStringRefs[componentName]) {\n          {\n            error('Component \"%s\" contains the string ref \"%s\". Support for string refs ' + 'will be removed in a future major release. We recommend using ' + 'useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, mixedRef);\n          }\n\n          didWarnAboutStringRefs[componentName] = true;\n        }\n      }\n    }\n\n    if (element._owner) {\n      var owner = element._owner;\n      var inst;\n\n      if (owner) {\n        var ownerFiber = owner;\n\n        if (ownerFiber.tag !== ClassComponent) {\n          throw new Error('Function components cannot have string refs. ' + 'We recommend using useRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref');\n        }\n\n        inst = ownerFiber.stateNode;\n      }\n\n      if (!inst) {\n        throw new Error(\"Missing owner for string ref \" + mixedRef + \". This error is likely caused by a \" + 'bug in React. Please file an issue.');\n      } // Assigning this to a const so Flow knows it won't change in the closure\n\n\n      var resolvedInst = inst;\n\n      {\n        checkPropStringCoercion(mixedRef, 'ref');\n      }\n\n      var stringRef = '' + mixedRef; // Check if previous string ref matches new string ref\n\n      if (current !== null && current.ref !== null && typeof current.ref === 'function' && current.ref._stringRef === stringRef) {\n        return current.ref;\n      }\n\n      var ref = function (value) {\n        var refs = resolvedInst.refs;\n\n        if (value === null) {\n          delete refs[stringRef];\n        } else {\n          refs[stringRef] = value;\n        }\n      };\n\n      ref._stringRef = stringRef;\n      return ref;\n    } else {\n      if (typeof mixedRef !== 'string') {\n        throw new Error('Expected ref to be a function, a string, an object returned by React.createRef(), or null.');\n      }\n\n      if (!element._owner) {\n        throw new Error(\"Element ref was specified as a string (\" + mixedRef + \") but no owner was set. This could happen for one of\" + ' the following reasons:\\n' + '1. You may be adding a ref to a function component\\n' + \"2. You may be adding a ref to a component that was not created inside a component's render method\\n\" + '3. You have multiple copies of React loaded\\n' + 'See https://reactjs.org/link/refs-must-have-owner for more information.');\n      }\n    }\n  }\n\n  return mixedRef;\n}\n\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n  var childString = Object.prototype.toString.call(newChild);\n  throw new Error(\"Objects are not valid as a React child (found: \" + (childString === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : childString) + \"). \" + 'If you meant to render a collection of children, use an array ' + 'instead.');\n}\n\nfunction warnOnFunctionType(returnFiber) {\n  {\n    var componentName = getComponentNameFromFiber(returnFiber) || 'Component';\n\n    if (ownerHasFunctionTypeWarning[componentName]) {\n      return;\n    }\n\n    ownerHasFunctionTypeWarning[componentName] = true;\n\n    error('Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.');\n  }\n}\n\nfunction resolveLazy(lazyType) {\n  var payload = lazyType._payload;\n  var init = lazyType._init;\n  return init(payload);\n} // This wrapper function exists because I expect to clone the code in each path\n// to be able to optimize each path individually by branching early. This needs\n// a compiler or we can do it manually. Helpers that don't need this branching\n// live outside of this function.\n\n\nfunction ChildReconciler(shouldTrackSideEffects) {\n  function deleteChild(returnFiber, childToDelete) {\n    if (!shouldTrackSideEffects) {\n      // Noop.\n      return;\n    }\n\n    var deletions = returnFiber.deletions;\n\n    if (deletions === null) {\n      returnFiber.deletions = [childToDelete];\n      returnFiber.flags |= ChildDeletion;\n    } else {\n      deletions.push(childToDelete);\n    }\n  }\n\n  function deleteRemainingChildren(returnFiber, currentFirstChild) {\n    if (!shouldTrackSideEffects) {\n      // Noop.\n      return null;\n    } // TODO: For the shouldClone case, this could be micro-optimized a bit by\n    // assuming that after the first child we've already added everything.\n\n\n    var childToDelete = currentFirstChild;\n\n    while (childToDelete !== null) {\n      deleteChild(returnFiber, childToDelete);\n      childToDelete = childToDelete.sibling;\n    }\n\n    return null;\n  }\n\n  function mapRemainingChildren(returnFiber, currentFirstChild) {\n    // Add the remaining children to a temporary map so that we can find them by\n    // keys quickly. Implicit (null) keys get added to this set with their index\n    // instead.\n    var existingChildren = new Map();\n    var existingChild = currentFirstChild;\n\n    while (existingChild !== null) {\n      if (existingChild.key !== null) {\n        existingChildren.set(existingChild.key, existingChild);\n      } else {\n        existingChildren.set(existingChild.index, existingChild);\n      }\n\n      existingChild = existingChild.sibling;\n    }\n\n    return existingChildren;\n  }\n\n  function useFiber(fiber, pendingProps) {\n    // We currently set sibling to null and index to 0 here because it is easy\n    // to forget to do before returning it. E.g. for the single child case.\n    var clone = createWorkInProgress(fiber, pendingProps);\n    clone.index = 0;\n    clone.sibling = null;\n    return clone;\n  }\n\n  function placeChild(newFiber, lastPlacedIndex, newIndex) {\n    newFiber.index = newIndex;\n\n    if (!shouldTrackSideEffects) {\n      // During hydration, the useId algorithm needs to know which fibers are\n      // part of a list of children (arrays, iterators).\n      newFiber.flags |= Forked;\n      return lastPlacedIndex;\n    }\n\n    var current = newFiber.alternate;\n\n    if (current !== null) {\n      var oldIndex = current.index;\n\n      if (oldIndex < lastPlacedIndex) {\n        // This is a move.\n        newFiber.flags |= Placement;\n        return lastPlacedIndex;\n      } else {\n        // This item can stay in place.\n        return oldIndex;\n      }\n    } else {\n      // This is an insertion.\n      newFiber.flags |= Placement;\n      return lastPlacedIndex;\n    }\n  }\n\n  function placeSingleChild(newFiber) {\n    // This is simpler for the single child case. We only need to do a\n    // placement for inserting new children.\n    if (shouldTrackSideEffects && newFiber.alternate === null) {\n      newFiber.flags |= Placement;\n    }\n\n    return newFiber;\n  }\n\n  function updateTextNode(returnFiber, current, textContent, lanes) {\n    if (current === null || current.tag !== HostText) {\n      // Insert\n      var created = createFiberFromText(textContent, returnFiber.mode, lanes);\n      created.return = returnFiber;\n      return created;\n    } else {\n      // Update\n      var existing = useFiber(current, textContent);\n      existing.return = returnFiber;\n      return existing;\n    }\n  }\n\n  function updateElement(returnFiber, current, element, lanes) {\n    var elementType = element.type;\n\n    if (elementType === REACT_FRAGMENT_TYPE) {\n      return updateFragment(returnFiber, current, element.props.children, lanes, element.key);\n    }\n\n    if (current !== null) {\n      if (current.elementType === elementType || ( // Keep this check inline so it only runs on the false path:\n       isCompatibleFamilyForHotReloading(current, element) ) || // Lazy types should reconcile their resolved type.\n      // We need to do this after the Hot Reloading check above,\n      // because hot reloading has different semantics than prod because\n      // it doesn't resuspend. So we can't let the call below suspend.\n      typeof elementType === 'object' && elementType !== null && elementType.$$typeof === REACT_LAZY_TYPE && resolveLazy(elementType) === current.type) {\n        // Move based on index\n        var existing = useFiber(current, element.props);\n        existing.ref = coerceRef(returnFiber, current, element);\n        existing.return = returnFiber;\n\n        {\n          existing._debugSource = element._source;\n          existing._debugOwner = element._owner;\n        }\n\n        return existing;\n      }\n    } // Insert\n\n\n    var created = createFiberFromElement(element, returnFiber.mode, lanes);\n    created.ref = coerceRef(returnFiber, current, element);\n    created.return = returnFiber;\n    return created;\n  }\n\n  function updatePortal(returnFiber, current, portal, lanes) {\n    if (current === null || current.tag !== HostPortal || current.stateNode.containerInfo !== portal.containerInfo || current.stateNode.implementation !== portal.implementation) {\n      // Insert\n      var created = createFiberFromPortal(portal, returnFiber.mode, lanes);\n      created.return = returnFiber;\n      return created;\n    } else {\n      // Update\n      var existing = useFiber(current, portal.children || []);\n      existing.return = returnFiber;\n      return existing;\n    }\n  }\n\n  function updateFragment(returnFiber, current, fragment, lanes, key) {\n    if (current === null || current.tag !== Fragment) {\n      // Insert\n      var created = createFiberFromFragment(fragment, returnFiber.mode, lanes, key);\n      created.return = returnFiber;\n      return created;\n    } else {\n      // Update\n      var existing = useFiber(current, fragment);\n      existing.return = returnFiber;\n      return existing;\n    }\n  }\n\n  function createChild(returnFiber, newChild, lanes) {\n    if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {\n      // Text nodes don't have keys. If the previous node is implicitly keyed\n      // we can continue to replace it without aborting even if it is not a text\n      // node.\n      var created = createFiberFromText('' + newChild, returnFiber.mode, lanes);\n      created.return = returnFiber;\n      return created;\n    }\n\n    if (typeof newChild === 'object' && newChild !== null) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          {\n            var _created = createFiberFromElement(newChild, returnFiber.mode, lanes);\n\n            _created.ref = coerceRef(returnFiber, null, newChild);\n            _created.return = returnFiber;\n            return _created;\n          }\n\n        case REACT_PORTAL_TYPE:\n          {\n            var _created2 = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n\n            _created2.return = returnFiber;\n            return _created2;\n          }\n\n        case REACT_LAZY_TYPE:\n          {\n            var payload = newChild._payload;\n            var init = newChild._init;\n            return createChild(returnFiber, init(payload), lanes);\n          }\n      }\n\n      if (isArray(newChild) || getIteratorFn(newChild)) {\n        var _created3 = createFiberFromFragment(newChild, returnFiber.mode, lanes, null);\n\n        _created3.return = returnFiber;\n        return _created3;\n      }\n\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n\n    {\n      if (typeof newChild === 'function') {\n        warnOnFunctionType(returnFiber);\n      }\n    }\n\n    return null;\n  }\n\n  function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n    // Update the fiber if the keys match, otherwise return null.\n    var key = oldFiber !== null ? oldFiber.key : null;\n\n    if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {\n      // Text nodes don't have keys. If the previous node is implicitly keyed\n      // we can continue to replace it without aborting even if it is not a text\n      // node.\n      if (key !== null) {\n        return null;\n      }\n\n      return updateTextNode(returnFiber, oldFiber, '' + newChild, lanes);\n    }\n\n    if (typeof newChild === 'object' && newChild !== null) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          {\n            if (newChild.key === key) {\n              return updateElement(returnFiber, oldFiber, newChild, lanes);\n            } else {\n              return null;\n            }\n          }\n\n        case REACT_PORTAL_TYPE:\n          {\n            if (newChild.key === key) {\n              return updatePortal(returnFiber, oldFiber, newChild, lanes);\n            } else {\n              return null;\n            }\n          }\n\n        case REACT_LAZY_TYPE:\n          {\n            var payload = newChild._payload;\n            var init = newChild._init;\n            return updateSlot(returnFiber, oldFiber, init(payload), lanes);\n          }\n      }\n\n      if (isArray(newChild) || getIteratorFn(newChild)) {\n        if (key !== null) {\n          return null;\n        }\n\n        return updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n      }\n\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n\n    {\n      if (typeof newChild === 'function') {\n        warnOnFunctionType(returnFiber);\n      }\n    }\n\n    return null;\n  }\n\n  function updateFromMap(existingChildren, returnFiber, newIdx, newChild, lanes) {\n    if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {\n      // Text nodes don't have keys, so we neither have to check the old nor\n      // new node for the key. If both are text nodes, they match.\n      var matchedFiber = existingChildren.get(newIdx) || null;\n      return updateTextNode(returnFiber, matchedFiber, '' + newChild, lanes);\n    }\n\n    if (typeof newChild === 'object' && newChild !== null) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          {\n            var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n\n            return updateElement(returnFiber, _matchedFiber, newChild, lanes);\n          }\n\n        case REACT_PORTAL_TYPE:\n          {\n            var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n\n            return updatePortal(returnFiber, _matchedFiber2, newChild, lanes);\n          }\n\n        case REACT_LAZY_TYPE:\n          var payload = newChild._payload;\n          var init = newChild._init;\n          return updateFromMap(existingChildren, returnFiber, newIdx, init(payload), lanes);\n      }\n\n      if (isArray(newChild) || getIteratorFn(newChild)) {\n        var _matchedFiber3 = existingChildren.get(newIdx) || null;\n\n        return updateFragment(returnFiber, _matchedFiber3, newChild, lanes, null);\n      }\n\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n\n    {\n      if (typeof newChild === 'function') {\n        warnOnFunctionType(returnFiber);\n      }\n    }\n\n    return null;\n  }\n  /**\n   * Warns if there is a duplicate or missing key\n   */\n\n\n  function warnOnInvalidKey(child, knownKeys, returnFiber) {\n    {\n      if (typeof child !== 'object' || child === null) {\n        return knownKeys;\n      }\n\n      switch (child.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n        case REACT_PORTAL_TYPE:\n          warnForMissingKey(child, returnFiber);\n          var key = child.key;\n\n          if (typeof key !== 'string') {\n            break;\n          }\n\n          if (knownKeys === null) {\n            knownKeys = new Set();\n            knownKeys.add(key);\n            break;\n          }\n\n          if (!knownKeys.has(key)) {\n            knownKeys.add(key);\n            break;\n          }\n\n          error('Encountered two children with the same key, `%s`. ' + 'Keys should be unique so that components maintain their identity ' + 'across updates. Non-unique keys may cause children to be ' + 'duplicated and/or omitted — the behavior is unsupported and ' + 'could change in a future version.', key);\n\n          break;\n\n        case REACT_LAZY_TYPE:\n          var payload = child._payload;\n          var init = child._init;\n          warnOnInvalidKey(init(payload), knownKeys, returnFiber);\n          break;\n      }\n    }\n\n    return knownKeys;\n  }\n\n  function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, lanes) {\n    // This algorithm can't optimize by searching from both ends since we\n    // don't have backpointers on fibers. I'm trying to see how far we can get\n    // with that model. If it ends up not being worth the tradeoffs, we can\n    // add it later.\n    // Even with a two ended optimization, we'd want to optimize for the case\n    // where there are few changes and brute force the comparison instead of\n    // going for the Map. It'd like to explore hitting that path first in\n    // forward-only mode and only go for the Map once we notice that we need\n    // lots of look ahead. This doesn't handle reversal as well as two ended\n    // search but that's unusual. Besides, for the two ended optimization to\n    // work on Iterables, we'd need to copy the whole set.\n    // In this first iteration, we'll just live with hitting the bad case\n    // (adding everything to a Map) in for every insert/move.\n    // If you change this code, also update reconcileChildrenIterator() which\n    // uses the same algorithm.\n    {\n      // First, validate keys.\n      var knownKeys = null;\n\n      for (var i = 0; i < newChildren.length; i++) {\n        var child = newChildren[i];\n        knownKeys = warnOnInvalidKey(child, knownKeys, returnFiber);\n      }\n    }\n\n    var resultingFirstChild = null;\n    var previousNewFiber = null;\n    var oldFiber = currentFirstChild;\n    var lastPlacedIndex = 0;\n    var newIdx = 0;\n    var nextOldFiber = null;\n\n    for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) {\n      if (oldFiber.index > newIdx) {\n        nextOldFiber = oldFiber;\n        oldFiber = null;\n      } else {\n        nextOldFiber = oldFiber.sibling;\n      }\n\n      var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], lanes);\n\n      if (newFiber === null) {\n        // TODO: This breaks on empty slots like null children. That's\n        // unfortunate because it triggers the slow path all the time. We need\n        // a better way to communicate whether this was a miss or null,\n        // boolean, undefined, etc.\n        if (oldFiber === null) {\n          oldFiber = nextOldFiber;\n        }\n\n        break;\n      }\n\n      if (shouldTrackSideEffects) {\n        if (oldFiber && newFiber.alternate === null) {\n          // We matched the slot, but we didn't reuse the existing fiber, so we\n          // need to delete the existing child.\n          deleteChild(returnFiber, oldFiber);\n        }\n      }\n\n      lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n\n      if (previousNewFiber === null) {\n        // TODO: Move out of the loop. This only happens for the first run.\n        resultingFirstChild = newFiber;\n      } else {\n        // TODO: Defer siblings if we're not at the right index for this slot.\n        // I.e. if we had null values before, then we want to defer this\n        // for each null value. However, we also don't want to call updateSlot\n        // with the previous one.\n        previousNewFiber.sibling = newFiber;\n      }\n\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n\n    if (newIdx === newChildren.length) {\n      // We've reached the end of the new children. We can delete the rest.\n      deleteRemainingChildren(returnFiber, oldFiber);\n\n      if (getIsHydrating()) {\n        var numberOfForks = newIdx;\n        pushTreeFork(returnFiber, numberOfForks);\n      }\n\n      return resultingFirstChild;\n    }\n\n    if (oldFiber === null) {\n      // If we don't have any more existing children we can choose a fast path\n      // since the rest will all be insertions.\n      for (; newIdx < newChildren.length; newIdx++) {\n        var _newFiber = createChild(returnFiber, newChildren[newIdx], lanes);\n\n        if (_newFiber === null) {\n          continue;\n        }\n\n        lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx);\n\n        if (previousNewFiber === null) {\n          // TODO: Move out of the loop. This only happens for the first run.\n          resultingFirstChild = _newFiber;\n        } else {\n          previousNewFiber.sibling = _newFiber;\n        }\n\n        previousNewFiber = _newFiber;\n      }\n\n      if (getIsHydrating()) {\n        var _numberOfForks = newIdx;\n        pushTreeFork(returnFiber, _numberOfForks);\n      }\n\n      return resultingFirstChild;\n    } // Add all children to a key map for quick lookups.\n\n\n    var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.\n\n    for (; newIdx < newChildren.length; newIdx++) {\n      var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], lanes);\n\n      if (_newFiber2 !== null) {\n        if (shouldTrackSideEffects) {\n          if (_newFiber2.alternate !== null) {\n            // The new fiber is a work in progress, but if there exists a\n            // current, that means that we reused the fiber. We need to delete\n            // it from the child list so that we don't add it to the deletion\n            // list.\n            existingChildren.delete(_newFiber2.key === null ? newIdx : _newFiber2.key);\n          }\n        }\n\n        lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx);\n\n        if (previousNewFiber === null) {\n          resultingFirstChild = _newFiber2;\n        } else {\n          previousNewFiber.sibling = _newFiber2;\n        }\n\n        previousNewFiber = _newFiber2;\n      }\n    }\n\n    if (shouldTrackSideEffects) {\n      // Any existing children that weren't consumed above were deleted. We need\n      // to add them to the deletion list.\n      existingChildren.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    }\n\n    if (getIsHydrating()) {\n      var _numberOfForks2 = newIdx;\n      pushTreeFork(returnFiber, _numberOfForks2);\n    }\n\n    return resultingFirstChild;\n  }\n\n  function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, lanes) {\n    // This is the same implementation as reconcileChildrenArray(),\n    // but using the iterator instead.\n    var iteratorFn = getIteratorFn(newChildrenIterable);\n\n    if (typeof iteratorFn !== 'function') {\n      throw new Error('An object is not an iterable. This error is likely caused by a bug in ' + 'React. Please file an issue.');\n    }\n\n    {\n      // We don't support rendering Generators because it's a mutation.\n      // See https://github.com/facebook/react/issues/12995\n      if (typeof Symbol === 'function' && // $FlowFixMe Flow doesn't know about toStringTag\n      newChildrenIterable[Symbol.toStringTag] === 'Generator') {\n        if (!didWarnAboutGenerators) {\n          error('Using Generators as children is unsupported and will likely yield ' + 'unexpected results because enumerating a generator mutates it. ' + 'You may convert it to an array with `Array.from()` or the ' + '`[...spread]` operator before rendering. Keep in mind ' + 'you might need to polyfill these features for older browsers.');\n        }\n\n        didWarnAboutGenerators = true;\n      } // Warn about using Maps as children\n\n\n      if (newChildrenIterable.entries === iteratorFn) {\n        if (!didWarnAboutMaps) {\n          error('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');\n        }\n\n        didWarnAboutMaps = true;\n      } // First, validate keys.\n      // We'll get a different iterator later for the main pass.\n\n\n      var _newChildren = iteratorFn.call(newChildrenIterable);\n\n      if (_newChildren) {\n        var knownKeys = null;\n\n        var _step = _newChildren.next();\n\n        for (; !_step.done; _step = _newChildren.next()) {\n          var child = _step.value;\n          knownKeys = warnOnInvalidKey(child, knownKeys, returnFiber);\n        }\n      }\n    }\n\n    var newChildren = iteratorFn.call(newChildrenIterable);\n\n    if (newChildren == null) {\n      throw new Error('An iterable object provided no iterator.');\n    }\n\n    var resultingFirstChild = null;\n    var previousNewFiber = null;\n    var oldFiber = currentFirstChild;\n    var lastPlacedIndex = 0;\n    var newIdx = 0;\n    var nextOldFiber = null;\n    var step = newChildren.next();\n\n    for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) {\n      if (oldFiber.index > newIdx) {\n        nextOldFiber = oldFiber;\n        oldFiber = null;\n      } else {\n        nextOldFiber = oldFiber.sibling;\n      }\n\n      var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n\n      if (newFiber === null) {\n        // TODO: This breaks on empty slots like null children. That's\n        // unfortunate because it triggers the slow path all the time. We need\n        // a better way to communicate whether this was a miss or null,\n        // boolean, undefined, etc.\n        if (oldFiber === null) {\n          oldFiber = nextOldFiber;\n        }\n\n        break;\n      }\n\n      if (shouldTrackSideEffects) {\n        if (oldFiber && newFiber.alternate === null) {\n          // We matched the slot, but we didn't reuse the existing fiber, so we\n          // need to delete the existing child.\n          deleteChild(returnFiber, oldFiber);\n        }\n      }\n\n      lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n\n      if (previousNewFiber === null) {\n        // TODO: Move out of the loop. This only happens for the first run.\n        resultingFirstChild = newFiber;\n      } else {\n        // TODO: Defer siblings if we're not at the right index for this slot.\n        // I.e. if we had null values before, then we want to defer this\n        // for each null value. However, we also don't want to call updateSlot\n        // with the previous one.\n        previousNewFiber.sibling = newFiber;\n      }\n\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n\n    if (step.done) {\n      // We've reached the end of the new children. We can delete the rest.\n      deleteRemainingChildren(returnFiber, oldFiber);\n\n      if (getIsHydrating()) {\n        var numberOfForks = newIdx;\n        pushTreeFork(returnFiber, numberOfForks);\n      }\n\n      return resultingFirstChild;\n    }\n\n    if (oldFiber === null) {\n      // If we don't have any more existing children we can choose a fast path\n      // since the rest will all be insertions.\n      for (; !step.done; newIdx++, step = newChildren.next()) {\n        var _newFiber3 = createChild(returnFiber, step.value, lanes);\n\n        if (_newFiber3 === null) {\n          continue;\n        }\n\n        lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx);\n\n        if (previousNewFiber === null) {\n          // TODO: Move out of the loop. This only happens for the first run.\n          resultingFirstChild = _newFiber3;\n        } else {\n          previousNewFiber.sibling = _newFiber3;\n        }\n\n        previousNewFiber = _newFiber3;\n      }\n\n      if (getIsHydrating()) {\n        var _numberOfForks3 = newIdx;\n        pushTreeFork(returnFiber, _numberOfForks3);\n      }\n\n      return resultingFirstChild;\n    } // Add all children to a key map for quick lookups.\n\n\n    var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.\n\n    for (; !step.done; newIdx++, step = newChildren.next()) {\n      var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, lanes);\n\n      if (_newFiber4 !== null) {\n        if (shouldTrackSideEffects) {\n          if (_newFiber4.alternate !== null) {\n            // The new fiber is a work in progress, but if there exists a\n            // current, that means that we reused the fiber. We need to delete\n            // it from the child list so that we don't add it to the deletion\n            // list.\n            existingChildren.delete(_newFiber4.key === null ? newIdx : _newFiber4.key);\n          }\n        }\n\n        lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx);\n\n        if (previousNewFiber === null) {\n          resultingFirstChild = _newFiber4;\n        } else {\n          previousNewFiber.sibling = _newFiber4;\n        }\n\n        previousNewFiber = _newFiber4;\n      }\n    }\n\n    if (shouldTrackSideEffects) {\n      // Any existing children that weren't consumed above were deleted. We need\n      // to add them to the deletion list.\n      existingChildren.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    }\n\n    if (getIsHydrating()) {\n      var _numberOfForks4 = newIdx;\n      pushTreeFork(returnFiber, _numberOfForks4);\n    }\n\n    return resultingFirstChild;\n  }\n\n  function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, lanes) {\n    // There's no need to check for keys on text nodes since we don't have a\n    // way to define them.\n    if (currentFirstChild !== null && currentFirstChild.tag === HostText) {\n      // We already have an existing node so let's just update it and delete\n      // the rest.\n      deleteRemainingChildren(returnFiber, currentFirstChild.sibling);\n      var existing = useFiber(currentFirstChild, textContent);\n      existing.return = returnFiber;\n      return existing;\n    } // The existing first child is not a text node so we need to create one\n    // and delete the existing ones.\n\n\n    deleteRemainingChildren(returnFiber, currentFirstChild);\n    var created = createFiberFromText(textContent, returnFiber.mode, lanes);\n    created.return = returnFiber;\n    return created;\n  }\n\n  function reconcileSingleElement(returnFiber, currentFirstChild, element, lanes) {\n    var key = element.key;\n    var child = currentFirstChild;\n\n    while (child !== null) {\n      // TODO: If key === null and child.key === null, then this only applies to\n      // the first item in the list.\n      if (child.key === key) {\n        var elementType = element.type;\n\n        if (elementType === REACT_FRAGMENT_TYPE) {\n          if (child.tag === Fragment) {\n            deleteRemainingChildren(returnFiber, child.sibling);\n            var existing = useFiber(child, element.props.children);\n            existing.return = returnFiber;\n\n            {\n              existing._debugSource = element._source;\n              existing._debugOwner = element._owner;\n            }\n\n            return existing;\n          }\n        } else {\n          if (child.elementType === elementType || ( // Keep this check inline so it only runs on the false path:\n           isCompatibleFamilyForHotReloading(child, element) ) || // Lazy types should reconcile their resolved type.\n          // We need to do this after the Hot Reloading check above,\n          // because hot reloading has different semantics than prod because\n          // it doesn't resuspend. So we can't let the call below suspend.\n          typeof elementType === 'object' && elementType !== null && elementType.$$typeof === REACT_LAZY_TYPE && resolveLazy(elementType) === child.type) {\n            deleteRemainingChildren(returnFiber, child.sibling);\n\n            var _existing = useFiber(child, element.props);\n\n            _existing.ref = coerceRef(returnFiber, child, element);\n            _existing.return = returnFiber;\n\n            {\n              _existing._debugSource = element._source;\n              _existing._debugOwner = element._owner;\n            }\n\n            return _existing;\n          }\n        } // Didn't match.\n\n\n        deleteRemainingChildren(returnFiber, child);\n        break;\n      } else {\n        deleteChild(returnFiber, child);\n      }\n\n      child = child.sibling;\n    }\n\n    if (element.type === REACT_FRAGMENT_TYPE) {\n      var created = createFiberFromFragment(element.props.children, returnFiber.mode, lanes, element.key);\n      created.return = returnFiber;\n      return created;\n    } else {\n      var _created4 = createFiberFromElement(element, returnFiber.mode, lanes);\n\n      _created4.ref = coerceRef(returnFiber, currentFirstChild, element);\n      _created4.return = returnFiber;\n      return _created4;\n    }\n  }\n\n  function reconcileSinglePortal(returnFiber, currentFirstChild, portal, lanes) {\n    var key = portal.key;\n    var child = currentFirstChild;\n\n    while (child !== null) {\n      // TODO: If key === null and child.key === null, then this only applies to\n      // the first item in the list.\n      if (child.key === key) {\n        if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) {\n          deleteRemainingChildren(returnFiber, child.sibling);\n          var existing = useFiber(child, portal.children || []);\n          existing.return = returnFiber;\n          return existing;\n        } else {\n          deleteRemainingChildren(returnFiber, child);\n          break;\n        }\n      } else {\n        deleteChild(returnFiber, child);\n      }\n\n      child = child.sibling;\n    }\n\n    var created = createFiberFromPortal(portal, returnFiber.mode, lanes);\n    created.return = returnFiber;\n    return created;\n  } // This API will tag the children with the side-effect of the reconciliation\n  // itself. They will be added to the side-effect list as we pass through the\n  // children and the parent.\n\n\n  function reconcileChildFibers(returnFiber, currentFirstChild, newChild, lanes) {\n    // This function is not recursive.\n    // If the top level item is an array, we treat it as a set of children,\n    // not as a fragment. Nested arrays on the other hand will be treated as\n    // fragment nodes. Recursion happens at the normal flow.\n    // Handle top level unkeyed fragments as if they were arrays.\n    // This leads to an ambiguity between <>{[...]}</> and <>...</>.\n    // We treat the ambiguous cases above the same.\n    var isUnkeyedTopLevelFragment = typeof newChild === 'object' && newChild !== null && newChild.type === REACT_FRAGMENT_TYPE && newChild.key === null;\n\n    if (isUnkeyedTopLevelFragment) {\n      newChild = newChild.props.children;\n    } // Handle object types\n\n\n    if (typeof newChild === 'object' && newChild !== null) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, lanes));\n\n        case REACT_PORTAL_TYPE:\n          return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, lanes));\n\n        case REACT_LAZY_TYPE:\n          var payload = newChild._payload;\n          var init = newChild._init; // TODO: This function is supposed to be non-recursive.\n\n          return reconcileChildFibers(returnFiber, currentFirstChild, init(payload), lanes);\n      }\n\n      if (isArray(newChild)) {\n        return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, lanes);\n      }\n\n      if (getIteratorFn(newChild)) {\n        return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, lanes);\n      }\n\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n\n    if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {\n      return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, lanes));\n    }\n\n    {\n      if (typeof newChild === 'function') {\n        warnOnFunctionType(returnFiber);\n      }\n    } // Remaining cases are all treated as empty.\n\n\n    return deleteRemainingChildren(returnFiber, currentFirstChild);\n  }\n\n  return reconcileChildFibers;\n}\n\nvar reconcileChildFibers = ChildReconciler(true);\nvar mountChildFibers = ChildReconciler(false);\nfunction cloneChildFibers(current, workInProgress) {\n  if (current !== null && workInProgress.child !== current.child) {\n    throw new Error('Resuming work not yet implemented.');\n  }\n\n  if (workInProgress.child === null) {\n    return;\n  }\n\n  var currentChild = workInProgress.child;\n  var newChild = createWorkInProgress(currentChild, currentChild.pendingProps);\n  workInProgress.child = newChild;\n  newChild.return = workInProgress;\n\n  while (currentChild.sibling !== null) {\n    currentChild = currentChild.sibling;\n    newChild = newChild.sibling = createWorkInProgress(currentChild, currentChild.pendingProps);\n    newChild.return = workInProgress;\n  }\n\n  newChild.sibling = null;\n} // Reset a workInProgress child set to prepare it for a second pass.\n\nfunction resetChildFibers(workInProgress, lanes) {\n  var child = workInProgress.child;\n\n  while (child !== null) {\n    resetWorkInProgress(child, lanes);\n    child = child.sibling;\n  }\n}\n\nvar valueCursor = createCursor(null);\nvar rendererSigil;\n\n{\n  // Use this to detect multiple renderers using the same context\n  rendererSigil = {};\n}\n\nvar currentlyRenderingFiber = null;\nvar lastContextDependency = null;\nvar lastFullyObservedContext = null;\nvar isDisallowedContextReadInDEV = false;\nfunction resetContextDependencies() {\n  // This is called right before React yields execution, to ensure `readContext`\n  // cannot be called outside the render phase.\n  currentlyRenderingFiber = null;\n  lastContextDependency = null;\n  lastFullyObservedContext = null;\n\n  {\n    isDisallowedContextReadInDEV = false;\n  }\n}\nfunction enterDisallowedContextReadInDEV() {\n  {\n    isDisallowedContextReadInDEV = true;\n  }\n}\nfunction exitDisallowedContextReadInDEV() {\n  {\n    isDisallowedContextReadInDEV = false;\n  }\n}\nfunction pushProvider(providerFiber, context, nextValue) {\n  {\n    push(valueCursor, context._currentValue, providerFiber);\n    context._currentValue = nextValue;\n\n    {\n      if (context._currentRenderer !== undefined && context._currentRenderer !== null && context._currentRenderer !== rendererSigil) {\n        error('Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.');\n      }\n\n      context._currentRenderer = rendererSigil;\n    }\n  }\n}\nfunction popProvider(context, providerFiber) {\n  var currentValue = valueCursor.current;\n  pop(valueCursor, providerFiber);\n\n  {\n    {\n      context._currentValue = currentValue;\n    }\n  }\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n  // Update the child lanes of all the ancestors, including the alternates.\n  var node = parent;\n\n  while (node !== null) {\n    var alternate = node.alternate;\n\n    if (!isSubsetOfLanes(node.childLanes, renderLanes)) {\n      node.childLanes = mergeLanes(node.childLanes, renderLanes);\n\n      if (alternate !== null) {\n        alternate.childLanes = mergeLanes(alternate.childLanes, renderLanes);\n      }\n    } else if (alternate !== null && !isSubsetOfLanes(alternate.childLanes, renderLanes)) {\n      alternate.childLanes = mergeLanes(alternate.childLanes, renderLanes);\n    }\n\n    if (node === propagationRoot) {\n      break;\n    }\n\n    node = node.return;\n  }\n\n  {\n    if (node !== propagationRoot) {\n      error('Expected to find the propagation root when scheduling context work. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n    }\n  }\n}\nfunction propagateContextChange(workInProgress, context, renderLanes) {\n  {\n    propagateContextChange_eager(workInProgress, context, renderLanes);\n  }\n}\n\nfunction propagateContextChange_eager(workInProgress, context, renderLanes) {\n\n  var fiber = workInProgress.child;\n\n  if (fiber !== null) {\n    // Set the return pointer of the child to the work-in-progress fiber.\n    fiber.return = workInProgress;\n  }\n\n  while (fiber !== null) {\n    var nextFiber = void 0; // Visit this fiber.\n\n    var list = fiber.dependencies;\n\n    if (list !== null) {\n      nextFiber = fiber.child;\n      var dependency = list.firstContext;\n\n      while (dependency !== null) {\n        // Check if the context matches.\n        if (dependency.context === context) {\n          // Match! Schedule an update on this fiber.\n          if (fiber.tag === ClassComponent) {\n            // Schedule a force update on the work-in-progress.\n            var lane = pickArbitraryLane(renderLanes);\n            var update = createUpdate(NoTimestamp, lane);\n            update.tag = ForceUpdate; // TODO: Because we don't have a work-in-progress, this will add the\n            // update to the current fiber, too, which means it will persist even if\n            // this render is thrown away. Since it's a race condition, not sure it's\n            // worth fixing.\n            // Inlined `enqueueUpdate` to remove interleaved update check\n\n            var updateQueue = fiber.updateQueue;\n\n            if (updateQueue === null) ; else {\n              var sharedQueue = updateQueue.shared;\n              var pending = sharedQueue.pending;\n\n              if (pending === null) {\n                // This is the first update. Create a circular list.\n                update.next = update;\n              } else {\n                update.next = pending.next;\n                pending.next = update;\n              }\n\n              sharedQueue.pending = update;\n            }\n          }\n\n          fiber.lanes = mergeLanes(fiber.lanes, renderLanes);\n          var alternate = fiber.alternate;\n\n          if (alternate !== null) {\n            alternate.lanes = mergeLanes(alternate.lanes, renderLanes);\n          }\n\n          scheduleContextWorkOnParentPath(fiber.return, renderLanes, workInProgress); // Mark the updated lanes on the list, too.\n\n          list.lanes = mergeLanes(list.lanes, renderLanes); // Since we already found a match, we can stop traversing the\n          // dependency list.\n\n          break;\n        }\n\n        dependency = dependency.next;\n      }\n    } else if (fiber.tag === ContextProvider) {\n      // Don't scan deeper if this is a matching provider\n      nextFiber = fiber.type === workInProgress.type ? null : fiber.child;\n    } else if (fiber.tag === DehydratedFragment) {\n      // If a dehydrated suspense boundary is in this subtree, we don't know\n      // if it will have any context consumers in it. The best we can do is\n      // mark it as having updates.\n      var parentSuspense = fiber.return;\n\n      if (parentSuspense === null) {\n        throw new Error('We just came from a parent so we must have had a parent. This is a bug in React.');\n      }\n\n      parentSuspense.lanes = mergeLanes(parentSuspense.lanes, renderLanes);\n      var _alternate = parentSuspense.alternate;\n\n      if (_alternate !== null) {\n        _alternate.lanes = mergeLanes(_alternate.lanes, renderLanes);\n      } // This is intentionally passing this fiber as the parent\n      // because we want to schedule this fiber as having work\n      // on its children. We'll use the childLanes on\n      // this fiber to indicate that a context has changed.\n\n\n      scheduleContextWorkOnParentPath(parentSuspense, renderLanes, workInProgress);\n      nextFiber = fiber.sibling;\n    } else {\n      // Traverse down.\n      nextFiber = fiber.child;\n    }\n\n    if (nextFiber !== null) {\n      // Set the return pointer of the child to the work-in-progress fiber.\n      nextFiber.return = fiber;\n    } else {\n      // No child. Traverse to next sibling.\n      nextFiber = fiber;\n\n      while (nextFiber !== null) {\n        if (nextFiber === workInProgress) {\n          // We're back to the root of this subtree. Exit.\n          nextFiber = null;\n          break;\n        }\n\n        var sibling = nextFiber.sibling;\n\n        if (sibling !== null) {\n          // Set the return pointer of the sibling to the work-in-progress fiber.\n          sibling.return = nextFiber.return;\n          nextFiber = sibling;\n          break;\n        } // No more siblings. Traverse up.\n\n\n        nextFiber = nextFiber.return;\n      }\n    }\n\n    fiber = nextFiber;\n  }\n}\nfunction prepareToReadContext(workInProgress, renderLanes) {\n  currentlyRenderingFiber = workInProgress;\n  lastContextDependency = null;\n  lastFullyObservedContext = null;\n  var dependencies = workInProgress.dependencies;\n\n  if (dependencies !== null) {\n    {\n      var firstContext = dependencies.firstContext;\n\n      if (firstContext !== null) {\n        if (includesSomeLane(dependencies.lanes, renderLanes)) {\n          // Context list has a pending update. Mark that this fiber performed work.\n          markWorkInProgressReceivedUpdate();\n        } // Reset the work-in-progress list\n\n\n        dependencies.firstContext = null;\n      }\n    }\n  }\n}\nfunction readContext(context) {\n  {\n    // This warning would fire if you read context inside a Hook like useMemo.\n    // Unlike the class check below, it's not enforced in production for perf.\n    if (isDisallowedContextReadInDEV) {\n      error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n    }\n  }\n\n  var value =  context._currentValue ;\n\n  if (lastFullyObservedContext === context) ; else {\n    var contextItem = {\n      context: context,\n      memoizedValue: value,\n      next: null\n    };\n\n    if (lastContextDependency === null) {\n      if (currentlyRenderingFiber === null) {\n        throw new Error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n      } // This is the first dependency for this component. Create a new list.\n\n\n      lastContextDependency = contextItem;\n      currentlyRenderingFiber.dependencies = {\n        lanes: NoLanes,\n        firstContext: contextItem\n      };\n    } else {\n      // Append a new context item.\n      lastContextDependency = lastContextDependency.next = contextItem;\n    }\n  }\n\n  return value;\n}\n\n// render. When this render exits, either because it finishes or because it is\n// interrupted, the interleaved updates will be transferred onto the main part\n// of the queue.\n\nvar concurrentQueues = null;\nfunction pushConcurrentUpdateQueue(queue) {\n  if (concurrentQueues === null) {\n    concurrentQueues = [queue];\n  } else {\n    concurrentQueues.push(queue);\n  }\n}\nfunction finishQueueingConcurrentUpdates() {\n  // Transfer the interleaved updates onto the main queue. Each queue has a\n  // `pending` field and an `interleaved` field. When they are not null, they\n  // point to the last node in a circular linked list. We need to append the\n  // interleaved list to the end of the pending list by joining them into a\n  // single, circular list.\n  if (concurrentQueues !== null) {\n    for (var i = 0; i < concurrentQueues.length; i++) {\n      var queue = concurrentQueues[i];\n      var lastInterleavedUpdate = queue.interleaved;\n\n      if (lastInterleavedUpdate !== null) {\n        queue.interleaved = null;\n        var firstInterleavedUpdate = lastInterleavedUpdate.next;\n        var lastPendingUpdate = queue.pending;\n\n        if (lastPendingUpdate !== null) {\n          var firstPendingUpdate = lastPendingUpdate.next;\n          lastPendingUpdate.next = firstInterleavedUpdate;\n          lastInterleavedUpdate.next = firstPendingUpdate;\n        }\n\n        queue.pending = lastInterleavedUpdate;\n      }\n    }\n\n    concurrentQueues = null;\n  }\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n  var interleaved = queue.interleaved;\n\n  if (interleaved === null) {\n    // This is the first update. Create a circular list.\n    update.next = update; // At the end of the current render, this queue's interleaved updates will\n    // be transferred to the pending queue.\n\n    pushConcurrentUpdateQueue(queue);\n  } else {\n    update.next = interleaved.next;\n    interleaved.next = update;\n  }\n\n  queue.interleaved = update;\n  return markUpdateLaneFromFiberToRoot(fiber, lane);\n}\nfunction enqueueConcurrentHookUpdateAndEagerlyBailout(fiber, queue, update, lane) {\n  var interleaved = queue.interleaved;\n\n  if (interleaved === null) {\n    // This is the first update. Create a circular list.\n    update.next = update; // At the end of the current render, this queue's interleaved updates will\n    // be transferred to the pending queue.\n\n    pushConcurrentUpdateQueue(queue);\n  } else {\n    update.next = interleaved.next;\n    interleaved.next = update;\n  }\n\n  queue.interleaved = update;\n}\nfunction enqueueConcurrentClassUpdate(fiber, queue, update, lane) {\n  var interleaved = queue.interleaved;\n\n  if (interleaved === null) {\n    // This is the first update. Create a circular list.\n    update.next = update; // At the end of the current render, this queue's interleaved updates will\n    // be transferred to the pending queue.\n\n    pushConcurrentUpdateQueue(queue);\n  } else {\n    update.next = interleaved.next;\n    interleaved.next = update;\n  }\n\n  queue.interleaved = update;\n  return markUpdateLaneFromFiberToRoot(fiber, lane);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n  return markUpdateLaneFromFiberToRoot(fiber, lane);\n} // Calling this function outside this module should only be done for backwards\n// compatibility and should always be accompanied by a warning.\n\nvar unsafe_markUpdateLaneFromFiberToRoot = markUpdateLaneFromFiberToRoot;\n\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, lane) {\n  // Update the source fiber's lanes\n  sourceFiber.lanes = mergeLanes(sourceFiber.lanes, lane);\n  var alternate = sourceFiber.alternate;\n\n  if (alternate !== null) {\n    alternate.lanes = mergeLanes(alternate.lanes, lane);\n  }\n\n  {\n    if (alternate === null && (sourceFiber.flags & (Placement | Hydrating)) !== NoFlags) {\n      warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);\n    }\n  } // Walk the parent path to the root and update the child lanes.\n\n\n  var node = sourceFiber;\n  var parent = sourceFiber.return;\n\n  while (parent !== null) {\n    parent.childLanes = mergeLanes(parent.childLanes, lane);\n    alternate = parent.alternate;\n\n    if (alternate !== null) {\n      alternate.childLanes = mergeLanes(alternate.childLanes, lane);\n    } else {\n      {\n        if ((parent.flags & (Placement | Hydrating)) !== NoFlags) {\n          warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);\n        }\n      }\n    }\n\n    node = parent;\n    parent = parent.return;\n  }\n\n  if (node.tag === HostRoot) {\n    var root = node.stateNode;\n    return root;\n  } else {\n    return null;\n  }\n}\n\nvar UpdateState = 0;\nvar ReplaceState = 1;\nvar ForceUpdate = 2;\nvar CaptureUpdate = 3; // Global state that is reset at the beginning of calling `processUpdateQueue`.\n// It should only be read right after calling `processUpdateQueue`, via\n// `checkHasForceUpdateAfterProcessing`.\n\nvar hasForceUpdate = false;\nvar didWarnUpdateInsideUpdate;\nvar currentlyProcessingQueue;\n\n{\n  didWarnUpdateInsideUpdate = false;\n  currentlyProcessingQueue = null;\n}\n\nfunction initializeUpdateQueue(fiber) {\n  var queue = {\n    baseState: fiber.memoizedState,\n    firstBaseUpdate: null,\n    lastBaseUpdate: null,\n    shared: {\n      pending: null,\n      interleaved: null,\n      lanes: NoLanes\n    },\n    effects: null\n  };\n  fiber.updateQueue = queue;\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n  // Clone the update queue from current. Unless it's already a clone.\n  var queue = workInProgress.updateQueue;\n  var currentQueue = current.updateQueue;\n\n  if (queue === currentQueue) {\n    var clone = {\n      baseState: currentQueue.baseState,\n      firstBaseUpdate: currentQueue.firstBaseUpdate,\n      lastBaseUpdate: currentQueue.lastBaseUpdate,\n      shared: currentQueue.shared,\n      effects: currentQueue.effects\n    };\n    workInProgress.updateQueue = clone;\n  }\n}\nfunction createUpdate(eventTime, lane) {\n  var update = {\n    eventTime: eventTime,\n    lane: lane,\n    tag: UpdateState,\n    payload: null,\n    callback: null,\n    next: null\n  };\n  return update;\n}\nfunction enqueueUpdate(fiber, update, lane) {\n  var updateQueue = fiber.updateQueue;\n\n  if (updateQueue === null) {\n    // Only occurs if the fiber has been unmounted.\n    return null;\n  }\n\n  var sharedQueue = updateQueue.shared;\n\n  {\n    if (currentlyProcessingQueue === sharedQueue && !didWarnUpdateInsideUpdate) {\n      error('An update (setState, replaceState, or forceUpdate) was scheduled ' + 'from inside an update function. Update functions should be pure, ' + 'with zero side-effects. Consider using componentDidUpdate or a ' + 'callback.');\n\n      didWarnUpdateInsideUpdate = true;\n    }\n  }\n\n  if (isUnsafeClassRenderPhaseUpdate()) {\n    // This is an unsafe render phase update. Add directly to the update\n    // queue so we can process it immediately during the current render.\n    var pending = sharedQueue.pending;\n\n    if (pending === null) {\n      // This is the first update. Create a circular list.\n      update.next = update;\n    } else {\n      update.next = pending.next;\n      pending.next = update;\n    }\n\n    sharedQueue.pending = update; // Update the childLanes even though we're most likely already rendering\n    // this fiber. This is for backwards compatibility in the case where you\n    // update a different component during render phase than the one that is\n    // currently renderings (a pattern that is accompanied by a warning).\n\n    return unsafe_markUpdateLaneFromFiberToRoot(fiber, lane);\n  } else {\n    return enqueueConcurrentClassUpdate(fiber, sharedQueue, update, lane);\n  }\n}\nfunction entangleTransitions(root, fiber, lane) {\n  var updateQueue = fiber.updateQueue;\n\n  if (updateQueue === null) {\n    // Only occurs if the fiber has been unmounted.\n    return;\n  }\n\n  var sharedQueue = updateQueue.shared;\n\n  if (isTransitionLane(lane)) {\n    var queueLanes = sharedQueue.lanes; // If any entangled lanes are no longer pending on the root, then they must\n    // have finished. We can remove them from the shared queue, which represents\n    // a superset of the actually pending lanes. In some cases we may entangle\n    // more than we need to, but that's OK. In fact it's worse if we *don't*\n    // entangle when we should.\n\n    queueLanes = intersectLanes(queueLanes, root.pendingLanes); // Entangle the new transition lane with the other transition lanes.\n\n    var newQueueLanes = mergeLanes(queueLanes, lane);\n    sharedQueue.lanes = newQueueLanes; // Even if queue.lanes already include lane, we don't know for certain if\n    // the lane finished since the last time we entangled it. So we need to\n    // entangle it again, just to be sure.\n\n    markRootEntangled(root, newQueueLanes);\n  }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n  // Captured updates are updates that are thrown by a child during the render\n  // phase. They should be discarded if the render is aborted. Therefore,\n  // we should only put them on the work-in-progress queue, not the current one.\n  var queue = workInProgress.updateQueue; // Check if the work-in-progress queue is a clone.\n\n  var current = workInProgress.alternate;\n\n  if (current !== null) {\n    var currentQueue = current.updateQueue;\n\n    if (queue === currentQueue) {\n      // The work-in-progress queue is the same as current. This happens when\n      // we bail out on a parent fiber that then captures an error thrown by\n      // a child. Since we want to append the update only to the work-in\n      // -progress queue, we need to clone the updates. We usually clone during\n      // processUpdateQueue, but that didn't happen in this case because we\n      // skipped over the parent when we bailed out.\n      var newFirst = null;\n      var newLast = null;\n      var firstBaseUpdate = queue.firstBaseUpdate;\n\n      if (firstBaseUpdate !== null) {\n        // Loop through the updates and clone them.\n        var update = firstBaseUpdate;\n\n        do {\n          var clone = {\n            eventTime: update.eventTime,\n            lane: update.lane,\n            tag: update.tag,\n            payload: update.payload,\n            callback: update.callback,\n            next: null\n          };\n\n          if (newLast === null) {\n            newFirst = newLast = clone;\n          } else {\n            newLast.next = clone;\n            newLast = clone;\n          }\n\n          update = update.next;\n        } while (update !== null); // Append the captured update the end of the cloned list.\n\n\n        if (newLast === null) {\n          newFirst = newLast = capturedUpdate;\n        } else {\n          newLast.next = capturedUpdate;\n          newLast = capturedUpdate;\n        }\n      } else {\n        // There are no base updates.\n        newFirst = newLast = capturedUpdate;\n      }\n\n      queue = {\n        baseState: currentQueue.baseState,\n        firstBaseUpdate: newFirst,\n        lastBaseUpdate: newLast,\n        shared: currentQueue.shared,\n        effects: currentQueue.effects\n      };\n      workInProgress.updateQueue = queue;\n      return;\n    }\n  } // Append the update to the end of the list.\n\n\n  var lastBaseUpdate = queue.lastBaseUpdate;\n\n  if (lastBaseUpdate === null) {\n    queue.firstBaseUpdate = capturedUpdate;\n  } else {\n    lastBaseUpdate.next = capturedUpdate;\n  }\n\n  queue.lastBaseUpdate = capturedUpdate;\n}\n\nfunction getStateFromUpdate(workInProgress, queue, update, prevState, nextProps, instance) {\n  switch (update.tag) {\n    case ReplaceState:\n      {\n        var payload = update.payload;\n\n        if (typeof payload === 'function') {\n          // Updater function\n          {\n            enterDisallowedContextReadInDEV();\n          }\n\n          var nextState = payload.call(instance, prevState, nextProps);\n\n          {\n            if ( workInProgress.mode & StrictLegacyMode) {\n              setIsStrictModeForDevtools(true);\n\n              try {\n                payload.call(instance, prevState, nextProps);\n              } finally {\n                setIsStrictModeForDevtools(false);\n              }\n            }\n\n            exitDisallowedContextReadInDEV();\n          }\n\n          return nextState;\n        } // State object\n\n\n        return payload;\n      }\n\n    case CaptureUpdate:\n      {\n        workInProgress.flags = workInProgress.flags & ~ShouldCapture | DidCapture;\n      }\n    // Intentional fallthrough\n\n    case UpdateState:\n      {\n        var _payload = update.payload;\n        var partialState;\n\n        if (typeof _payload === 'function') {\n          // Updater function\n          {\n            enterDisallowedContextReadInDEV();\n          }\n\n          partialState = _payload.call(instance, prevState, nextProps);\n\n          {\n            if ( workInProgress.mode & StrictLegacyMode) {\n              setIsStrictModeForDevtools(true);\n\n              try {\n                _payload.call(instance, prevState, nextProps);\n              } finally {\n                setIsStrictModeForDevtools(false);\n              }\n            }\n\n            exitDisallowedContextReadInDEV();\n          }\n        } else {\n          // Partial state object\n          partialState = _payload;\n        }\n\n        if (partialState === null || partialState === undefined) {\n          // Null and undefined are treated as no-ops.\n          return prevState;\n        } // Merge the partial state and the previous state.\n\n\n        return assign({}, prevState, partialState);\n      }\n\n    case ForceUpdate:\n      {\n        hasForceUpdate = true;\n        return prevState;\n      }\n  }\n\n  return prevState;\n}\n\nfunction processUpdateQueue(workInProgress, props, instance, renderLanes) {\n  // This is always non-null on a ClassComponent or HostRoot\n  var queue = workInProgress.updateQueue;\n  hasForceUpdate = false;\n\n  {\n    currentlyProcessingQueue = queue.shared;\n  }\n\n  var firstBaseUpdate = queue.firstBaseUpdate;\n  var lastBaseUpdate = queue.lastBaseUpdate; // Check if there are pending updates. If so, transfer them to the base queue.\n\n  var pendingQueue = queue.shared.pending;\n\n  if (pendingQueue !== null) {\n    queue.shared.pending = null; // The pending queue is circular. Disconnect the pointer between first\n    // and last so that it's non-circular.\n\n    var lastPendingUpdate = pendingQueue;\n    var firstPendingUpdate = lastPendingUpdate.next;\n    lastPendingUpdate.next = null; // Append pending updates to base queue\n\n    if (lastBaseUpdate === null) {\n      firstBaseUpdate = firstPendingUpdate;\n    } else {\n      lastBaseUpdate.next = firstPendingUpdate;\n    }\n\n    lastBaseUpdate = lastPendingUpdate; // If there's a current queue, and it's different from the base queue, then\n    // we need to transfer the updates to that queue, too. Because the base\n    // queue is a singly-linked list with no cycles, we can append to both\n    // lists and take advantage of structural sharing.\n    // TODO: Pass `current` as argument\n\n    var current = workInProgress.alternate;\n\n    if (current !== null) {\n      // This is always non-null on a ClassComponent or HostRoot\n      var currentQueue = current.updateQueue;\n      var currentLastBaseUpdate = currentQueue.lastBaseUpdate;\n\n      if (currentLastBaseUpdate !== lastBaseUpdate) {\n        if (currentLastBaseUpdate === null) {\n          currentQueue.firstBaseUpdate = firstPendingUpdate;\n        } else {\n          currentLastBaseUpdate.next = firstPendingUpdate;\n        }\n\n        currentQueue.lastBaseUpdate = lastPendingUpdate;\n      }\n    }\n  } // These values may change as we process the queue.\n\n\n  if (firstBaseUpdate !== null) {\n    // Iterate through the list of updates to compute the result.\n    var newState = queue.baseState; // TODO: Don't need to accumulate this. Instead, we can remove renderLanes\n    // from the original lanes.\n\n    var newLanes = NoLanes;\n    var newBaseState = null;\n    var newFirstBaseUpdate = null;\n    var newLastBaseUpdate = null;\n    var update = firstBaseUpdate;\n\n    do {\n      var updateLane = update.lane;\n      var updateEventTime = update.eventTime;\n\n      if (!isSubsetOfLanes(renderLanes, updateLane)) {\n        // Priority is insufficient. Skip this update. If this is the first\n        // skipped update, the previous update/state is the new base\n        // update/state.\n        var clone = {\n          eventTime: updateEventTime,\n          lane: updateLane,\n          tag: update.tag,\n          payload: update.payload,\n          callback: update.callback,\n          next: null\n        };\n\n        if (newLastBaseUpdate === null) {\n          newFirstBaseUpdate = newLastBaseUpdate = clone;\n          newBaseState = newState;\n        } else {\n          newLastBaseUpdate = newLastBaseUpdate.next = clone;\n        } // Update the remaining priority in the queue.\n\n\n        newLanes = mergeLanes(newLanes, updateLane);\n      } else {\n        // This update does have sufficient priority.\n        if (newLastBaseUpdate !== null) {\n          var _clone = {\n            eventTime: updateEventTime,\n            // This update is going to be committed so we never want uncommit\n            // it. Using NoLane works because 0 is a subset of all bitmasks, so\n            // this will never be skipped by the check above.\n            lane: NoLane,\n            tag: update.tag,\n            payload: update.payload,\n            callback: update.callback,\n            next: null\n          };\n          newLastBaseUpdate = newLastBaseUpdate.next = _clone;\n        } // Process this update.\n\n\n        newState = getStateFromUpdate(workInProgress, queue, update, newState, props, instance);\n        var callback = update.callback;\n\n        if (callback !== null && // If the update was already committed, we should not queue its\n        // callback again.\n        update.lane !== NoLane) {\n          workInProgress.flags |= Callback;\n          var effects = queue.effects;\n\n          if (effects === null) {\n            queue.effects = [update];\n          } else {\n            effects.push(update);\n          }\n        }\n      }\n\n      update = update.next;\n\n      if (update === null) {\n        pendingQueue = queue.shared.pending;\n\n        if (pendingQueue === null) {\n          break;\n        } else {\n          // An update was scheduled from inside a reducer. Add the new\n          // pending updates to the end of the list and keep processing.\n          var _lastPendingUpdate = pendingQueue; // Intentionally unsound. Pending updates form a circular list, but we\n          // unravel them when transferring them to the base queue.\n\n          var _firstPendingUpdate = _lastPendingUpdate.next;\n          _lastPendingUpdate.next = null;\n          update = _firstPendingUpdate;\n          queue.lastBaseUpdate = _lastPendingUpdate;\n          queue.shared.pending = null;\n        }\n      }\n    } while (true);\n\n    if (newLastBaseUpdate === null) {\n      newBaseState = newState;\n    }\n\n    queue.baseState = newBaseState;\n    queue.firstBaseUpdate = newFirstBaseUpdate;\n    queue.lastBaseUpdate = newLastBaseUpdate; // Interleaved updates are stored on a separate queue. We aren't going to\n    // process them during this render, but we do need to track which lanes\n    // are remaining.\n\n    var lastInterleaved = queue.shared.interleaved;\n\n    if (lastInterleaved !== null) {\n      var interleaved = lastInterleaved;\n\n      do {\n        newLanes = mergeLanes(newLanes, interleaved.lane);\n        interleaved = interleaved.next;\n      } while (interleaved !== lastInterleaved);\n    } else if (firstBaseUpdate === null) {\n      // `queue.lanes` is used for entangling transitions. We can set it back to\n      // zero once the queue is empty.\n      queue.shared.lanes = NoLanes;\n    } // Set the remaining expiration time to be whatever is remaining in the queue.\n    // This should be fine because the only two other things that contribute to\n    // expiration time are props and context. We're already in the middle of the\n    // begin phase by the time we start processing the queue, so we've already\n    // dealt with the props. Context in components that specify\n    // shouldComponentUpdate is tricky; but we'll have to account for\n    // that regardless.\n\n\n    markSkippedUpdateLanes(newLanes);\n    workInProgress.lanes = newLanes;\n    workInProgress.memoizedState = newState;\n  }\n\n  {\n    currentlyProcessingQueue = null;\n  }\n}\n\nfunction callCallback(callback, context) {\n  if (typeof callback !== 'function') {\n    throw new Error('Invalid argument passed as callback. Expected a function. Instead ' + (\"received: \" + callback));\n  }\n\n  callback.call(context);\n}\n\nfunction resetHasForceUpdateBeforeProcessing() {\n  hasForceUpdate = false;\n}\nfunction checkHasForceUpdateAfterProcessing() {\n  return hasForceUpdate;\n}\nfunction commitUpdateQueue(finishedWork, finishedQueue, instance) {\n  // Commit the effects\n  var effects = finishedQueue.effects;\n  finishedQueue.effects = null;\n\n  if (effects !== null) {\n    for (var i = 0; i < effects.length; i++) {\n      var effect = effects[i];\n      var callback = effect.callback;\n\n      if (callback !== null) {\n        effect.callback = null;\n        callCallback(callback, instance);\n      }\n    }\n  }\n}\n\nvar NO_CONTEXT = {};\nvar contextStackCursor$1 = createCursor(NO_CONTEXT);\nvar contextFiberStackCursor = createCursor(NO_CONTEXT);\nvar rootInstanceStackCursor = createCursor(NO_CONTEXT);\n\nfunction requiredContext(c) {\n  if (c === NO_CONTEXT) {\n    throw new Error('Expected host context to exist. This error is likely caused by a bug ' + 'in React. Please file an issue.');\n  }\n\n  return c;\n}\n\nfunction getRootHostContainer() {\n  var rootInstance = requiredContext(rootInstanceStackCursor.current);\n  return rootInstance;\n}\n\nfunction pushHostContainer(fiber, nextRootInstance) {\n  // Push current root instance onto the stack;\n  // This allows us to reset root when portals are popped.\n  push(rootInstanceStackCursor, nextRootInstance, fiber); // Track the context and the Fiber that provided it.\n  // This enables us to pop only Fibers that provide unique contexts.\n\n  push(contextFiberStackCursor, fiber, fiber); // Finally, we need to push the host context to the stack.\n  // However, we can't just call getRootHostContext() and push it because\n  // we'd have a different number of entries on the stack depending on\n  // whether getRootHostContext() throws somewhere in renderer code or not.\n  // So we push an empty value first. This lets us safely unwind on errors.\n\n  push(contextStackCursor$1, NO_CONTEXT, fiber);\n  var nextRootContext = getRootHostContext(nextRootInstance); // Now that we know this function doesn't throw, replace it.\n\n  pop(contextStackCursor$1, fiber);\n  push(contextStackCursor$1, nextRootContext, fiber);\n}\n\nfunction popHostContainer(fiber) {\n  pop(contextStackCursor$1, fiber);\n  pop(contextFiberStackCursor, fiber);\n  pop(rootInstanceStackCursor, fiber);\n}\n\nfunction getHostContext() {\n  var context = requiredContext(contextStackCursor$1.current);\n  return context;\n}\n\nfunction pushHostContext(fiber) {\n  var rootInstance = requiredContext(rootInstanceStackCursor.current);\n  var context = requiredContext(contextStackCursor$1.current);\n  var nextContext = getChildHostContext(context, fiber.type); // Don't push this Fiber's context unless it's unique.\n\n  if (context === nextContext) {\n    return;\n  } // Track the context and the Fiber that provided it.\n  // This enables us to pop only Fibers that provide unique contexts.\n\n\n  push(contextFiberStackCursor, fiber, fiber);\n  push(contextStackCursor$1, nextContext, fiber);\n}\n\nfunction popHostContext(fiber) {\n  // Do not pop unless this Fiber provided the current context.\n  // pushHostContext() only pushes Fibers that provide unique contexts.\n  if (contextFiberStackCursor.current !== fiber) {\n    return;\n  }\n\n  pop(contextStackCursor$1, fiber);\n  pop(contextFiberStackCursor, fiber);\n}\n\nvar DefaultSuspenseContext = 0; // The Suspense Context is split into two parts. The lower bits is\n// inherited deeply down the subtree. The upper bits only affect\n// this immediate suspense boundary and gets reset each new\n// boundary or suspense list.\n\nvar SubtreeSuspenseContextMask = 1; // Subtree Flags:\n// InvisibleParentSuspenseContext indicates that one of our parent Suspense\n// boundaries is not currently showing visible main content.\n// Either because it is already showing a fallback or is not mounted at all.\n// We can use this to determine if it is desirable to trigger a fallback at\n// the parent. If not, then we might need to trigger undesirable boundaries\n// and/or suspend the commit to avoid hiding the parent content.\n\nvar InvisibleParentSuspenseContext = 1; // Shallow Flags:\n// ForceSuspenseFallback can be used by SuspenseList to force newly added\n// items into their fallback state during one of the render passes.\n\nvar ForceSuspenseFallback = 2;\nvar suspenseStackCursor = createCursor(DefaultSuspenseContext);\nfunction hasSuspenseContext(parentContext, flag) {\n  return (parentContext & flag) !== 0;\n}\nfunction setDefaultShallowSuspenseContext(parentContext) {\n  return parentContext & SubtreeSuspenseContextMask;\n}\nfunction setShallowSuspenseContext(parentContext, shallowContext) {\n  return parentContext & SubtreeSuspenseContextMask | shallowContext;\n}\nfunction addSubtreeSuspenseContext(parentContext, subtreeContext) {\n  return parentContext | subtreeContext;\n}\nfunction pushSuspenseContext(fiber, newContext) {\n  push(suspenseStackCursor, newContext, fiber);\n}\nfunction popSuspenseContext(fiber) {\n  pop(suspenseStackCursor, fiber);\n}\n\nfunction shouldCaptureSuspense(workInProgress, hasInvisibleParent) {\n  // If it was the primary children that just suspended, capture and render the\n  // fallback. Otherwise, don't capture and bubble to the next boundary.\n  var nextState = workInProgress.memoizedState;\n\n  if (nextState !== null) {\n    if (nextState.dehydrated !== null) {\n      // A dehydrated boundary always captures.\n      return true;\n    }\n\n    return false;\n  }\n\n  var props = workInProgress.memoizedProps; // Regular boundaries always capture.\n\n  {\n    return true;\n  } // If it's a boundary we should avoid, then we prefer to bubble up to the\n}\nfunction findFirstSuspended(row) {\n  var node = row;\n\n  while (node !== null) {\n    if (node.tag === SuspenseComponent) {\n      var state = node.memoizedState;\n\n      if (state !== null) {\n        var dehydrated = state.dehydrated;\n\n        if (dehydrated === null || isSuspenseInstancePending(dehydrated) || isSuspenseInstanceFallback(dehydrated)) {\n          return node;\n        }\n      }\n    } else if (node.tag === SuspenseListComponent && // revealOrder undefined can't be trusted because it don't\n    // keep track of whether it suspended or not.\n    node.memoizedProps.revealOrder !== undefined) {\n      var didSuspend = (node.flags & DidCapture) !== NoFlags;\n\n      if (didSuspend) {\n        return node;\n      }\n    } else if (node.child !== null) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n\n    if (node === row) {\n      return null;\n    }\n\n    while (node.sibling === null) {\n      if (node.return === null || node.return === row) {\n        return null;\n      }\n\n      node = node.return;\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n\n  return null;\n}\n\nvar NoFlags$1 =\n/*   */\n0; // Represents whether effect should fire.\n\nvar HasEffect =\n/* */\n1; // Represents the phase in which the effect (not the clean-up) fires.\n\nvar Insertion =\n/*  */\n2;\nvar Layout =\n/*    */\n4;\nvar Passive$1 =\n/*   */\n8;\n\n// and should be reset before starting a new render.\n// This tracks which mutable sources need to be reset after a render.\n\nvar workInProgressSources = [];\nfunction resetWorkInProgressVersions() {\n  for (var i = 0; i < workInProgressSources.length; i++) {\n    var mutableSource = workInProgressSources[i];\n\n    {\n      mutableSource._workInProgressVersionPrimary = null;\n    }\n  }\n\n  workInProgressSources.length = 0;\n}\n// This ensures that the version used for server rendering matches the one\n// that is eventually read during hydration.\n// If they don't match there's a potential tear and a full deopt render is required.\n\nfunction registerMutableSourceForHydration(root, mutableSource) {\n  var getVersion = mutableSource._getVersion;\n  var version = getVersion(mutableSource._source); // TODO Clear this data once all pending hydration work is finished.\n  // Retaining it forever may interfere with GC.\n\n  if (root.mutableSourceEagerHydrationData == null) {\n    root.mutableSourceEagerHydrationData = [mutableSource, version];\n  } else {\n    root.mutableSourceEagerHydrationData.push(mutableSource, version);\n  }\n}\n\nvar ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher,\n    ReactCurrentBatchConfig$2 = ReactSharedInternals.ReactCurrentBatchConfig;\nvar didWarnAboutMismatchedHooksForComponent;\nvar didWarnUncachedGetSnapshot;\n\n{\n  didWarnAboutMismatchedHooksForComponent = new Set();\n}\n\n// These are set right before calling the component.\nvar renderLanes = NoLanes; // The work-in-progress fiber. I've named it differently to distinguish it from\n// the work-in-progress hook.\n\nvar currentlyRenderingFiber$1 = null; // Hooks are stored as a linked list on the fiber's memoizedState field. The\n// current hook list is the list that belongs to the current fiber. The\n// work-in-progress hook list is a new list that will be added to the\n// work-in-progress fiber.\n\nvar currentHook = null;\nvar workInProgressHook = null; // Whether an update was scheduled at any point during the render phase. This\n// does not get reset if we do another render pass; only when we're completely\n// finished evaluating this component. This is an optimization so we know\n// whether we need to clear render phase updates after a throw.\n\nvar didScheduleRenderPhaseUpdate = false; // Where an update was scheduled only during the current render pass. This\n// gets reset after each attempt.\n// TODO: Maybe there's some way to consolidate this with\n// `didScheduleRenderPhaseUpdate`. Or with `numberOfReRenders`.\n\nvar didScheduleRenderPhaseUpdateDuringThisPass = false; // Counts the number of useId hooks in this component.\n\nvar localIdCounter = 0; // Used for ids that are generated completely client-side (i.e. not during\n// hydration). This counter is global, so client ids are not stable across\n// render attempts.\n\nvar globalClientIdCounter = 0;\nvar RE_RENDER_LIMIT = 25; // In DEV, this is the name of the currently executing primitive hook\n\nvar currentHookNameInDev = null; // In DEV, this list ensures that hooks are called in the same order between renders.\n// The list stores the order of hooks used during the initial render (mount).\n// Subsequent renders (updates) reference this list.\n\nvar hookTypesDev = null;\nvar hookTypesUpdateIndexDev = -1; // In DEV, this tracks whether currently rendering component needs to ignore\n// the dependencies for Hooks that need them (e.g. useEffect or useMemo).\n// When true, such Hooks will always be \"remounted\". Only used during hot reload.\n\nvar ignorePreviousDependencies = false;\n\nfunction mountHookTypesDev() {\n  {\n    var hookName = currentHookNameInDev;\n\n    if (hookTypesDev === null) {\n      hookTypesDev = [hookName];\n    } else {\n      hookTypesDev.push(hookName);\n    }\n  }\n}\n\nfunction updateHookTypesDev() {\n  {\n    var hookName = currentHookNameInDev;\n\n    if (hookTypesDev !== null) {\n      hookTypesUpdateIndexDev++;\n\n      if (hookTypesDev[hookTypesUpdateIndexDev] !== hookName) {\n        warnOnHookMismatchInDev(hookName);\n      }\n    }\n  }\n}\n\nfunction checkDepsAreArrayDev(deps) {\n  {\n    if (deps !== undefined && deps !== null && !isArray(deps)) {\n      // Verify deps, but only on mount to avoid extra checks.\n      // It's unlikely their type would change as usually you define them inline.\n      error('%s received a final argument that is not an array (instead, received `%s`). When ' + 'specified, the final argument must be an array.', currentHookNameInDev, typeof deps);\n    }\n  }\n}\n\nfunction warnOnHookMismatchInDev(currentHookName) {\n  {\n    var componentName = getComponentNameFromFiber(currentlyRenderingFiber$1);\n\n    if (!didWarnAboutMismatchedHooksForComponent.has(componentName)) {\n      didWarnAboutMismatchedHooksForComponent.add(componentName);\n\n      if (hookTypesDev !== null) {\n        var table = '';\n        var secondColumnStart = 30;\n\n        for (var i = 0; i <= hookTypesUpdateIndexDev; i++) {\n          var oldHookName = hookTypesDev[i];\n          var newHookName = i === hookTypesUpdateIndexDev ? currentHookName : oldHookName;\n          var row = i + 1 + \". \" + oldHookName; // Extra space so second column lines up\n          // lol @ IE not supporting String#repeat\n\n          while (row.length < secondColumnStart) {\n            row += ' ';\n          }\n\n          row += newHookName + '\\n';\n          table += row;\n        }\n\n        error('React has detected a change in the order of Hooks called by %s. ' + 'This will lead to bugs and errors if not fixed. ' + 'For more information, read the Rules of Hooks: https://reactjs.org/link/rules-of-hooks\\n\\n' + '   Previous render            Next render\\n' + '   ------------------------------------------------------\\n' + '%s' + '   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n', componentName, table);\n      }\n    }\n  }\n}\n\nfunction throwInvalidHookError() {\n  throw new Error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\\n' + '2. You might be breaking the Rules of Hooks\\n' + '3. You might have more than one copy of React in the same app\\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.');\n}\n\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  {\n    if (ignorePreviousDependencies) {\n      // Only true when this component is being hot reloaded.\n      return false;\n    }\n  }\n\n  if (prevDeps === null) {\n    {\n      error('%s received a final argument during this render, but not during ' + 'the previous render. Even though the final argument is optional, ' + 'its type cannot change between renders.', currentHookNameInDev);\n    }\n\n    return false;\n  }\n\n  {\n    // Don't bother comparing lengths in prod because these arrays should be\n    // passed inline.\n    if (nextDeps.length !== prevDeps.length) {\n      error('The final argument passed to %s changed size between renders. The ' + 'order and size of this array must remain constant.\\n\\n' + 'Previous: %s\\n' + 'Incoming: %s', currentHookNameInDev, \"[\" + prevDeps.join(', ') + \"]\", \"[\" + nextDeps.join(', ') + \"]\");\n    }\n  }\n\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) {\n    if (objectIs(nextDeps[i], prevDeps[i])) {\n      continue;\n    }\n\n    return false;\n  }\n\n  return true;\n}\n\nfunction renderWithHooks(current, workInProgress, Component, props, secondArg, nextRenderLanes) {\n  renderLanes = nextRenderLanes;\n  currentlyRenderingFiber$1 = workInProgress;\n\n  {\n    hookTypesDev = current !== null ? current._debugHookTypes : null;\n    hookTypesUpdateIndexDev = -1; // Used for hot reloading:\n\n    ignorePreviousDependencies = current !== null && current.type !== workInProgress.type;\n  }\n\n  workInProgress.memoizedState = null;\n  workInProgress.updateQueue = null;\n  workInProgress.lanes = NoLanes; // The following should have already been reset\n  // currentHook = null;\n  // workInProgressHook = null;\n  // didScheduleRenderPhaseUpdate = false;\n  // localIdCounter = 0;\n  // TODO Warn if no hooks are used at all during mount, then some are used during update.\n  // Currently we will identify the update render as a mount because memoizedState === null.\n  // This is tricky because it's valid for certain types of components (e.g. React.lazy)\n  // Using memoizedState to differentiate between mount/update only works if at least one stateful hook is used.\n  // Non-stateful hooks (e.g. context) don't get added to memoizedState,\n  // so memoizedState would be null during updates and mounts.\n\n  {\n    if (current !== null && current.memoizedState !== null) {\n      ReactCurrentDispatcher$1.current = HooksDispatcherOnUpdateInDEV;\n    } else if (hookTypesDev !== null) {\n      // This dispatcher handles an edge case where a component is updating,\n      // but no stateful hooks have been used.\n      // We want to match the production code behavior (which will use HooksDispatcherOnMount),\n      // but with the extra DEV validation to ensure hooks ordering hasn't changed.\n      // This dispatcher does that.\n      ReactCurrentDispatcher$1.current = HooksDispatcherOnMountWithHookTypesInDEV;\n    } else {\n      ReactCurrentDispatcher$1.current = HooksDispatcherOnMountInDEV;\n    }\n  }\n\n  var children = Component(props, secondArg); // Check if there was a render phase update\n\n  if (didScheduleRenderPhaseUpdateDuringThisPass) {\n    // Keep rendering in a loop for as long as render phase updates continue to\n    // be scheduled. Use a counter to prevent infinite loops.\n    var numberOfReRenders = 0;\n\n    do {\n      didScheduleRenderPhaseUpdateDuringThisPass = false;\n      localIdCounter = 0;\n\n      if (numberOfReRenders >= RE_RENDER_LIMIT) {\n        throw new Error('Too many re-renders. React limits the number of renders to prevent ' + 'an infinite loop.');\n      }\n\n      numberOfReRenders += 1;\n\n      {\n        // Even when hot reloading, allow dependencies to stabilize\n        // after first render to prevent infinite render phase updates.\n        ignorePreviousDependencies = false;\n      } // Start over from the beginning of the list\n\n\n      currentHook = null;\n      workInProgressHook = null;\n      workInProgress.updateQueue = null;\n\n      {\n        // Also validate hook order for cascading updates.\n        hookTypesUpdateIndexDev = -1;\n      }\n\n      ReactCurrentDispatcher$1.current =  HooksDispatcherOnRerenderInDEV ;\n      children = Component(props, secondArg);\n    } while (didScheduleRenderPhaseUpdateDuringThisPass);\n  } // We can assume the previous dispatcher is always this one, since we set it\n  // at the beginning of the render phase and there's no re-entrance.\n\n\n  ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;\n\n  {\n    workInProgress._debugHookTypes = hookTypesDev;\n  } // This check uses currentHook so that it works the same in DEV and prod bundles.\n  // hookTypesDev could catch more cases (e.g. context) but only in DEV bundles.\n\n\n  var didRenderTooFewHooks = currentHook !== null && currentHook.next !== null;\n  renderLanes = NoLanes;\n  currentlyRenderingFiber$1 = null;\n  currentHook = null;\n  workInProgressHook = null;\n\n  {\n    currentHookNameInDev = null;\n    hookTypesDev = null;\n    hookTypesUpdateIndexDev = -1; // Confirm that a static flag was not added or removed since the last\n    // render. If this fires, it suggests that we incorrectly reset the static\n    // flags in some other part of the codebase. This has happened before, for\n    // example, in the SuspenseList implementation.\n\n    if (current !== null && (current.flags & StaticMask) !== (workInProgress.flags & StaticMask) && // Disable this warning in legacy mode, because legacy Suspense is weird\n    // and creates false positives. To make this work in legacy mode, we'd\n    // need to mark fibers that commit in an incomplete state, somehow. For\n    // now I'll disable the warning that most of the bugs that would trigger\n    // it are either exclusive to concurrent mode or exist in both.\n    (current.mode & ConcurrentMode) !== NoMode) {\n      error('Internal React error: Expected static flag was missing. Please ' + 'notify the React team.');\n    }\n  }\n\n  didScheduleRenderPhaseUpdate = false; // This is reset by checkDidRenderIdHook\n  // localIdCounter = 0;\n\n  if (didRenderTooFewHooks) {\n    throw new Error('Rendered fewer hooks than expected. This may be caused by an accidental ' + 'early return statement.');\n  }\n\n  return children;\n}\nfunction checkDidRenderIdHook() {\n  // This should be called immediately after every renderWithHooks call.\n  // Conceptually, it's part of the return value of renderWithHooks; it's only a\n  // separate function to avoid using an array tuple.\n  var didRenderIdHook = localIdCounter !== 0;\n  localIdCounter = 0;\n  return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n  workInProgress.updateQueue = current.updateQueue; // TODO: Don't need to reset the flags here, because they're reset in the\n  // complete phase (bubbleProperties).\n\n  if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {\n    workInProgress.flags &= ~(MountPassiveDev | MountLayoutDev | Passive | Update);\n  } else {\n    workInProgress.flags &= ~(Passive | Update);\n  }\n\n  current.lanes = removeLanes(current.lanes, lanes);\n}\nfunction resetHooksAfterThrow() {\n  // We can assume the previous dispatcher is always this one, since we set it\n  // at the beginning of the render phase and there's no re-entrance.\n  ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;\n\n  if (didScheduleRenderPhaseUpdate) {\n    // There were render phase updates. These are only valid for this render\n    // phase, which we are now aborting. Remove the updates from the queues so\n    // they do not persist to the next render. Do not remove updates from hooks\n    // that weren't processed.\n    //\n    // Only reset the updates from the queue if it has a clone. If it does\n    // not have a clone, that means it wasn't processed, and the updates were\n    // scheduled before we entered the render phase.\n    var hook = currentlyRenderingFiber$1.memoizedState;\n\n    while (hook !== null) {\n      var queue = hook.queue;\n\n      if (queue !== null) {\n        queue.pending = null;\n      }\n\n      hook = hook.next;\n    }\n\n    didScheduleRenderPhaseUpdate = false;\n  }\n\n  renderLanes = NoLanes;\n  currentlyRenderingFiber$1 = null;\n  currentHook = null;\n  workInProgressHook = null;\n\n  {\n    hookTypesDev = null;\n    hookTypesUpdateIndexDev = -1;\n    currentHookNameInDev = null;\n    isUpdatingOpaqueValueInRenderPhase = false;\n  }\n\n  didScheduleRenderPhaseUpdateDuringThisPass = false;\n  localIdCounter = 0;\n}\n\nfunction mountWorkInProgressHook() {\n  var hook = {\n    memoizedState: null,\n    baseState: null,\n    baseQueue: null,\n    queue: null,\n    next: null\n  };\n\n  if (workInProgressHook === null) {\n    // This is the first hook in the list\n    currentlyRenderingFiber$1.memoizedState = workInProgressHook = hook;\n  } else {\n    // Append to the end of the list\n    workInProgressHook = workInProgressHook.next = hook;\n  }\n\n  return workInProgressHook;\n}\n\nfunction updateWorkInProgressHook() {\n  // This function is used both for updates and for re-renders triggered by a\n  // render phase update. It assumes there is either a current hook we can\n  // clone, or a work-in-progress hook from a previous render pass that we can\n  // use as a base. When we reach the end of the base list, we must switch to\n  // the dispatcher used for mounts.\n  var nextCurrentHook;\n\n  if (currentHook === null) {\n    var current = currentlyRenderingFiber$1.alternate;\n\n    if (current !== null) {\n      nextCurrentHook = current.memoizedState;\n    } else {\n      nextCurrentHook = null;\n    }\n  } else {\n    nextCurrentHook = currentHook.next;\n  }\n\n  var nextWorkInProgressHook;\n\n  if (workInProgressHook === null) {\n    nextWorkInProgressHook = currentlyRenderingFiber$1.memoizedState;\n  } else {\n    nextWorkInProgressHook = workInProgressHook.next;\n  }\n\n  if (nextWorkInProgressHook !== null) {\n    // There's already a work-in-progress. Reuse it.\n    workInProgressHook = nextWorkInProgressHook;\n    nextWorkInProgressHook = workInProgressHook.next;\n    currentHook = nextCurrentHook;\n  } else {\n    // Clone from the current hook.\n    if (nextCurrentHook === null) {\n      throw new Error('Rendered more hooks than during the previous render.');\n    }\n\n    currentHook = nextCurrentHook;\n    var newHook = {\n      memoizedState: currentHook.memoizedState,\n      baseState: currentHook.baseState,\n      baseQueue: currentHook.baseQueue,\n      queue: currentHook.queue,\n      next: null\n    };\n\n    if (workInProgressHook === null) {\n      // This is the first hook in the list.\n      currentlyRenderingFiber$1.memoizedState = workInProgressHook = newHook;\n    } else {\n      // Append to the end of the list.\n      workInProgressHook = workInProgressHook.next = newHook;\n    }\n  }\n\n  return workInProgressHook;\n}\n\nfunction createFunctionComponentUpdateQueue() {\n  return {\n    lastEffect: null,\n    stores: null\n  };\n}\n\nfunction basicStateReducer(state, action) {\n  // $FlowFixMe: Flow doesn't like mixed types\n  return typeof action === 'function' ? action(state) : action;\n}\n\nfunction mountReducer(reducer, initialArg, init) {\n  var hook = mountWorkInProgressHook();\n  var initialState;\n\n  if (init !== undefined) {\n    initialState = init(initialArg);\n  } else {\n    initialState = initialArg;\n  }\n\n  hook.memoizedState = hook.baseState = initialState;\n  var queue = {\n    pending: null,\n    interleaved: null,\n    lanes: NoLanes,\n    dispatch: null,\n    lastRenderedReducer: reducer,\n    lastRenderedState: initialState\n  };\n  hook.queue = queue;\n  var dispatch = queue.dispatch = dispatchReducerAction.bind(null, currentlyRenderingFiber$1, queue);\n  return [hook.memoizedState, dispatch];\n}\n\nfunction updateReducer(reducer, initialArg, init) {\n  var hook = updateWorkInProgressHook();\n  var queue = hook.queue;\n\n  if (queue === null) {\n    throw new Error('Should have a queue. This is likely a bug in React. Please file an issue.');\n  }\n\n  queue.lastRenderedReducer = reducer;\n  var current = currentHook; // The last rebase update that is NOT part of the base state.\n\n  var baseQueue = current.baseQueue; // The last pending update that hasn't been processed yet.\n\n  var pendingQueue = queue.pending;\n\n  if (pendingQueue !== null) {\n    // We have new updates that haven't been processed yet.\n    // We'll add them to the base queue.\n    if (baseQueue !== null) {\n      // Merge the pending queue and the base queue.\n      var baseFirst = baseQueue.next;\n      var pendingFirst = pendingQueue.next;\n      baseQueue.next = pendingFirst;\n      pendingQueue.next = baseFirst;\n    }\n\n    {\n      if (current.baseQueue !== baseQueue) {\n        // Internal invariant that should never happen, but feasibly could in\n        // the future if we implement resuming, or some form of that.\n        error('Internal error: Expected work-in-progress queue to be a clone. ' + 'This is a bug in React.');\n      }\n    }\n\n    current.baseQueue = baseQueue = pendingQueue;\n    queue.pending = null;\n  }\n\n  if (baseQueue !== null) {\n    // We have a queue to process.\n    var first = baseQueue.next;\n    var newState = current.baseState;\n    var newBaseState = null;\n    var newBaseQueueFirst = null;\n    var newBaseQueueLast = null;\n    var update = first;\n\n    do {\n      var updateLane = update.lane;\n\n      if (!isSubsetOfLanes(renderLanes, updateLane)) {\n        // Priority is insufficient. Skip this update. If this is the first\n        // skipped update, the previous update/state is the new base\n        // update/state.\n        var clone = {\n          lane: updateLane,\n          action: update.action,\n          hasEagerState: update.hasEagerState,\n          eagerState: update.eagerState,\n          next: null\n        };\n\n        if (newBaseQueueLast === null) {\n          newBaseQueueFirst = newBaseQueueLast = clone;\n          newBaseState = newState;\n        } else {\n          newBaseQueueLast = newBaseQueueLast.next = clone;\n        } // Update the remaining priority in the queue.\n        // TODO: Don't need to accumulate this. Instead, we can remove\n        // renderLanes from the original lanes.\n\n\n        currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, updateLane);\n        markSkippedUpdateLanes(updateLane);\n      } else {\n        // This update does have sufficient priority.\n        if (newBaseQueueLast !== null) {\n          var _clone = {\n            // This update is going to be committed so we never want uncommit\n            // it. Using NoLane works because 0 is a subset of all bitmasks, so\n            // this will never be skipped by the check above.\n            lane: NoLane,\n            action: update.action,\n            hasEagerState: update.hasEagerState,\n            eagerState: update.eagerState,\n            next: null\n          };\n          newBaseQueueLast = newBaseQueueLast.next = _clone;\n        } // Process this update.\n\n\n        if (update.hasEagerState) {\n          // If this update is a state update (not a reducer) and was processed eagerly,\n          // we can use the eagerly computed state\n          newState = update.eagerState;\n        } else {\n          var action = update.action;\n          newState = reducer(newState, action);\n        }\n      }\n\n      update = update.next;\n    } while (update !== null && update !== first);\n\n    if (newBaseQueueLast === null) {\n      newBaseState = newState;\n    } else {\n      newBaseQueueLast.next = newBaseQueueFirst;\n    } // Mark that the fiber performed work, but only if the new state is\n    // different from the current state.\n\n\n    if (!objectIs(newState, hook.memoizedState)) {\n      markWorkInProgressReceivedUpdate();\n    }\n\n    hook.memoizedState = newState;\n    hook.baseState = newBaseState;\n    hook.baseQueue = newBaseQueueLast;\n    queue.lastRenderedState = newState;\n  } // Interleaved updates are stored on a separate queue. We aren't going to\n  // process them during this render, but we do need to track which lanes\n  // are remaining.\n\n\n  var lastInterleaved = queue.interleaved;\n\n  if (lastInterleaved !== null) {\n    var interleaved = lastInterleaved;\n\n    do {\n      var interleavedLane = interleaved.lane;\n      currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, interleavedLane);\n      markSkippedUpdateLanes(interleavedLane);\n      interleaved = interleaved.next;\n    } while (interleaved !== lastInterleaved);\n  } else if (baseQueue === null) {\n    // `queue.lanes` is used for entangling transitions. We can set it back to\n    // zero once the queue is empty.\n    queue.lanes = NoLanes;\n  }\n\n  var dispatch = queue.dispatch;\n  return [hook.memoizedState, dispatch];\n}\n\nfunction rerenderReducer(reducer, initialArg, init) {\n  var hook = updateWorkInProgressHook();\n  var queue = hook.queue;\n\n  if (queue === null) {\n    throw new Error('Should have a queue. This is likely a bug in React. Please file an issue.');\n  }\n\n  queue.lastRenderedReducer = reducer; // This is a re-render. Apply the new render phase updates to the previous\n  // work-in-progress hook.\n\n  var dispatch = queue.dispatch;\n  var lastRenderPhaseUpdate = queue.pending;\n  var newState = hook.memoizedState;\n\n  if (lastRenderPhaseUpdate !== null) {\n    // The queue doesn't persist past this render pass.\n    queue.pending = null;\n    var firstRenderPhaseUpdate = lastRenderPhaseUpdate.next;\n    var update = firstRenderPhaseUpdate;\n\n    do {\n      // Process this render phase update. We don't have to check the\n      // priority because it will always be the same as the current\n      // render's.\n      var action = update.action;\n      newState = reducer(newState, action);\n      update = update.next;\n    } while (update !== firstRenderPhaseUpdate); // Mark that the fiber performed work, but only if the new state is\n    // different from the current state.\n\n\n    if (!objectIs(newState, hook.memoizedState)) {\n      markWorkInProgressReceivedUpdate();\n    }\n\n    hook.memoizedState = newState; // Don't persist the state accumulated from the render phase updates to\n    // the base state unless the queue is empty.\n    // TODO: Not sure if this is the desired semantics, but it's what we\n    // do for gDSFP. I can't remember why.\n\n    if (hook.baseQueue === null) {\n      hook.baseState = newState;\n    }\n\n    queue.lastRenderedState = newState;\n  }\n\n  return [newState, dispatch];\n}\n\nfunction mountMutableSource(source, getSnapshot, subscribe) {\n  {\n    return undefined;\n  }\n}\n\nfunction updateMutableSource(source, getSnapshot, subscribe) {\n  {\n    return undefined;\n  }\n}\n\nfunction mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  var fiber = currentlyRenderingFiber$1;\n  var hook = mountWorkInProgressHook();\n  var nextSnapshot;\n  var isHydrating = getIsHydrating();\n\n  if (isHydrating) {\n    if (getServerSnapshot === undefined) {\n      throw new Error('Missing getServerSnapshot, which is required for ' + 'server-rendered content. Will revert to client rendering.');\n    }\n\n    nextSnapshot = getServerSnapshot();\n\n    {\n      if (!didWarnUncachedGetSnapshot) {\n        if (nextSnapshot !== getServerSnapshot()) {\n          error('The result of getServerSnapshot should be cached to avoid an infinite loop');\n\n          didWarnUncachedGetSnapshot = true;\n        }\n      }\n    }\n  } else {\n    nextSnapshot = getSnapshot();\n\n    {\n      if (!didWarnUncachedGetSnapshot) {\n        var cachedSnapshot = getSnapshot();\n\n        if (!objectIs(nextSnapshot, cachedSnapshot)) {\n          error('The result of getSnapshot should be cached to avoid an infinite loop');\n\n          didWarnUncachedGetSnapshot = true;\n        }\n      }\n    } // Unless we're rendering a blocking lane, schedule a consistency check.\n    // Right before committing, we will walk the tree and check if any of the\n    // stores were mutated.\n    //\n    // We won't do this if we're hydrating server-rendered content, because if\n    // the content is stale, it's already visible anyway. Instead we'll patch\n    // it up in a passive effect.\n\n\n    var root = getWorkInProgressRoot();\n\n    if (root === null) {\n      throw new Error('Expected a work-in-progress root. This is a bug in React. Please file an issue.');\n    }\n\n    if (!includesBlockingLane(root, renderLanes)) {\n      pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);\n    }\n  } // Read the current snapshot from the store on every render. This breaks the\n  // normal rules of React, and only works because store updates are\n  // always synchronous.\n\n\n  hook.memoizedState = nextSnapshot;\n  var inst = {\n    value: nextSnapshot,\n    getSnapshot: getSnapshot\n  };\n  hook.queue = inst; // Schedule an effect to subscribe to the store.\n\n  mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [subscribe]); // Schedule an effect to update the mutable instance fields. We will update\n  // this whenever subscribe, getSnapshot, or value changes. Because there's no\n  // clean-up function, and we track the deps correctly, we can call pushEffect\n  // directly, without storing any additional state. For the same reason, we\n  // don't need to set a static flag, either.\n  // TODO: We can move this to the passive phase once we add a pre-commit\n  // consistency check. See the next comment.\n\n  fiber.flags |= Passive;\n  pushEffect(HasEffect | Passive$1, updateStoreInstance.bind(null, fiber, inst, nextSnapshot, getSnapshot), undefined, null);\n  return nextSnapshot;\n}\n\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  var fiber = currentlyRenderingFiber$1;\n  var hook = updateWorkInProgressHook(); // Read the current snapshot from the store on every render. This breaks the\n  // normal rules of React, and only works because store updates are\n  // always synchronous.\n\n  var nextSnapshot = getSnapshot();\n\n  {\n    if (!didWarnUncachedGetSnapshot) {\n      var cachedSnapshot = getSnapshot();\n\n      if (!objectIs(nextSnapshot, cachedSnapshot)) {\n        error('The result of getSnapshot should be cached to avoid an infinite loop');\n\n        didWarnUncachedGetSnapshot = true;\n      }\n    }\n  }\n\n  var prevSnapshot = hook.memoizedState;\n  var snapshotChanged = !objectIs(prevSnapshot, nextSnapshot);\n\n  if (snapshotChanged) {\n    hook.memoizedState = nextSnapshot;\n    markWorkInProgressReceivedUpdate();\n  }\n\n  var inst = hook.queue;\n  updateEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [subscribe]); // Whenever getSnapshot or subscribe changes, we need to check in the\n  // commit phase if there was an interleaved mutation. In concurrent mode\n  // this can happen all the time, but even in synchronous mode, an earlier\n  // effect may have mutated the store.\n\n  if (inst.getSnapshot !== getSnapshot || snapshotChanged || // Check if the susbcribe function changed. We can save some memory by\n  // checking whether we scheduled a subscription effect above.\n  workInProgressHook !== null && workInProgressHook.memoizedState.tag & HasEffect) {\n    fiber.flags |= Passive;\n    pushEffect(HasEffect | Passive$1, updateStoreInstance.bind(null, fiber, inst, nextSnapshot, getSnapshot), undefined, null); // Unless we're rendering a blocking lane, schedule a consistency check.\n    // Right before committing, we will walk the tree and check if any of the\n    // stores were mutated.\n\n    var root = getWorkInProgressRoot();\n\n    if (root === null) {\n      throw new Error('Expected a work-in-progress root. This is a bug in React. Please file an issue.');\n    }\n\n    if (!includesBlockingLane(root, renderLanes)) {\n      pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);\n    }\n  }\n\n  return nextSnapshot;\n}\n\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n  fiber.flags |= StoreConsistency;\n  var check = {\n    getSnapshot: getSnapshot,\n    value: renderedSnapshot\n  };\n  var componentUpdateQueue = currentlyRenderingFiber$1.updateQueue;\n\n  if (componentUpdateQueue === null) {\n    componentUpdateQueue = createFunctionComponentUpdateQueue();\n    currentlyRenderingFiber$1.updateQueue = componentUpdateQueue;\n    componentUpdateQueue.stores = [check];\n  } else {\n    var stores = componentUpdateQueue.stores;\n\n    if (stores === null) {\n      componentUpdateQueue.stores = [check];\n    } else {\n      stores.push(check);\n    }\n  }\n}\n\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n  // These are updated in the passive phase\n  inst.value = nextSnapshot;\n  inst.getSnapshot = getSnapshot; // Something may have been mutated in between render and commit. This could\n  // have been in an event that fired before the passive effects, or it could\n  // have been in a layout effect. In that case, we would have used the old\n  // snapsho and getSnapshot values to bail out. We need to check one more time.\n\n  if (checkIfSnapshotChanged(inst)) {\n    // Force a re-render.\n    forceStoreRerender(fiber);\n  }\n}\n\nfunction subscribeToStore(fiber, inst, subscribe) {\n  var handleStoreChange = function () {\n    // The store changed. Check if the snapshot changed since the last time we\n    // read from the store.\n    if (checkIfSnapshotChanged(inst)) {\n      // Force a re-render.\n      forceStoreRerender(fiber);\n    }\n  }; // Subscribe to the store and return a clean-up function.\n\n\n  return subscribe(handleStoreChange);\n}\n\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  var prevValue = inst.value;\n\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(prevValue, nextValue);\n  } catch (error) {\n    return true;\n  }\n}\n\nfunction forceStoreRerender(fiber) {\n  var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n  if (root !== null) {\n    scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);\n  }\n}\n\nfunction mountState(initialState) {\n  var hook = mountWorkInProgressHook();\n\n  if (typeof initialState === 'function') {\n    // $FlowFixMe: Flow doesn't like mixed types\n    initialState = initialState();\n  }\n\n  hook.memoizedState = hook.baseState = initialState;\n  var queue = {\n    pending: null,\n    interleaved: null,\n    lanes: NoLanes,\n    dispatch: null,\n    lastRenderedReducer: basicStateReducer,\n    lastRenderedState: initialState\n  };\n  hook.queue = queue;\n  var dispatch = queue.dispatch = dispatchSetState.bind(null, currentlyRenderingFiber$1, queue);\n  return [hook.memoizedState, dispatch];\n}\n\nfunction updateState(initialState) {\n  return updateReducer(basicStateReducer);\n}\n\nfunction rerenderState(initialState) {\n  return rerenderReducer(basicStateReducer);\n}\n\nfunction pushEffect(tag, create, destroy, deps) {\n  var effect = {\n    tag: tag,\n    create: create,\n    destroy: destroy,\n    deps: deps,\n    // Circular\n    next: null\n  };\n  var componentUpdateQueue = currentlyRenderingFiber$1.updateQueue;\n\n  if (componentUpdateQueue === null) {\n    componentUpdateQueue = createFunctionComponentUpdateQueue();\n    currentlyRenderingFiber$1.updateQueue = componentUpdateQueue;\n    componentUpdateQueue.lastEffect = effect.next = effect;\n  } else {\n    var lastEffect = componentUpdateQueue.lastEffect;\n\n    if (lastEffect === null) {\n      componentUpdateQueue.lastEffect = effect.next = effect;\n    } else {\n      var firstEffect = lastEffect.next;\n      lastEffect.next = effect;\n      effect.next = firstEffect;\n      componentUpdateQueue.lastEffect = effect;\n    }\n  }\n\n  return effect;\n}\n\nfunction mountRef(initialValue) {\n  var hook = mountWorkInProgressHook();\n\n  {\n    var _ref2 = {\n      current: initialValue\n    };\n    hook.memoizedState = _ref2;\n    return _ref2;\n  }\n}\n\nfunction updateRef(initialValue) {\n  var hook = updateWorkInProgressHook();\n  return hook.memoizedState;\n}\n\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = mountWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  currentlyRenderingFiber$1.flags |= fiberFlags;\n  hook.memoizedState = pushEffect(HasEffect | hookFlags, create, undefined, nextDeps);\n}\n\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = updateWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  var destroy = undefined;\n\n  if (currentHook !== null) {\n    var prevEffect = currentHook.memoizedState;\n    destroy = prevEffect.destroy;\n\n    if (nextDeps !== null) {\n      var prevDeps = prevEffect.deps;\n\n      if (areHookInputsEqual(nextDeps, prevDeps)) {\n        hook.memoizedState = pushEffect(hookFlags, create, destroy, nextDeps);\n        return;\n      }\n    }\n  }\n\n  currentlyRenderingFiber$1.flags |= fiberFlags;\n  hook.memoizedState = pushEffect(HasEffect | hookFlags, create, destroy, nextDeps);\n}\n\nfunction mountEffect(create, deps) {\n  if ( (currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode) {\n    return mountEffectImpl(MountPassiveDev | Passive | PassiveStatic, Passive$1, create, deps);\n  } else {\n    return mountEffectImpl(Passive | PassiveStatic, Passive$1, create, deps);\n  }\n}\n\nfunction updateEffect(create, deps) {\n  return updateEffectImpl(Passive, Passive$1, create, deps);\n}\n\nfunction mountInsertionEffect(create, deps) {\n  return mountEffectImpl(Update, Insertion, create, deps);\n}\n\nfunction updateInsertionEffect(create, deps) {\n  return updateEffectImpl(Update, Insertion, create, deps);\n}\n\nfunction mountLayoutEffect(create, deps) {\n  var fiberFlags = Update;\n\n  {\n    fiberFlags |= LayoutStatic;\n  }\n\n  if ( (currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode) {\n    fiberFlags |= MountLayoutDev;\n  }\n\n  return mountEffectImpl(fiberFlags, Layout, create, deps);\n}\n\nfunction updateLayoutEffect(create, deps) {\n  return updateEffectImpl(Update, Layout, create, deps);\n}\n\nfunction imperativeHandleEffect(create, ref) {\n  if (typeof ref === 'function') {\n    var refCallback = ref;\n\n    var _inst = create();\n\n    refCallback(_inst);\n    return function () {\n      refCallback(null);\n    };\n  } else if (ref !== null && ref !== undefined) {\n    var refObject = ref;\n\n    {\n      if (!refObject.hasOwnProperty('current')) {\n        error('Expected useImperativeHandle() first argument to either be a ' + 'ref callback or React.createRef() object. Instead received: %s.', 'an object with keys {' + Object.keys(refObject).join(', ') + '}');\n      }\n    }\n\n    var _inst2 = create();\n\n    refObject.current = _inst2;\n    return function () {\n      refObject.current = null;\n    };\n  }\n}\n\nfunction mountImperativeHandle(ref, create, deps) {\n  {\n    if (typeof create !== 'function') {\n      error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');\n    }\n  } // TODO: If deps are provided, should we skip comparing the ref itself?\n\n\n  var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;\n  var fiberFlags = Update;\n\n  {\n    fiberFlags |= LayoutStatic;\n  }\n\n  if ( (currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode) {\n    fiberFlags |= MountLayoutDev;\n  }\n\n  return mountEffectImpl(fiberFlags, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);\n}\n\nfunction updateImperativeHandle(ref, create, deps) {\n  {\n    if (typeof create !== 'function') {\n      error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');\n    }\n  } // TODO: If deps are provided, should we skip comparing the ref itself?\n\n\n  var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;\n  return updateEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);\n}\n\nfunction mountDebugValue(value, formatterFn) {// This hook is normally a no-op.\n  // The react-debug-hooks package injects its own implementation\n  // so that e.g. DevTools can display custom hook values.\n}\n\nvar updateDebugValue = mountDebugValue;\n\nfunction mountCallback(callback, deps) {\n  var hook = mountWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  hook.memoizedState = [callback, nextDeps];\n  return callback;\n}\n\nfunction updateCallback(callback, deps) {\n  var hook = updateWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  var prevState = hook.memoizedState;\n\n  if (prevState !== null) {\n    if (nextDeps !== null) {\n      var prevDeps = prevState[1];\n\n      if (areHookInputsEqual(nextDeps, prevDeps)) {\n        return prevState[0];\n      }\n    }\n  }\n\n  hook.memoizedState = [callback, nextDeps];\n  return callback;\n}\n\nfunction mountMemo(nextCreate, deps) {\n  var hook = mountWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  var nextValue = nextCreate();\n  hook.memoizedState = [nextValue, nextDeps];\n  return nextValue;\n}\n\nfunction updateMemo(nextCreate, deps) {\n  var hook = updateWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n  var prevState = hook.memoizedState;\n\n  if (prevState !== null) {\n    // Assume these are defined. If they're not, areHookInputsEqual will warn.\n    if (nextDeps !== null) {\n      var prevDeps = prevState[1];\n\n      if (areHookInputsEqual(nextDeps, prevDeps)) {\n        return prevState[0];\n      }\n    }\n  }\n\n  var nextValue = nextCreate();\n  hook.memoizedState = [nextValue, nextDeps];\n  return nextValue;\n}\n\nfunction mountDeferredValue(value) {\n  var hook = mountWorkInProgressHook();\n  hook.memoizedState = value;\n  return value;\n}\n\nfunction updateDeferredValue(value) {\n  var hook = updateWorkInProgressHook();\n  var resolvedCurrentHook = currentHook;\n  var prevValue = resolvedCurrentHook.memoizedState;\n  return updateDeferredValueImpl(hook, prevValue, value);\n}\n\nfunction rerenderDeferredValue(value) {\n  var hook = updateWorkInProgressHook();\n\n  if (currentHook === null) {\n    // This is a rerender during a mount.\n    hook.memoizedState = value;\n    return value;\n  } else {\n    // This is a rerender during an update.\n    var prevValue = currentHook.memoizedState;\n    return updateDeferredValueImpl(hook, prevValue, value);\n  }\n}\n\nfunction updateDeferredValueImpl(hook, prevValue, value) {\n  var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes);\n\n  if (shouldDeferValue) {\n    // This is an urgent update. If the value has changed, keep using the\n    // previous value and spawn a deferred render to update it later.\n    if (!objectIs(value, prevValue)) {\n      // Schedule a deferred render\n      var deferredLane = claimNextTransitionLane();\n      currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, deferredLane);\n      markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent\n      // from the latest value. The name \"baseState\" doesn't really match how we\n      // use it because we're reusing a state hook field instead of creating a\n      // new one.\n\n      hook.baseState = true;\n    } // Reuse the previous value\n\n\n    return prevValue;\n  } else {\n    // This is not an urgent update, so we can use the latest value regardless\n    // of what it is. No need to defer it.\n    // However, if we're currently inside a spawned render, then we need to mark\n    // this as an update to prevent the fiber from bailing out.\n    //\n    // `baseState` is true when the current value is different from the rendered\n    // value. The name doesn't really match how we use it because we're reusing\n    // a state hook field instead of creating a new one.\n    if (hook.baseState) {\n      // Flip this back to false.\n      hook.baseState = false;\n      markWorkInProgressReceivedUpdate();\n    }\n\n    hook.memoizedState = value;\n    return value;\n  }\n}\n\nfunction startTransition(setPending, callback, options) {\n  var previousPriority = getCurrentUpdatePriority();\n  setCurrentUpdatePriority(higherEventPriority(previousPriority, ContinuousEventPriority));\n  setPending(true);\n  var prevTransition = ReactCurrentBatchConfig$2.transition;\n  ReactCurrentBatchConfig$2.transition = {};\n  var currentTransition = ReactCurrentBatchConfig$2.transition;\n\n  {\n    ReactCurrentBatchConfig$2.transition._updatedFibers = new Set();\n  }\n\n  try {\n    setPending(false);\n    callback();\n  } finally {\n    setCurrentUpdatePriority(previousPriority);\n    ReactCurrentBatchConfig$2.transition = prevTransition;\n\n    {\n      if (prevTransition === null && currentTransition._updatedFibers) {\n        var updatedFibersCount = currentTransition._updatedFibers.size;\n\n        if (updatedFibersCount > 10) {\n          warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.');\n        }\n\n        currentTransition._updatedFibers.clear();\n      }\n    }\n  }\n}\n\nfunction mountTransition() {\n  var _mountState = mountState(false),\n      isPending = _mountState[0],\n      setPending = _mountState[1]; // The `start` method never changes.\n\n\n  var start = startTransition.bind(null, setPending);\n  var hook = mountWorkInProgressHook();\n  hook.memoizedState = start;\n  return [isPending, start];\n}\n\nfunction updateTransition() {\n  var _updateState = updateState(),\n      isPending = _updateState[0];\n\n  var hook = updateWorkInProgressHook();\n  var start = hook.memoizedState;\n  return [isPending, start];\n}\n\nfunction rerenderTransition() {\n  var _rerenderState = rerenderState(),\n      isPending = _rerenderState[0];\n\n  var hook = updateWorkInProgressHook();\n  var start = hook.memoizedState;\n  return [isPending, start];\n}\n\nvar isUpdatingOpaqueValueInRenderPhase = false;\nfunction getIsUpdatingOpaqueValueInRenderPhaseInDEV() {\n  {\n    return isUpdatingOpaqueValueInRenderPhase;\n  }\n}\n\nfunction mountId() {\n  var hook = mountWorkInProgressHook();\n  var root = getWorkInProgressRoot(); // TODO: In Fizz, id generation is specific to each server config. Maybe we\n  // should do this in Fiber, too? Deferring this decision for now because\n  // there's no other place to store the prefix except for an internal field on\n  // the public createRoot object, which the fiber tree does not currently have\n  // a reference to.\n\n  var identifierPrefix = root.identifierPrefix;\n  var id;\n\n  if (getIsHydrating()) {\n    var treeId = getTreeId(); // Use a captial R prefix for server-generated ids.\n\n    id = ':' + identifierPrefix + 'R' + treeId; // Unless this is the first id at this level, append a number at the end\n    // that represents the position of this useId hook among all the useId\n    // hooks for this fiber.\n\n    var localId = localIdCounter++;\n\n    if (localId > 0) {\n      id += 'H' + localId.toString(32);\n    }\n\n    id += ':';\n  } else {\n    // Use a lowercase r prefix for client-generated ids.\n    var globalClientId = globalClientIdCounter++;\n    id = ':' + identifierPrefix + 'r' + globalClientId.toString(32) + ':';\n  }\n\n  hook.memoizedState = id;\n  return id;\n}\n\nfunction updateId() {\n  var hook = updateWorkInProgressHook();\n  var id = hook.memoizedState;\n  return id;\n}\n\nfunction dispatchReducerAction(fiber, queue, action) {\n  {\n    if (typeof arguments[3] === 'function') {\n      error(\"State updates from the useState() and useReducer() Hooks don't support the \" + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().');\n    }\n  }\n\n  var lane = requestUpdateLane(fiber);\n  var update = {\n    lane: lane,\n    action: action,\n    hasEagerState: false,\n    eagerState: null,\n    next: null\n  };\n\n  if (isRenderPhaseUpdate(fiber)) {\n    enqueueRenderPhaseUpdate(queue, update);\n  } else {\n    var root = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n\n    if (root !== null) {\n      var eventTime = requestEventTime();\n      scheduleUpdateOnFiber(root, fiber, lane, eventTime);\n      entangleTransitionUpdate(root, queue, lane);\n    }\n  }\n\n  markUpdateInDevTools(fiber, lane);\n}\n\nfunction dispatchSetState(fiber, queue, action) {\n  {\n    if (typeof arguments[3] === 'function') {\n      error(\"State updates from the useState() and useReducer() Hooks don't support the \" + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().');\n    }\n  }\n\n  var lane = requestUpdateLane(fiber);\n  var update = {\n    lane: lane,\n    action: action,\n    hasEagerState: false,\n    eagerState: null,\n    next: null\n  };\n\n  if (isRenderPhaseUpdate(fiber)) {\n    enqueueRenderPhaseUpdate(queue, update);\n  } else {\n    var alternate = fiber.alternate;\n\n    if (fiber.lanes === NoLanes && (alternate === null || alternate.lanes === NoLanes)) {\n      // The queue is currently empty, which means we can eagerly compute the\n      // next state before entering the render phase. If the new state is the\n      // same as the current state, we may be able to bail out entirely.\n      var lastRenderedReducer = queue.lastRenderedReducer;\n\n      if (lastRenderedReducer !== null) {\n        var prevDispatcher;\n\n        {\n          prevDispatcher = ReactCurrentDispatcher$1.current;\n          ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n        }\n\n        try {\n          var currentState = queue.lastRenderedState;\n          var eagerState = lastRenderedReducer(currentState, action); // Stash the eagerly computed state, and the reducer used to compute\n          // it, on the update object. If the reducer hasn't changed by the\n          // time we enter the render phase, then the eager state can be used\n          // without calling the reducer again.\n\n          update.hasEagerState = true;\n          update.eagerState = eagerState;\n\n          if (objectIs(eagerState, currentState)) {\n            // Fast path. We can bail out without scheduling React to re-render.\n            // It's still possible that we'll need to rebase this update later,\n            // if the component re-renders for a different reason and by that\n            // time the reducer has changed.\n            // TODO: Do we still need to entangle transitions in this case?\n            enqueueConcurrentHookUpdateAndEagerlyBailout(fiber, queue, update, lane);\n            return;\n          }\n        } catch (error) {// Suppress the error. It will throw again in the render phase.\n        } finally {\n          {\n            ReactCurrentDispatcher$1.current = prevDispatcher;\n          }\n        }\n      }\n    }\n\n    var root = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n\n    if (root !== null) {\n      var eventTime = requestEventTime();\n      scheduleUpdateOnFiber(root, fiber, lane, eventTime);\n      entangleTransitionUpdate(root, queue, lane);\n    }\n  }\n\n  markUpdateInDevTools(fiber, lane);\n}\n\nfunction isRenderPhaseUpdate(fiber) {\n  var alternate = fiber.alternate;\n  return fiber === currentlyRenderingFiber$1 || alternate !== null && alternate === currentlyRenderingFiber$1;\n}\n\nfunction enqueueRenderPhaseUpdate(queue, update) {\n  // This is a render phase update. Stash it in a lazily-created map of\n  // queue -> linked list of updates. After this render pass, we'll restart\n  // and apply the stashed updates on top of the work-in-progress hook.\n  didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate = true;\n  var pending = queue.pending;\n\n  if (pending === null) {\n    // This is the first update. Create a circular list.\n    update.next = update;\n  } else {\n    update.next = pending.next;\n    pending.next = update;\n  }\n\n  queue.pending = update;\n} // TODO: Move to ReactFiberConcurrentUpdates?\n\n\nfunction entangleTransitionUpdate(root, queue, lane) {\n  if (isTransitionLane(lane)) {\n    var queueLanes = queue.lanes; // If any entangled lanes are no longer pending on the root, then they\n    // must have finished. We can remove them from the shared queue, which\n    // represents a superset of the actually pending lanes. In some cases we\n    // may entangle more than we need to, but that's OK. In fact it's worse if\n    // we *don't* entangle when we should.\n\n    queueLanes = intersectLanes(queueLanes, root.pendingLanes); // Entangle the new transition lane with the other transition lanes.\n\n    var newQueueLanes = mergeLanes(queueLanes, lane);\n    queue.lanes = newQueueLanes; // Even if queue.lanes already include lane, we don't know for certain if\n    // the lane finished since the last time we entangled it. So we need to\n    // entangle it again, just to be sure.\n\n    markRootEntangled(root, newQueueLanes);\n  }\n}\n\nfunction markUpdateInDevTools(fiber, lane, action) {\n\n  {\n    markStateUpdateScheduled(fiber, lane);\n  }\n}\n\nvar ContextOnlyDispatcher = {\n  readContext: readContext,\n  useCallback: throwInvalidHookError,\n  useContext: throwInvalidHookError,\n  useEffect: throwInvalidHookError,\n  useImperativeHandle: throwInvalidHookError,\n  useInsertionEffect: throwInvalidHookError,\n  useLayoutEffect: throwInvalidHookError,\n  useMemo: throwInvalidHookError,\n  useReducer: throwInvalidHookError,\n  useRef: throwInvalidHookError,\n  useState: throwInvalidHookError,\n  useDebugValue: throwInvalidHookError,\n  useDeferredValue: throwInvalidHookError,\n  useTransition: throwInvalidHookError,\n  useMutableSource: throwInvalidHookError,\n  useSyncExternalStore: throwInvalidHookError,\n  useId: throwInvalidHookError,\n  unstable_isNewReconciler: enableNewReconciler\n};\n\nvar HooksDispatcherOnMountInDEV = null;\nvar HooksDispatcherOnMountWithHookTypesInDEV = null;\nvar HooksDispatcherOnUpdateInDEV = null;\nvar HooksDispatcherOnRerenderInDEV = null;\nvar InvalidNestedHooksDispatcherOnMountInDEV = null;\nvar InvalidNestedHooksDispatcherOnUpdateInDEV = null;\nvar InvalidNestedHooksDispatcherOnRerenderInDEV = null;\n\n{\n  var warnInvalidContextAccess = function () {\n    error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n  };\n\n  var warnInvalidHookAccess = function () {\n    error('Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. ' + 'You can only call Hooks at the top level of your React function. ' + 'For more information, see ' + 'https://reactjs.org/link/rules-of-hooks');\n  };\n\n  HooksDispatcherOnMountInDEV = {\n    readContext: function (context) {\n      return readContext(context);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      mountHookTypesDev();\n      checkDepsAreArrayDev(deps);\n      return mountCallback(callback, deps);\n    },\n    useContext: function (context) {\n      currentHookNameInDev = 'useContext';\n      mountHookTypesDev();\n      return readContext(context);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      mountHookTypesDev();\n      checkDepsAreArrayDev(deps);\n      return mountEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      mountHookTypesDev();\n      checkDepsAreArrayDev(deps);\n      return mountImperativeHandle(ref, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      currentHookNameInDev = 'useInsertionEffect';\n      mountHookTypesDev();\n      checkDepsAreArrayDev(deps);\n      return mountInsertionEffect(create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      mountHookTypesDev();\n      checkDepsAreArrayDev(deps);\n      return mountLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      mountHookTypesDev();\n      checkDepsAreArrayDev(deps);\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      mountHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      mountHookTypesDev();\n      return mountRef(initialValue);\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      mountHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountState(initialState);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      mountHookTypesDev();\n      return mountDebugValue();\n    },\n    useDeferredValue: function (value) {\n      currentHookNameInDev = 'useDeferredValue';\n      mountHookTypesDev();\n      return mountDeferredValue(value);\n    },\n    useTransition: function () {\n      currentHookNameInDev = 'useTransition';\n      mountHookTypesDev();\n      return mountTransition();\n    },\n    useMutableSource: function (source, getSnapshot, subscribe) {\n      currentHookNameInDev = 'useMutableSource';\n      mountHookTypesDev();\n      return mountMutableSource();\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      currentHookNameInDev = 'useSyncExternalStore';\n      mountHookTypesDev();\n      return mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n    },\n    useId: function () {\n      currentHookNameInDev = 'useId';\n      mountHookTypesDev();\n      return mountId();\n    },\n    unstable_isNewReconciler: enableNewReconciler\n  };\n\n  HooksDispatcherOnMountWithHookTypesInDEV = {\n    readContext: function (context) {\n      return readContext(context);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      updateHookTypesDev();\n      return mountCallback(callback, deps);\n    },\n    useContext: function (context) {\n      currentHookNameInDev = 'useContext';\n      updateHookTypesDev();\n      return readContext(context);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      updateHookTypesDev();\n      return mountEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      updateHookTypesDev();\n      return mountImperativeHandle(ref, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      currentHookNameInDev = 'useInsertionEffect';\n      updateHookTypesDev();\n      return mountInsertionEffect(create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      updateHookTypesDev();\n      return mountLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      updateHookTypesDev();\n      return mountRef(initialValue);\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountState(initialState);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      updateHookTypesDev();\n      return mountDebugValue();\n    },\n    useDeferredValue: function (value) {\n      currentHookNameInDev = 'useDeferredValue';\n      updateHookTypesDev();\n      return mountDeferredValue(value);\n    },\n    useTransition: function () {\n      currentHookNameInDev = 'useTransition';\n      updateHookTypesDev();\n      return mountTransition();\n    },\n    useMutableSource: function (source, getSnapshot, subscribe) {\n      currentHookNameInDev = 'useMutableSource';\n      updateHookTypesDev();\n      return mountMutableSource();\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      currentHookNameInDev = 'useSyncExternalStore';\n      updateHookTypesDev();\n      return mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n    },\n    useId: function () {\n      currentHookNameInDev = 'useId';\n      updateHookTypesDev();\n      return mountId();\n    },\n    unstable_isNewReconciler: enableNewReconciler\n  };\n\n  HooksDispatcherOnUpdateInDEV = {\n    readContext: function (context) {\n      return readContext(context);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      updateHookTypesDev();\n      return updateCallback(callback, deps);\n    },\n    useContext: function (context) {\n      currentHookNameInDev = 'useContext';\n      updateHookTypesDev();\n      return readContext(context);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      updateHookTypesDev();\n      return updateEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      updateHookTypesDev();\n      return updateImperativeHandle(ref, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      currentHookNameInDev = 'useInsertionEffect';\n      updateHookTypesDev();\n      return updateInsertionEffect(create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      updateHookTypesDev();\n      return updateLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      updateHookTypesDev();\n      return updateRef();\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateState(initialState);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      updateHookTypesDev();\n      return updateDebugValue();\n    },\n    useDeferredValue: function (value) {\n      currentHookNameInDev = 'useDeferredValue';\n      updateHookTypesDev();\n      return updateDeferredValue(value);\n    },\n    useTransition: function () {\n      currentHookNameInDev = 'useTransition';\n      updateHookTypesDev();\n      return updateTransition();\n    },\n    useMutableSource: function (source, getSnapshot, subscribe) {\n      currentHookNameInDev = 'useMutableSource';\n      updateHookTypesDev();\n      return updateMutableSource();\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      currentHookNameInDev = 'useSyncExternalStore';\n      updateHookTypesDev();\n      return updateSyncExternalStore(subscribe, getSnapshot);\n    },\n    useId: function () {\n      currentHookNameInDev = 'useId';\n      updateHookTypesDev();\n      return updateId();\n    },\n    unstable_isNewReconciler: enableNewReconciler\n  };\n\n  HooksDispatcherOnRerenderInDEV = {\n    readContext: function (context) {\n      return readContext(context);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      updateHookTypesDev();\n      return updateCallback(callback, deps);\n    },\n    useContext: function (context) {\n      currentHookNameInDev = 'useContext';\n      updateHookTypesDev();\n      return readContext(context);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      updateHookTypesDev();\n      return updateEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      updateHookTypesDev();\n      return updateImperativeHandle(ref, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      currentHookNameInDev = 'useInsertionEffect';\n      updateHookTypesDev();\n      return updateInsertionEffect(create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      updateHookTypesDev();\n      return updateLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n      try {\n        return updateMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n      try {\n        return rerenderReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      updateHookTypesDev();\n      return updateRef();\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n      try {\n        return rerenderState(initialState);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      updateHookTypesDev();\n      return updateDebugValue();\n    },\n    useDeferredValue: function (value) {\n      currentHookNameInDev = 'useDeferredValue';\n      updateHookTypesDev();\n      return rerenderDeferredValue(value);\n    },\n    useTransition: function () {\n      currentHookNameInDev = 'useTransition';\n      updateHookTypesDev();\n      return rerenderTransition();\n    },\n    useMutableSource: function (source, getSnapshot, subscribe) {\n      currentHookNameInDev = 'useMutableSource';\n      updateHookTypesDev();\n      return updateMutableSource();\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      currentHookNameInDev = 'useSyncExternalStore';\n      updateHookTypesDev();\n      return updateSyncExternalStore(subscribe, getSnapshot);\n    },\n    useId: function () {\n      currentHookNameInDev = 'useId';\n      updateHookTypesDev();\n      return updateId();\n    },\n    unstable_isNewReconciler: enableNewReconciler\n  };\n\n  InvalidNestedHooksDispatcherOnMountInDEV = {\n    readContext: function (context) {\n      warnInvalidContextAccess();\n      return readContext(context);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountCallback(callback, deps);\n    },\n    useContext: function (context) {\n      currentHookNameInDev = 'useContext';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return readContext(context);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountImperativeHandle(ref, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      currentHookNameInDev = 'useInsertionEffect';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountInsertionEffect(create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountRef(initialValue);\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n      try {\n        return mountState(initialState);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountDebugValue();\n    },\n    useDeferredValue: function (value) {\n      currentHookNameInDev = 'useDeferredValue';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountDeferredValue(value);\n    },\n    useTransition: function () {\n      currentHookNameInDev = 'useTransition';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountTransition();\n    },\n    useMutableSource: function (source, getSnapshot, subscribe) {\n      currentHookNameInDev = 'useMutableSource';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountMutableSource();\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      currentHookNameInDev = 'useSyncExternalStore';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n    },\n    useId: function () {\n      currentHookNameInDev = 'useId';\n      warnInvalidHookAccess();\n      mountHookTypesDev();\n      return mountId();\n    },\n    unstable_isNewReconciler: enableNewReconciler\n  };\n\n  InvalidNestedHooksDispatcherOnUpdateInDEV = {\n    readContext: function (context) {\n      warnInvalidContextAccess();\n      return readContext(context);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateCallback(callback, deps);\n    },\n    useContext: function (context) {\n      currentHookNameInDev = 'useContext';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return readContext(context);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateImperativeHandle(ref, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      currentHookNameInDev = 'useInsertionEffect';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateInsertionEffect(create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateRef();\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateState(initialState);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateDebugValue();\n    },\n    useDeferredValue: function (value) {\n      currentHookNameInDev = 'useDeferredValue';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateDeferredValue(value);\n    },\n    useTransition: function () {\n      currentHookNameInDev = 'useTransition';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateTransition();\n    },\n    useMutableSource: function (source, getSnapshot, subscribe) {\n      currentHookNameInDev = 'useMutableSource';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateMutableSource();\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      currentHookNameInDev = 'useSyncExternalStore';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateSyncExternalStore(subscribe, getSnapshot);\n    },\n    useId: function () {\n      currentHookNameInDev = 'useId';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateId();\n    },\n    unstable_isNewReconciler: enableNewReconciler\n  };\n\n  InvalidNestedHooksDispatcherOnRerenderInDEV = {\n    readContext: function (context) {\n      warnInvalidContextAccess();\n      return readContext(context);\n    },\n    useCallback: function (callback, deps) {\n      currentHookNameInDev = 'useCallback';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateCallback(callback, deps);\n    },\n    useContext: function (context) {\n      currentHookNameInDev = 'useContext';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return readContext(context);\n    },\n    useEffect: function (create, deps) {\n      currentHookNameInDev = 'useEffect';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateEffect(create, deps);\n    },\n    useImperativeHandle: function (ref, create, deps) {\n      currentHookNameInDev = 'useImperativeHandle';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateImperativeHandle(ref, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      currentHookNameInDev = 'useInsertionEffect';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateInsertionEffect(create, deps);\n    },\n    useLayoutEffect: function (create, deps) {\n      currentHookNameInDev = 'useLayoutEffect';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateLayoutEffect(create, deps);\n    },\n    useMemo: function (create, deps) {\n      currentHookNameInDev = 'useMemo';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return updateMemo(create, deps);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useReducer: function (reducer, initialArg, init) {\n      currentHookNameInDev = 'useReducer';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return rerenderReducer(reducer, initialArg, init);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useRef: function (initialValue) {\n      currentHookNameInDev = 'useRef';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateRef();\n    },\n    useState: function (initialState) {\n      currentHookNameInDev = 'useState';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      var prevDispatcher = ReactCurrentDispatcher$1.current;\n      ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n      try {\n        return rerenderState(initialState);\n      } finally {\n        ReactCurrentDispatcher$1.current = prevDispatcher;\n      }\n    },\n    useDebugValue: function (value, formatterFn) {\n      currentHookNameInDev = 'useDebugValue';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateDebugValue();\n    },\n    useDeferredValue: function (value) {\n      currentHookNameInDev = 'useDeferredValue';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return rerenderDeferredValue(value);\n    },\n    useTransition: function () {\n      currentHookNameInDev = 'useTransition';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return rerenderTransition();\n    },\n    useMutableSource: function (source, getSnapshot, subscribe) {\n      currentHookNameInDev = 'useMutableSource';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateMutableSource();\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      currentHookNameInDev = 'useSyncExternalStore';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateSyncExternalStore(subscribe, getSnapshot);\n    },\n    useId: function () {\n      currentHookNameInDev = 'useId';\n      warnInvalidHookAccess();\n      updateHookTypesDev();\n      return updateId();\n    },\n    unstable_isNewReconciler: enableNewReconciler\n  };\n}\n\nvar now$1 = Scheduler.unstable_now;\nvar commitTime = 0;\nvar layoutEffectStartTime = -1;\nvar profilerStartTime = -1;\nvar passiveEffectStartTime = -1;\n/**\n * Tracks whether the current update was a nested/cascading update (scheduled from a layout effect).\n *\n * The overall sequence is:\n *   1. render\n *   2. commit (and call `onRender`, `onCommit`)\n *   3. check for nested updates\n *   4. flush passive effects (and call `onPostCommit`)\n *\n * Nested updates are identified in step 3 above,\n * but step 4 still applies to the work that was just committed.\n * We use two flags to track nested updates then:\n * one tracks whether the upcoming update is a nested update,\n * and the other tracks whether the current update was a nested update.\n * The first value gets synced to the second at the start of the render phase.\n */\n\nvar currentUpdateIsNested = false;\nvar nestedUpdateScheduled = false;\n\nfunction isCurrentUpdateNested() {\n  return currentUpdateIsNested;\n}\n\nfunction markNestedUpdateScheduled() {\n  {\n    nestedUpdateScheduled = true;\n  }\n}\n\nfunction resetNestedUpdateFlag() {\n  {\n    currentUpdateIsNested = false;\n    nestedUpdateScheduled = false;\n  }\n}\n\nfunction syncNestedUpdateFlag() {\n  {\n    currentUpdateIsNested = nestedUpdateScheduled;\n    nestedUpdateScheduled = false;\n  }\n}\n\nfunction getCommitTime() {\n  return commitTime;\n}\n\nfunction recordCommitTime() {\n\n  commitTime = now$1();\n}\n\nfunction startProfilerTimer(fiber) {\n\n  profilerStartTime = now$1();\n\n  if (fiber.actualStartTime < 0) {\n    fiber.actualStartTime = now$1();\n  }\n}\n\nfunction stopProfilerTimerIfRunning(fiber) {\n\n  profilerStartTime = -1;\n}\n\nfunction stopProfilerTimerIfRunningAndRecordDelta(fiber, overrideBaseTime) {\n\n  if (profilerStartTime >= 0) {\n    var elapsedTime = now$1() - profilerStartTime;\n    fiber.actualDuration += elapsedTime;\n\n    if (overrideBaseTime) {\n      fiber.selfBaseDuration = elapsedTime;\n    }\n\n    profilerStartTime = -1;\n  }\n}\n\nfunction recordLayoutEffectDuration(fiber) {\n\n  if (layoutEffectStartTime >= 0) {\n    var elapsedTime = now$1() - layoutEffectStartTime;\n    layoutEffectStartTime = -1; // Store duration on the next nearest Profiler ancestor\n    // Or the root (for the DevTools Profiler to read)\n\n    var parentFiber = fiber.return;\n\n    while (parentFiber !== null) {\n      switch (parentFiber.tag) {\n        case HostRoot:\n          var root = parentFiber.stateNode;\n          root.effectDuration += elapsedTime;\n          return;\n\n        case Profiler:\n          var parentStateNode = parentFiber.stateNode;\n          parentStateNode.effectDuration += elapsedTime;\n          return;\n      }\n\n      parentFiber = parentFiber.return;\n    }\n  }\n}\n\nfunction recordPassiveEffectDuration(fiber) {\n\n  if (passiveEffectStartTime >= 0) {\n    var elapsedTime = now$1() - passiveEffectStartTime;\n    passiveEffectStartTime = -1; // Store duration on the next nearest Profiler ancestor\n    // Or the root (for the DevTools Profiler to read)\n\n    var parentFiber = fiber.return;\n\n    while (parentFiber !== null) {\n      switch (parentFiber.tag) {\n        case HostRoot:\n          var root = parentFiber.stateNode;\n\n          if (root !== null) {\n            root.passiveEffectDuration += elapsedTime;\n          }\n\n          return;\n\n        case Profiler:\n          var parentStateNode = parentFiber.stateNode;\n\n          if (parentStateNode !== null) {\n            // Detached fibers have their state node cleared out.\n            // In this case, the return pointer is also cleared out,\n            // so we won't be able to report the time spent in this Profiler's subtree.\n            parentStateNode.passiveEffectDuration += elapsedTime;\n          }\n\n          return;\n      }\n\n      parentFiber = parentFiber.return;\n    }\n  }\n}\n\nfunction startLayoutEffectTimer() {\n\n  layoutEffectStartTime = now$1();\n}\n\nfunction startPassiveEffectTimer() {\n\n  passiveEffectStartTime = now$1();\n}\n\nfunction transferActualDuration(fiber) {\n  // Transfer time spent rendering these children so we don't lose it\n  // after we rerender. This is used as a helper in special cases\n  // where we should count the work of multiple passes.\n  var child = fiber.child;\n\n  while (child) {\n    fiber.actualDuration += child.actualDuration;\n    child = child.sibling;\n  }\n}\n\nfunction resolveDefaultProps(Component, baseProps) {\n  if (Component && Component.defaultProps) {\n    // Resolve default props. Taken from ReactElement\n    var props = assign({}, baseProps);\n    var defaultProps = Component.defaultProps;\n\n    for (var propName in defaultProps) {\n      if (props[propName] === undefined) {\n        props[propName] = defaultProps[propName];\n      }\n    }\n\n    return props;\n  }\n\n  return baseProps;\n}\n\nvar fakeInternalInstance = {};\nvar didWarnAboutStateAssignmentForComponent;\nvar didWarnAboutUninitializedState;\nvar didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate;\nvar didWarnAboutLegacyLifecyclesAndDerivedState;\nvar didWarnAboutUndefinedDerivedState;\nvar warnOnUndefinedDerivedState;\nvar warnOnInvalidCallback;\nvar didWarnAboutDirectlyAssigningPropsToState;\nvar didWarnAboutContextTypeAndContextTypes;\nvar didWarnAboutInvalidateContextType;\nvar didWarnAboutLegacyContext$1;\n\n{\n  didWarnAboutStateAssignmentForComponent = new Set();\n  didWarnAboutUninitializedState = new Set();\n  didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();\n  didWarnAboutLegacyLifecyclesAndDerivedState = new Set();\n  didWarnAboutDirectlyAssigningPropsToState = new Set();\n  didWarnAboutUndefinedDerivedState = new Set();\n  didWarnAboutContextTypeAndContextTypes = new Set();\n  didWarnAboutInvalidateContextType = new Set();\n  didWarnAboutLegacyContext$1 = new Set();\n  var didWarnOnInvalidCallback = new Set();\n\n  warnOnInvalidCallback = function (callback, callerName) {\n    if (callback === null || typeof callback === 'function') {\n      return;\n    }\n\n    var key = callerName + '_' + callback;\n\n    if (!didWarnOnInvalidCallback.has(key)) {\n      didWarnOnInvalidCallback.add(key);\n\n      error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n    }\n  };\n\n  warnOnUndefinedDerivedState = function (type, partialState) {\n    if (partialState === undefined) {\n      var componentName = getComponentNameFromType(type) || 'Component';\n\n      if (!didWarnAboutUndefinedDerivedState.has(componentName)) {\n        didWarnAboutUndefinedDerivedState.add(componentName);\n\n        error('%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. ' + 'You have returned undefined.', componentName);\n      }\n    }\n  }; // This is so gross but it's at least non-critical and can be removed if\n  // it causes problems. This is meant to give a nicer error message for\n  // ReactDOM15.unstable_renderSubtreeIntoContainer(reactDOM16Component,\n  // ...)) which otherwise throws a \"_processChildContext is not a function\"\n  // exception.\n\n\n  Object.defineProperty(fakeInternalInstance, '_processChildContext', {\n    enumerable: false,\n    value: function () {\n      throw new Error('_processChildContext is not available in React 16+. This likely ' + 'means you have multiple copies of React and are attempting to nest ' + 'a React 15 tree inside a React 16 tree using ' + \"unstable_renderSubtreeIntoContainer, which isn't supported. Try \" + 'to make sure you have only one copy of React (and ideally, switch ' + 'to ReactDOM.createPortal).');\n    }\n  });\n  Object.freeze(fakeInternalInstance);\n}\n\nfunction applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, nextProps) {\n  var prevState = workInProgress.memoizedState;\n  var partialState = getDerivedStateFromProps(nextProps, prevState);\n\n  {\n    if ( workInProgress.mode & StrictLegacyMode) {\n      setIsStrictModeForDevtools(true);\n\n      try {\n        // Invoke the function an extra time to help detect side-effects.\n        partialState = getDerivedStateFromProps(nextProps, prevState);\n      } finally {\n        setIsStrictModeForDevtools(false);\n      }\n    }\n\n    warnOnUndefinedDerivedState(ctor, partialState);\n  } // Merge the partial state and the previous state.\n\n\n  var memoizedState = partialState === null || partialState === undefined ? prevState : assign({}, prevState, partialState);\n  workInProgress.memoizedState = memoizedState; // Once the update queue is empty, persist the derived state onto the\n  // base state.\n\n  if (workInProgress.lanes === NoLanes) {\n    // Queue is always non-null for classes\n    var updateQueue = workInProgress.updateQueue;\n    updateQueue.baseState = memoizedState;\n  }\n}\n\nvar classComponentUpdater = {\n  isMounted: isMounted,\n  enqueueSetState: function (inst, payload, callback) {\n    var fiber = get(inst);\n    var eventTime = requestEventTime();\n    var lane = requestUpdateLane(fiber);\n    var update = createUpdate(eventTime, lane);\n    update.payload = payload;\n\n    if (callback !== undefined && callback !== null) {\n      {\n        warnOnInvalidCallback(callback, 'setState');\n      }\n\n      update.callback = callback;\n    }\n\n    var root = enqueueUpdate(fiber, update, lane);\n\n    if (root !== null) {\n      scheduleUpdateOnFiber(root, fiber, lane, eventTime);\n      entangleTransitions(root, fiber, lane);\n    }\n\n    {\n      markStateUpdateScheduled(fiber, lane);\n    }\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    var fiber = get(inst);\n    var eventTime = requestEventTime();\n    var lane = requestUpdateLane(fiber);\n    var update = createUpdate(eventTime, lane);\n    update.tag = ReplaceState;\n    update.payload = payload;\n\n    if (callback !== undefined && callback !== null) {\n      {\n        warnOnInvalidCallback(callback, 'replaceState');\n      }\n\n      update.callback = callback;\n    }\n\n    var root = enqueueUpdate(fiber, update, lane);\n\n    if (root !== null) {\n      scheduleUpdateOnFiber(root, fiber, lane, eventTime);\n      entangleTransitions(root, fiber, lane);\n    }\n\n    {\n      markStateUpdateScheduled(fiber, lane);\n    }\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    var fiber = get(inst);\n    var eventTime = requestEventTime();\n    var lane = requestUpdateLane(fiber);\n    var update = createUpdate(eventTime, lane);\n    update.tag = ForceUpdate;\n\n    if (callback !== undefined && callback !== null) {\n      {\n        warnOnInvalidCallback(callback, 'forceUpdate');\n      }\n\n      update.callback = callback;\n    }\n\n    var root = enqueueUpdate(fiber, update, lane);\n\n    if (root !== null) {\n      scheduleUpdateOnFiber(root, fiber, lane, eventTime);\n      entangleTransitions(root, fiber, lane);\n    }\n\n    {\n      markForceUpdateScheduled(fiber, lane);\n    }\n  }\n};\n\nfunction checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) {\n  var instance = workInProgress.stateNode;\n\n  if (typeof instance.shouldComponentUpdate === 'function') {\n    var shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);\n\n    {\n      if ( workInProgress.mode & StrictLegacyMode) {\n        setIsStrictModeForDevtools(true);\n\n        try {\n          // Invoke the function an extra time to help detect side-effects.\n          shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);\n        } finally {\n          setIsStrictModeForDevtools(false);\n        }\n      }\n\n      if (shouldUpdate === undefined) {\n        error('%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', getComponentNameFromType(ctor) || 'Component');\n      }\n    }\n\n    return shouldUpdate;\n  }\n\n  if (ctor.prototype && ctor.prototype.isPureReactComponent) {\n    return !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState);\n  }\n\n  return true;\n}\n\nfunction checkClassInstance(workInProgress, ctor, newProps) {\n  var instance = workInProgress.stateNode;\n\n  {\n    var name = getComponentNameFromType(ctor) || 'Component';\n    var renderPresent = instance.render;\n\n    if (!renderPresent) {\n      if (ctor.prototype && typeof ctor.prototype.render === 'function') {\n        error('%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name);\n      } else {\n        error('%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name);\n      }\n    }\n\n    if (instance.getInitialState && !instance.getInitialState.isReactClassApproved && !instance.state) {\n      error('getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', name);\n    }\n\n    if (instance.getDefaultProps && !instance.getDefaultProps.isReactClassApproved) {\n      error('getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', name);\n    }\n\n    if (instance.propTypes) {\n      error('propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name);\n    }\n\n    if (instance.contextType) {\n      error('contextType was defined as an instance property on %s. Use a static ' + 'property to define contextType instead.', name);\n    }\n\n    {\n      if (ctor.childContextTypes && !didWarnAboutLegacyContext$1.has(ctor) && // Strict Mode has its own warning for legacy context, so we can skip\n      // this one.\n      (workInProgress.mode & StrictLegacyMode) === NoMode) {\n        didWarnAboutLegacyContext$1.add(ctor);\n\n        error('%s uses the legacy childContextTypes API which is no longer ' + 'supported and will be removed in the next major release. Use ' + 'React.createContext() instead\\n\\n.' + 'Learn more about this warning here: https://reactjs.org/link/legacy-context', name);\n      }\n\n      if (ctor.contextTypes && !didWarnAboutLegacyContext$1.has(ctor) && // Strict Mode has its own warning for legacy context, so we can skip\n      // this one.\n      (workInProgress.mode & StrictLegacyMode) === NoMode) {\n        didWarnAboutLegacyContext$1.add(ctor);\n\n        error('%s uses the legacy contextTypes API which is no longer supported ' + 'and will be removed in the next major release. Use ' + 'React.createContext() with static contextType instead.\\n\\n' + 'Learn more about this warning here: https://reactjs.org/link/legacy-context', name);\n      }\n\n      if (instance.contextTypes) {\n        error('contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name);\n      }\n\n      if (ctor.contextType && ctor.contextTypes && !didWarnAboutContextTypeAndContextTypes.has(ctor)) {\n        didWarnAboutContextTypeAndContextTypes.add(ctor);\n\n        error('%s declares both contextTypes and contextType static properties. ' + 'The legacy contextTypes property will be ignored.', name);\n      }\n    }\n\n    if (typeof instance.componentShouldUpdate === 'function') {\n      error('%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', name);\n    }\n\n    if (ctor.prototype && ctor.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') {\n      error('%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentNameFromType(ctor) || 'A pure component');\n    }\n\n    if (typeof instance.componentDidUnmount === 'function') {\n      error('%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name);\n    }\n\n    if (typeof instance.componentDidReceiveProps === 'function') {\n      error('%s has a method called ' + 'componentDidReceiveProps(). But there is no such lifecycle method. ' + 'If you meant to update the state in response to changing props, ' + 'use componentWillReceiveProps(). If you meant to fetch data or ' + 'run side-effects or mutations after React has updated the UI, use componentDidUpdate().', name);\n    }\n\n    if (typeof instance.componentWillRecieveProps === 'function') {\n      error('%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name);\n    }\n\n    if (typeof instance.UNSAFE_componentWillRecieveProps === 'function') {\n      error('%s has a method called ' + 'UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?', name);\n    }\n\n    var hasMutatedProps = instance.props !== newProps;\n\n    if (instance.props !== undefined && hasMutatedProps) {\n      error('%s(...): When calling super() in `%s`, make sure to pass ' + \"up the same props that your component's constructor was passed.\", name, name);\n    }\n\n    if (instance.defaultProps) {\n      error('Setting defaultProps as an instance property on %s is not supported and will be ignored.' + ' Instead, define defaultProps as a static property on %s.', name, name);\n    }\n\n    if (typeof instance.getSnapshotBeforeUpdate === 'function' && typeof instance.componentDidUpdate !== 'function' && !didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(ctor)) {\n      didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(ctor);\n\n      error('%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). ' + 'This component defines getSnapshotBeforeUpdate() only.', getComponentNameFromType(ctor));\n    }\n\n    if (typeof instance.getDerivedStateFromProps === 'function') {\n      error('%s: getDerivedStateFromProps() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n    }\n\n    if (typeof instance.getDerivedStateFromError === 'function') {\n      error('%s: getDerivedStateFromError() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n    }\n\n    if (typeof ctor.getSnapshotBeforeUpdate === 'function') {\n      error('%s: getSnapshotBeforeUpdate() is defined as a static method ' + 'and will be ignored. Instead, declare it as an instance method.', name);\n    }\n\n    var _state = instance.state;\n\n    if (_state && (typeof _state !== 'object' || isArray(_state))) {\n      error('%s.state: must be set to an object or null', name);\n    }\n\n    if (typeof instance.getChildContext === 'function' && typeof ctor.childContextTypes !== 'object') {\n      error('%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', name);\n    }\n  }\n}\n\nfunction adoptClassInstance(workInProgress, instance) {\n  instance.updater = classComponentUpdater;\n  workInProgress.stateNode = instance; // The instance needs access to the fiber so that it can schedule updates\n\n  set(instance, workInProgress);\n\n  {\n    instance._reactInternalInstance = fakeInternalInstance;\n  }\n}\n\nfunction constructClassInstance(workInProgress, ctor, props) {\n  var isLegacyContextConsumer = false;\n  var unmaskedContext = emptyContextObject;\n  var context = emptyContextObject;\n  var contextType = ctor.contextType;\n\n  {\n    if ('contextType' in ctor) {\n      var isValid = // Allow null for conditional declaration\n      contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a <Context.Consumer>\n\n      if (!isValid && !didWarnAboutInvalidateContextType.has(ctor)) {\n        didWarnAboutInvalidateContextType.add(ctor);\n        var addendum = '';\n\n        if (contextType === undefined) {\n          addendum = ' However, it is set to undefined. ' + 'This can be caused by a typo or by mixing up named and default imports. ' + 'This can also happen due to a circular dependency, so ' + 'try moving the createContext() call to a separate file.';\n        } else if (typeof contextType !== 'object') {\n          addendum = ' However, it is set to a ' + typeof contextType + '.';\n        } else if (contextType.$$typeof === REACT_PROVIDER_TYPE) {\n          addendum = ' Did you accidentally pass the Context.Provider instead?';\n        } else if (contextType._context !== undefined) {\n          // <Context.Consumer>\n          addendum = ' Did you accidentally pass the Context.Consumer instead?';\n        } else {\n          addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.';\n        }\n\n        error('%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentNameFromType(ctor) || 'Component', addendum);\n      }\n    }\n  }\n\n  if (typeof contextType === 'object' && contextType !== null) {\n    context = readContext(contextType);\n  } else {\n    unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n    var contextTypes = ctor.contextTypes;\n    isLegacyContextConsumer = contextTypes !== null && contextTypes !== undefined;\n    context = isLegacyContextConsumer ? getMaskedContext(workInProgress, unmaskedContext) : emptyContextObject;\n  }\n\n  var instance = new ctor(props, context); // Instantiate twice to help detect side-effects.\n\n  {\n    if ( workInProgress.mode & StrictLegacyMode) {\n      setIsStrictModeForDevtools(true);\n\n      try {\n        instance = new ctor(props, context); // eslint-disable-line no-new\n      } finally {\n        setIsStrictModeForDevtools(false);\n      }\n    }\n  }\n\n  var state = workInProgress.memoizedState = instance.state !== null && instance.state !== undefined ? instance.state : null;\n  adoptClassInstance(workInProgress, instance);\n\n  {\n    if (typeof ctor.getDerivedStateFromProps === 'function' && state === null) {\n      var componentName = getComponentNameFromType(ctor) || 'Component';\n\n      if (!didWarnAboutUninitializedState.has(componentName)) {\n        didWarnAboutUninitializedState.add(componentName);\n\n        error('`%s` uses `getDerivedStateFromProps` but its initial state is ' + '%s. This is not recommended. Instead, define the initial state by ' + 'assigning an object to `this.state` in the constructor of `%s`. ' + 'This ensures that `getDerivedStateFromProps` arguments have a consistent shape.', componentName, instance.state === null ? 'null' : 'undefined', componentName);\n      }\n    } // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n    // Warn about these lifecycles if they are present.\n    // Don't warn about react-lifecycles-compat polyfilled methods though.\n\n\n    if (typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function') {\n      var foundWillMountName = null;\n      var foundWillReceivePropsName = null;\n      var foundWillUpdateName = null;\n\n      if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) {\n        foundWillMountName = 'componentWillMount';\n      } else if (typeof instance.UNSAFE_componentWillMount === 'function') {\n        foundWillMountName = 'UNSAFE_componentWillMount';\n      }\n\n      if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n        foundWillReceivePropsName = 'componentWillReceiveProps';\n      } else if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n        foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n      }\n\n      if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n        foundWillUpdateName = 'componentWillUpdate';\n      } else if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n        foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n      }\n\n      if (foundWillMountName !== null || foundWillReceivePropsName !== null || foundWillUpdateName !== null) {\n        var _componentName = getComponentNameFromType(ctor) || 'Component';\n\n        var newApiName = typeof ctor.getDerivedStateFromProps === 'function' ? 'getDerivedStateFromProps()' : 'getSnapshotBeforeUpdate()';\n\n        if (!didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName)) {\n          didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName);\n\n          error('Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' + '%s uses %s but also contains the following legacy lifecycles:%s%s%s\\n\\n' + 'The above lifecycles should be removed. Learn more about this warning here:\\n' + 'https://reactjs.org/link/unsafe-component-lifecycles', _componentName, newApiName, foundWillMountName !== null ? \"\\n  \" + foundWillMountName : '', foundWillReceivePropsName !== null ? \"\\n  \" + foundWillReceivePropsName : '', foundWillUpdateName !== null ? \"\\n  \" + foundWillUpdateName : '');\n        }\n      }\n    }\n  } // Cache unmasked context so we can avoid recreating masked context unless necessary.\n  // ReactFiberContext usually updates this cache but can't for newly-created instances.\n\n\n  if (isLegacyContextConsumer) {\n    cacheContext(workInProgress, unmaskedContext, context);\n  }\n\n  return instance;\n}\n\nfunction callComponentWillMount(workInProgress, instance) {\n  var oldState = instance.state;\n\n  if (typeof instance.componentWillMount === 'function') {\n    instance.componentWillMount();\n  }\n\n  if (typeof instance.UNSAFE_componentWillMount === 'function') {\n    instance.UNSAFE_componentWillMount();\n  }\n\n  if (oldState !== instance.state) {\n    {\n      error('%s.componentWillMount(): Assigning directly to this.state is ' + \"deprecated (except inside a component's \" + 'constructor). Use setState instead.', getComponentNameFromFiber(workInProgress) || 'Component');\n    }\n\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n  }\n}\n\nfunction callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext) {\n  var oldState = instance.state;\n\n  if (typeof instance.componentWillReceiveProps === 'function') {\n    instance.componentWillReceiveProps(newProps, nextContext);\n  }\n\n  if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n  }\n\n  if (instance.state !== oldState) {\n    {\n      var componentName = getComponentNameFromFiber(workInProgress) || 'Component';\n\n      if (!didWarnAboutStateAssignmentForComponent.has(componentName)) {\n        didWarnAboutStateAssignmentForComponent.add(componentName);\n\n        error('%s.componentWillReceiveProps(): Assigning directly to ' + \"this.state is deprecated (except inside a component's \" + 'constructor). Use setState instead.', componentName);\n      }\n    }\n\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n  }\n} // Invokes the mount life-cycles on a previously never rendered instance.\n\n\nfunction mountClassInstance(workInProgress, ctor, newProps, renderLanes) {\n  {\n    checkClassInstance(workInProgress, ctor, newProps);\n  }\n\n  var instance = workInProgress.stateNode;\n  instance.props = newProps;\n  instance.state = workInProgress.memoizedState;\n  instance.refs = {};\n  initializeUpdateQueue(workInProgress);\n  var contextType = ctor.contextType;\n\n  if (typeof contextType === 'object' && contextType !== null) {\n    instance.context = readContext(contextType);\n  } else {\n    var unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n    instance.context = getMaskedContext(workInProgress, unmaskedContext);\n  }\n\n  {\n    if (instance.state === newProps) {\n      var componentName = getComponentNameFromType(ctor) || 'Component';\n\n      if (!didWarnAboutDirectlyAssigningPropsToState.has(componentName)) {\n        didWarnAboutDirectlyAssigningPropsToState.add(componentName);\n\n        error('%s: It is not recommended to assign props directly to state ' + \"because updates to props won't be reflected in state. \" + 'In most cases, it is better to use props directly.', componentName);\n      }\n    }\n\n    if (workInProgress.mode & StrictLegacyMode) {\n      ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, instance);\n    }\n\n    {\n      ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(workInProgress, instance);\n    }\n  }\n\n  instance.state = workInProgress.memoizedState;\n  var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n\n  if (typeof getDerivedStateFromProps === 'function') {\n    applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n    instance.state = workInProgress.memoizedState;\n  } // In order to support react-lifecycles-compat polyfilled components,\n  // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n\n  if (typeof ctor.getDerivedStateFromProps !== 'function' && typeof instance.getSnapshotBeforeUpdate !== 'function' && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n    callComponentWillMount(workInProgress, instance); // If we had additional state updates during this life-cycle, let's\n    // process them now.\n\n    processUpdateQueue(workInProgress, newProps, instance, renderLanes);\n    instance.state = workInProgress.memoizedState;\n  }\n\n  if (typeof instance.componentDidMount === 'function') {\n    var fiberFlags = Update;\n\n    {\n      fiberFlags |= LayoutStatic;\n    }\n\n    if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {\n      fiberFlags |= MountLayoutDev;\n    }\n\n    workInProgress.flags |= fiberFlags;\n  }\n}\n\nfunction resumeMountClassInstance(workInProgress, ctor, newProps, renderLanes) {\n  var instance = workInProgress.stateNode;\n  var oldProps = workInProgress.memoizedProps;\n  instance.props = oldProps;\n  var oldContext = instance.context;\n  var contextType = ctor.contextType;\n  var nextContext = emptyContextObject;\n\n  if (typeof contextType === 'object' && contextType !== null) {\n    nextContext = readContext(contextType);\n  } else {\n    var nextLegacyUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n    nextContext = getMaskedContext(workInProgress, nextLegacyUnmaskedContext);\n  }\n\n  var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n  var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what\n  // ever the previously attempted to render - not the \"current\". However,\n  // during componentDidUpdate we pass the \"current\" props.\n  // In order to support react-lifecycles-compat polyfilled components,\n  // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n  if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {\n    if (oldProps !== newProps || oldContext !== nextContext) {\n      callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);\n    }\n  }\n\n  resetHasForceUpdateBeforeProcessing();\n  var oldState = workInProgress.memoizedState;\n  var newState = instance.state = oldState;\n  processUpdateQueue(workInProgress, newProps, instance, renderLanes);\n  newState = workInProgress.memoizedState;\n\n  if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {\n    // If an update was already in progress, we should schedule an Update\n    // effect even though we're bailing out, so that cWU/cDU are called.\n    if (typeof instance.componentDidMount === 'function') {\n      var fiberFlags = Update;\n\n      {\n        fiberFlags |= LayoutStatic;\n      }\n\n      if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {\n        fiberFlags |= MountLayoutDev;\n      }\n\n      workInProgress.flags |= fiberFlags;\n    }\n\n    return false;\n  }\n\n  if (typeof getDerivedStateFromProps === 'function') {\n    applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n    newState = workInProgress.memoizedState;\n  }\n\n  var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);\n\n  if (shouldUpdate) {\n    // In order to support react-lifecycles-compat polyfilled components,\n    // Unsafe lifecycles should not be invoked for components using the new APIs.\n    if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n      if (typeof instance.componentWillMount === 'function') {\n        instance.componentWillMount();\n      }\n\n      if (typeof instance.UNSAFE_componentWillMount === 'function') {\n        instance.UNSAFE_componentWillMount();\n      }\n    }\n\n    if (typeof instance.componentDidMount === 'function') {\n      var _fiberFlags = Update;\n\n      {\n        _fiberFlags |= LayoutStatic;\n      }\n\n      if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {\n        _fiberFlags |= MountLayoutDev;\n      }\n\n      workInProgress.flags |= _fiberFlags;\n    }\n  } else {\n    // If an update was already in progress, we should schedule an Update\n    // effect even though we're bailing out, so that cWU/cDU are called.\n    if (typeof instance.componentDidMount === 'function') {\n      var _fiberFlags2 = Update;\n\n      {\n        _fiberFlags2 |= LayoutStatic;\n      }\n\n      if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {\n        _fiberFlags2 |= MountLayoutDev;\n      }\n\n      workInProgress.flags |= _fiberFlags2;\n    } // If shouldComponentUpdate returned false, we should still update the\n    // memoized state to indicate that this work can be reused.\n\n\n    workInProgress.memoizedProps = newProps;\n    workInProgress.memoizedState = newState;\n  } // Update the existing instance's state, props, and context pointers even\n  // if shouldComponentUpdate returns false.\n\n\n  instance.props = newProps;\n  instance.state = newState;\n  instance.context = nextContext;\n  return shouldUpdate;\n} // Invokes the update life-cycles and returns false if it shouldn't rerender.\n\n\nfunction updateClassInstance(current, workInProgress, ctor, newProps, renderLanes) {\n  var instance = workInProgress.stateNode;\n  cloneUpdateQueue(current, workInProgress);\n  var unresolvedOldProps = workInProgress.memoizedProps;\n  var oldProps = workInProgress.type === workInProgress.elementType ? unresolvedOldProps : resolveDefaultProps(workInProgress.type, unresolvedOldProps);\n  instance.props = oldProps;\n  var unresolvedNewProps = workInProgress.pendingProps;\n  var oldContext = instance.context;\n  var contextType = ctor.contextType;\n  var nextContext = emptyContextObject;\n\n  if (typeof contextType === 'object' && contextType !== null) {\n    nextContext = readContext(contextType);\n  } else {\n    var nextUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n    nextContext = getMaskedContext(workInProgress, nextUnmaskedContext);\n  }\n\n  var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n  var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what\n  // ever the previously attempted to render - not the \"current\". However,\n  // during componentDidUpdate we pass the \"current\" props.\n  // In order to support react-lifecycles-compat polyfilled components,\n  // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n  if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {\n    if (unresolvedOldProps !== unresolvedNewProps || oldContext !== nextContext) {\n      callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);\n    }\n  }\n\n  resetHasForceUpdateBeforeProcessing();\n  var oldState = workInProgress.memoizedState;\n  var newState = instance.state = oldState;\n  processUpdateQueue(workInProgress, newProps, instance, renderLanes);\n  newState = workInProgress.memoizedState;\n\n  if (unresolvedOldProps === unresolvedNewProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing() && !(enableLazyContextPropagation   )) {\n    // If an update was already in progress, we should schedule an Update\n    // effect even though we're bailing out, so that cWU/cDU are called.\n    if (typeof instance.componentDidUpdate === 'function') {\n      if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n        workInProgress.flags |= Update;\n      }\n    }\n\n    if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n      if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n        workInProgress.flags |= Snapshot;\n      }\n    }\n\n    return false;\n  }\n\n  if (typeof getDerivedStateFromProps === 'function') {\n    applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n    newState = workInProgress.memoizedState;\n  }\n\n  var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) || // TODO: In some cases, we'll end up checking if context has changed twice,\n  // both before and after `shouldComponentUpdate` has been called. Not ideal,\n  // but I'm loath to refactor this function. This only happens for memoized\n  // components so it's not that common.\n  enableLazyContextPropagation   ;\n\n  if (shouldUpdate) {\n    // In order to support react-lifecycles-compat polyfilled components,\n    // Unsafe lifecycles should not be invoked for components using the new APIs.\n    if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillUpdate === 'function' || typeof instance.componentWillUpdate === 'function')) {\n      if (typeof instance.componentWillUpdate === 'function') {\n        instance.componentWillUpdate(newProps, newState, nextContext);\n      }\n\n      if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n        instance.UNSAFE_componentWillUpdate(newProps, newState, nextContext);\n      }\n    }\n\n    if (typeof instance.componentDidUpdate === 'function') {\n      workInProgress.flags |= Update;\n    }\n\n    if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n      workInProgress.flags |= Snapshot;\n    }\n  } else {\n    // If an update was already in progress, we should schedule an Update\n    // effect even though we're bailing out, so that cWU/cDU are called.\n    if (typeof instance.componentDidUpdate === 'function') {\n      if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n        workInProgress.flags |= Update;\n      }\n    }\n\n    if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n      if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n        workInProgress.flags |= Snapshot;\n      }\n    } // If shouldComponentUpdate returned false, we should still update the\n    // memoized props/state to indicate that this work can be reused.\n\n\n    workInProgress.memoizedProps = newProps;\n    workInProgress.memoizedState = newState;\n  } // Update the existing instance's state, props, and context pointers even\n  // if shouldComponentUpdate returns false.\n\n\n  instance.props = newProps;\n  instance.state = newState;\n  instance.context = nextContext;\n  return shouldUpdate;\n}\n\nfunction createCapturedValueAtFiber(value, source) {\n  // If the value is an error, call this function immediately after it is thrown\n  // so the stack is accurate.\n  return {\n    value: value,\n    source: source,\n    stack: getStackByFiberInDevAndProd(source),\n    digest: null\n  };\n}\nfunction createCapturedValue(value, digest, stack) {\n  return {\n    value: value,\n    source: null,\n    stack: stack != null ? stack : null,\n    digest: digest != null ? digest : null\n  };\n}\n\n// This module is forked in different environments.\n// By default, return `true` to log errors to the console.\n// Forks can return `false` if this isn't desirable.\nfunction showErrorDialog(boundary, errorInfo) {\n  return true;\n}\n\nfunction logCapturedError(boundary, errorInfo) {\n  try {\n    var logError = showErrorDialog(boundary, errorInfo); // Allow injected showErrorDialog() to prevent default console.error logging.\n    // This enables renderers like ReactNative to better manage redbox behavior.\n\n    if (logError === false) {\n      return;\n    }\n\n    var error = errorInfo.value;\n\n    if (true) {\n      var source = errorInfo.source;\n      var stack = errorInfo.stack;\n      var componentStack = stack !== null ? stack : ''; // Browsers support silencing uncaught errors by calling\n      // `preventDefault()` in window `error` handler.\n      // We record this information as an expando on the error.\n\n      if (error != null && error._suppressLogging) {\n        if (boundary.tag === ClassComponent) {\n          // The error is recoverable and was silenced.\n          // Ignore it and don't print the stack addendum.\n          // This is handy for testing error boundaries without noise.\n          return;\n        } // The error is fatal. Since the silencing might have\n        // been accidental, we'll surface it anyway.\n        // However, the browser would have silenced the original error\n        // so we'll print it first, and then print the stack addendum.\n\n\n        console['error'](error); // Don't transform to our wrapper\n        // For a more detailed description of this block, see:\n        // https://github.com/facebook/react/pull/13384\n      }\n\n      var componentName = source ? getComponentNameFromFiber(source) : null;\n      var componentNameMessage = componentName ? \"The above error occurred in the <\" + componentName + \"> component:\" : 'The above error occurred in one of your React components:';\n      var errorBoundaryMessage;\n\n      if (boundary.tag === HostRoot) {\n        errorBoundaryMessage = 'Consider adding an error boundary to your tree to customize error handling behavior.\\n' + 'Visit https://reactjs.org/link/error-boundaries to learn more about error boundaries.';\n      } else {\n        var errorBoundaryName = getComponentNameFromFiber(boundary) || 'Anonymous';\n        errorBoundaryMessage = \"React will try to recreate this component tree from scratch \" + (\"using the error boundary you provided, \" + errorBoundaryName + \".\");\n      }\n\n      var combinedMessage = componentNameMessage + \"\\n\" + componentStack + \"\\n\\n\" + (\"\" + errorBoundaryMessage); // In development, we provide our own message with just the component stack.\n      // We don't include the original error message and JS stack because the browser\n      // has already printed it. Even if the application swallows the error, it is still\n      // displayed by the browser thanks to the DEV-only fake event trick in ReactErrorUtils.\n\n      console['error'](combinedMessage); // Don't transform to our wrapper\n    } else {\n      // In production, we print the error directly.\n      // This will include the message, the JS stack, and anything the browser wants to show.\n      // We pass the error object instead of custom message so that the browser displays the error natively.\n      console['error'](error); // Don't transform to our wrapper\n    }\n  } catch (e) {\n    // This method must not throw, or React internal state will get messed up.\n    // If console.error is overridden, or logCapturedError() shows a dialog that throws,\n    // we want to report this error outside of the normal stack as a last resort.\n    // https://github.com/facebook/react/issues/13188\n    setTimeout(function () {\n      throw e;\n    });\n  }\n}\n\nvar PossiblyWeakMap$1 = typeof WeakMap === 'function' ? WeakMap : Map;\n\nfunction createRootErrorUpdate(fiber, errorInfo, lane) {\n  var update = createUpdate(NoTimestamp, lane); // Unmount the root by rendering null.\n\n  update.tag = CaptureUpdate; // Caution: React DevTools currently depends on this property\n  // being called \"element\".\n\n  update.payload = {\n    element: null\n  };\n  var error = errorInfo.value;\n\n  update.callback = function () {\n    onUncaughtError(error);\n    logCapturedError(fiber, errorInfo);\n  };\n\n  return update;\n}\n\nfunction createClassErrorUpdate(fiber, errorInfo, lane) {\n  var update = createUpdate(NoTimestamp, lane);\n  update.tag = CaptureUpdate;\n  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n\n  if (typeof getDerivedStateFromError === 'function') {\n    var error$1 = errorInfo.value;\n\n    update.payload = function () {\n      return getDerivedStateFromError(error$1);\n    };\n\n    update.callback = function () {\n      {\n        markFailedErrorBoundaryForHotReloading(fiber);\n      }\n\n      logCapturedError(fiber, errorInfo);\n    };\n  }\n\n  var inst = fiber.stateNode;\n\n  if (inst !== null && typeof inst.componentDidCatch === 'function') {\n    update.callback = function callback() {\n      {\n        markFailedErrorBoundaryForHotReloading(fiber);\n      }\n\n      logCapturedError(fiber, errorInfo);\n\n      if (typeof getDerivedStateFromError !== 'function') {\n        // To preserve the preexisting retry behavior of error boundaries,\n        // we keep track of which ones already failed during this batch.\n        // This gets reset before we yield back to the browser.\n        // TODO: Warn in strict mode if getDerivedStateFromError is\n        // not defined.\n        markLegacyErrorBoundaryAsFailed(this);\n      }\n\n      var error$1 = errorInfo.value;\n      var stack = errorInfo.stack;\n      this.componentDidCatch(error$1, {\n        componentStack: stack !== null ? stack : ''\n      });\n\n      {\n        if (typeof getDerivedStateFromError !== 'function') {\n          // If componentDidCatch is the only error boundary method defined,\n          // then it needs to call setState to recover from errors.\n          // If no state update is scheduled then the boundary will swallow the error.\n          if (!includesSomeLane(fiber.lanes, SyncLane)) {\n            error('%s: Error boundaries should implement getDerivedStateFromError(). ' + 'In that method, return a state update to display an error message or fallback UI.', getComponentNameFromFiber(fiber) || 'Unknown');\n          }\n        }\n      }\n    };\n  }\n\n  return update;\n}\n\nfunction attachPingListener(root, wakeable, lanes) {\n  // Attach a ping listener\n  //\n  // The data might resolve before we have a chance to commit the fallback. Or,\n  // in the case of a refresh, we'll never commit a fallback. So we need to\n  // attach a listener now. When it resolves (\"pings\"), we can decide whether to\n  // try rendering the tree again.\n  //\n  // Only attach a listener if one does not already exist for the lanes\n  // we're currently rendering (which acts like a \"thread ID\" here).\n  //\n  // We only need to do this in concurrent mode. Legacy Suspense always\n  // commits fallbacks synchronously, so there are no pings.\n  var pingCache = root.pingCache;\n  var threadIDs;\n\n  if (pingCache === null) {\n    pingCache = root.pingCache = new PossiblyWeakMap$1();\n    threadIDs = new Set();\n    pingCache.set(wakeable, threadIDs);\n  } else {\n    threadIDs = pingCache.get(wakeable);\n\n    if (threadIDs === undefined) {\n      threadIDs = new Set();\n      pingCache.set(wakeable, threadIDs);\n    }\n  }\n\n  if (!threadIDs.has(lanes)) {\n    // Memoize using the thread ID to prevent redundant listeners.\n    threadIDs.add(lanes);\n    var ping = pingSuspendedRoot.bind(null, root, wakeable, lanes);\n\n    {\n      if (isDevToolsPresent) {\n        // If we have pending work still, restore the original updaters\n        restorePendingUpdaters(root, lanes);\n      }\n    }\n\n    wakeable.then(ping, ping);\n  }\n}\n\nfunction attachRetryListener(suspenseBoundary, root, wakeable, lanes) {\n  // Retry listener\n  //\n  // If the fallback does commit, we need to attach a different type of\n  // listener. This one schedules an update on the Suspense boundary to turn\n  // the fallback state off.\n  //\n  // Stash the wakeable on the boundary fiber so we can access it in the\n  // commit phase.\n  //\n  // When the wakeable resolves, we'll attempt to render the boundary\n  // again (\"retry\").\n  var wakeables = suspenseBoundary.updateQueue;\n\n  if (wakeables === null) {\n    var updateQueue = new Set();\n    updateQueue.add(wakeable);\n    suspenseBoundary.updateQueue = updateQueue;\n  } else {\n    wakeables.add(wakeable);\n  }\n}\n\nfunction resetSuspendedComponent(sourceFiber, rootRenderLanes) {\n  // A legacy mode Suspense quirk, only relevant to hook components.\n\n\n  var tag = sourceFiber.tag;\n\n  if ((sourceFiber.mode & ConcurrentMode) === NoMode && (tag === FunctionComponent || tag === ForwardRef || tag === SimpleMemoComponent)) {\n    var currentSource = sourceFiber.alternate;\n\n    if (currentSource) {\n      sourceFiber.updateQueue = currentSource.updateQueue;\n      sourceFiber.memoizedState = currentSource.memoizedState;\n      sourceFiber.lanes = currentSource.lanes;\n    } else {\n      sourceFiber.updateQueue = null;\n      sourceFiber.memoizedState = null;\n    }\n  }\n}\n\nfunction getNearestSuspenseBoundaryToCapture(returnFiber) {\n  var node = returnFiber;\n\n  do {\n    if (node.tag === SuspenseComponent && shouldCaptureSuspense(node)) {\n      return node;\n    } // This boundary already captured during this render. Continue to the next\n    // boundary.\n\n\n    node = node.return;\n  } while (node !== null);\n\n  return null;\n}\n\nfunction markSuspenseBoundaryShouldCapture(suspenseBoundary, returnFiber, sourceFiber, root, rootRenderLanes) {\n  // This marks a Suspense boundary so that when we're unwinding the stack,\n  // it captures the suspended \"exception\" and does a second (fallback) pass.\n  if ((suspenseBoundary.mode & ConcurrentMode) === NoMode) {\n    // Legacy Mode Suspense\n    //\n    // If the boundary is in legacy mode, we should *not*\n    // suspend the commit. Pretend as if the suspended component rendered\n    // null and keep rendering. When the Suspense boundary completes,\n    // we'll do a second pass to render the fallback.\n    if (suspenseBoundary === returnFiber) {\n      // Special case where we suspended while reconciling the children of\n      // a Suspense boundary's inner Offscreen wrapper fiber. This happens\n      // when a React.lazy component is a direct child of a\n      // Suspense boundary.\n      //\n      // Suspense boundaries are implemented as multiple fibers, but they\n      // are a single conceptual unit. The legacy mode behavior where we\n      // pretend the suspended fiber committed as `null` won't work,\n      // because in this case the \"suspended\" fiber is the inner\n      // Offscreen wrapper.\n      //\n      // Because the contents of the boundary haven't started rendering\n      // yet (i.e. nothing in the tree has partially rendered) we can\n      // switch to the regular, concurrent mode behavior: mark the\n      // boundary with ShouldCapture and enter the unwind phase.\n      suspenseBoundary.flags |= ShouldCapture;\n    } else {\n      suspenseBoundary.flags |= DidCapture;\n      sourceFiber.flags |= ForceUpdateForLegacySuspense; // We're going to commit this fiber even though it didn't complete.\n      // But we shouldn't call any lifecycle methods or callbacks. Remove\n      // all lifecycle effect tags.\n\n      sourceFiber.flags &= ~(LifecycleEffectMask | Incomplete);\n\n      if (sourceFiber.tag === ClassComponent) {\n        var currentSourceFiber = sourceFiber.alternate;\n\n        if (currentSourceFiber === null) {\n          // This is a new mount. Change the tag so it's not mistaken for a\n          // completed class component. For example, we should not call\n          // componentWillUnmount if it is deleted.\n          sourceFiber.tag = IncompleteClassComponent;\n        } else {\n          // When we try rendering again, we should not reuse the current fiber,\n          // since it's known to be in an inconsistent state. Use a force update to\n          // prevent a bail out.\n          var update = createUpdate(NoTimestamp, SyncLane);\n          update.tag = ForceUpdate;\n          enqueueUpdate(sourceFiber, update, SyncLane);\n        }\n      } // The source fiber did not complete. Mark it with Sync priority to\n      // indicate that it still has pending work.\n\n\n      sourceFiber.lanes = mergeLanes(sourceFiber.lanes, SyncLane);\n    }\n\n    return suspenseBoundary;\n  } // Confirmed that the boundary is in a concurrent mode tree. Continue\n  // with the normal suspend path.\n  //\n  // After this we'll use a set of heuristics to determine whether this\n  // render pass will run to completion or restart or \"suspend\" the commit.\n  // The actual logic for this is spread out in different places.\n  //\n  // This first principle is that if we're going to suspend when we complete\n  // a root, then we should also restart if we get an update or ping that\n  // might unsuspend it, and vice versa. The only reason to suspend is\n  // because you think you might want to restart before committing. However,\n  // it doesn't make sense to restart only while in the period we're suspended.\n  //\n  // Restarting too aggressively is also not good because it starves out any\n  // intermediate loading state. So we use heuristics to determine when.\n  // Suspense Heuristics\n  //\n  // If nothing threw a Promise or all the same fallbacks are already showing,\n  // then don't suspend/restart.\n  //\n  // If this is an initial render of a new tree of Suspense boundaries and\n  // those trigger a fallback, then don't suspend/restart. We want to ensure\n  // that we can show the initial loading state as quickly as possible.\n  //\n  // If we hit a \"Delayed\" case, such as when we'd switch from content back into\n  // a fallback, then we should always suspend/restart. Transitions apply\n  // to this case. If none is defined, JND is used instead.\n  //\n  // If we're already showing a fallback and it gets \"retried\", allowing us to show\n  // another level, but there's still an inner boundary that would show a fallback,\n  // then we suspend/restart for 500ms since the last time we showed a fallback\n  // anywhere in the tree. This effectively throttles progressive loading into a\n  // consistent train of commits. This also gives us an opportunity to restart to\n  // get to the completed state slightly earlier.\n  //\n  // If there's ambiguity due to batching it's resolved in preference of:\n  // 1) \"delayed\", 2) \"initial render\", 3) \"retry\".\n  //\n  // We want to ensure that a \"busy\" state doesn't get force committed. We want to\n  // ensure that new initial loading states can commit as soon as possible.\n\n\n  suspenseBoundary.flags |= ShouldCapture; // TODO: I think we can remove this, since we now use `DidCapture` in\n  // the begin phase to prevent an early bailout.\n\n  suspenseBoundary.lanes = rootRenderLanes;\n  return suspenseBoundary;\n}\n\nfunction throwException(root, returnFiber, sourceFiber, value, rootRenderLanes) {\n  // The source fiber did not complete.\n  sourceFiber.flags |= Incomplete;\n\n  {\n    if (isDevToolsPresent) {\n      // If we have pending work still, restore the original updaters\n      restorePendingUpdaters(root, rootRenderLanes);\n    }\n  }\n\n  if (value !== null && typeof value === 'object' && typeof value.then === 'function') {\n    // This is a wakeable. The component suspended.\n    var wakeable = value;\n    resetSuspendedComponent(sourceFiber);\n\n    {\n      if (getIsHydrating() && sourceFiber.mode & ConcurrentMode) {\n        markDidThrowWhileHydratingDEV();\n      }\n    }\n\n\n    var suspenseBoundary = getNearestSuspenseBoundaryToCapture(returnFiber);\n\n    if (suspenseBoundary !== null) {\n      suspenseBoundary.flags &= ~ForceClientRender;\n      markSuspenseBoundaryShouldCapture(suspenseBoundary, returnFiber, sourceFiber, root, rootRenderLanes); // We only attach ping listeners in concurrent mode. Legacy Suspense always\n      // commits fallbacks synchronously, so there are no pings.\n\n      if (suspenseBoundary.mode & ConcurrentMode) {\n        attachPingListener(root, wakeable, rootRenderLanes);\n      }\n\n      attachRetryListener(suspenseBoundary, root, wakeable);\n      return;\n    } else {\n      // No boundary was found. Unless this is a sync update, this is OK.\n      // We can suspend and wait for more data to arrive.\n      if (!includesSyncLane(rootRenderLanes)) {\n        // This is not a sync update. Suspend. Since we're not activating a\n        // Suspense boundary, this will unwind all the way to the root without\n        // performing a second pass to render a fallback. (This is arguably how\n        // refresh transitions should work, too, since we're not going to commit\n        // the fallbacks anyway.)\n        //\n        // This case also applies to initial hydration.\n        attachPingListener(root, wakeable, rootRenderLanes);\n        renderDidSuspendDelayIfPossible();\n        return;\n      } // This is a sync/discrete update. We treat this case like an error\n      // because discrete renders are expected to produce a complete tree\n      // synchronously to maintain consistency with external state.\n\n\n      var uncaughtSuspenseError = new Error('A component suspended while responding to synchronous input. This ' + 'will cause the UI to be replaced with a loading indicator. To ' + 'fix, updates that suspend should be wrapped ' + 'with startTransition.'); // If we're outside a transition, fall through to the regular error path.\n      // The error will be caught by the nearest suspense boundary.\n\n      value = uncaughtSuspenseError;\n    }\n  } else {\n    // This is a regular error, not a Suspense wakeable.\n    if (getIsHydrating() && sourceFiber.mode & ConcurrentMode) {\n      markDidThrowWhileHydratingDEV();\n\n      var _suspenseBoundary = getNearestSuspenseBoundaryToCapture(returnFiber); // If the error was thrown during hydration, we may be able to recover by\n      // discarding the dehydrated content and switching to a client render.\n      // Instead of surfacing the error, find the nearest Suspense boundary\n      // and render it again without hydration.\n\n\n      if (_suspenseBoundary !== null) {\n        if ((_suspenseBoundary.flags & ShouldCapture) === NoFlags) {\n          // Set a flag to indicate that we should try rendering the normal\n          // children again, not the fallback.\n          _suspenseBoundary.flags |= ForceClientRender;\n        }\n\n        markSuspenseBoundaryShouldCapture(_suspenseBoundary, returnFiber, sourceFiber, root, rootRenderLanes); // Even though the user may not be affected by this error, we should\n        // still log it so it can be fixed.\n\n        queueHydrationError(createCapturedValueAtFiber(value, sourceFiber));\n        return;\n      }\n    }\n  }\n\n  value = createCapturedValueAtFiber(value, sourceFiber);\n  renderDidError(value); // We didn't find a boundary that could handle this type of exception. Start\n  // over and traverse parent path again, this time treating the exception\n  // as an error.\n\n  var workInProgress = returnFiber;\n\n  do {\n    switch (workInProgress.tag) {\n      case HostRoot:\n        {\n          var _errorInfo = value;\n          workInProgress.flags |= ShouldCapture;\n          var lane = pickArbitraryLane(rootRenderLanes);\n          workInProgress.lanes = mergeLanes(workInProgress.lanes, lane);\n          var update = createRootErrorUpdate(workInProgress, _errorInfo, lane);\n          enqueueCapturedUpdate(workInProgress, update);\n          return;\n        }\n\n      case ClassComponent:\n        // Capture and retry\n        var errorInfo = value;\n        var ctor = workInProgress.type;\n        var instance = workInProgress.stateNode;\n\n        if ((workInProgress.flags & DidCapture) === NoFlags && (typeof ctor.getDerivedStateFromError === 'function' || instance !== null && typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance))) {\n          workInProgress.flags |= ShouldCapture;\n\n          var _lane = pickArbitraryLane(rootRenderLanes);\n\n          workInProgress.lanes = mergeLanes(workInProgress.lanes, _lane); // Schedule the error boundary to re-render using updated state\n\n          var _update = createClassErrorUpdate(workInProgress, errorInfo, _lane);\n\n          enqueueCapturedUpdate(workInProgress, _update);\n          return;\n        }\n\n        break;\n    }\n\n    workInProgress = workInProgress.return;\n  } while (workInProgress !== null);\n}\n\nfunction getSuspendedCache() {\n  {\n    return null;\n  } // This function is called when a Suspense boundary suspends. It returns the\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar didReceiveUpdate = false;\nvar didWarnAboutBadClass;\nvar didWarnAboutModulePatternComponent;\nvar didWarnAboutContextTypeOnFunctionComponent;\nvar didWarnAboutGetDerivedStateOnFunctionComponent;\nvar didWarnAboutFunctionRefs;\nvar didWarnAboutReassigningProps;\nvar didWarnAboutRevealOrder;\nvar didWarnAboutTailOptions;\nvar didWarnAboutDefaultPropsOnFunctionComponent;\n\n{\n  didWarnAboutBadClass = {};\n  didWarnAboutModulePatternComponent = {};\n  didWarnAboutContextTypeOnFunctionComponent = {};\n  didWarnAboutGetDerivedStateOnFunctionComponent = {};\n  didWarnAboutFunctionRefs = {};\n  didWarnAboutReassigningProps = false;\n  didWarnAboutRevealOrder = {};\n  didWarnAboutTailOptions = {};\n  didWarnAboutDefaultPropsOnFunctionComponent = {};\n}\n\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n  if (current === null) {\n    // If this is a fresh new component that hasn't been rendered yet, we\n    // won't update its child set by applying minimal side-effects. Instead,\n    // we will add them all to the child before it gets rendered. That means\n    // we can optimize this reconciliation pass by not tracking side-effects.\n    workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderLanes);\n  } else {\n    // If the current child is the same as the work in progress, it means that\n    // we haven't yet started any work on these children. Therefore, we use\n    // the clone algorithm to create a copy of all the current children.\n    // If we had any progressed work already, that is invalid at this point so\n    // let's throw it out.\n    workInProgress.child = reconcileChildFibers(workInProgress, current.child, nextChildren, renderLanes);\n  }\n}\n\nfunction forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderLanes) {\n  // This function is fork of reconcileChildren. It's used in cases where we\n  // want to reconcile without matching against the existing set. This has the\n  // effect of all current children being unmounted; even if the type and key\n  // are the same, the old child is unmounted and a new child is created.\n  //\n  // To do this, we're going to go through the reconcile algorithm twice. In\n  // the first pass, we schedule a deletion for all the current children by\n  // passing null.\n  workInProgress.child = reconcileChildFibers(workInProgress, current.child, null, renderLanes); // In the second pass, we mount the new children. The trick here is that we\n  // pass null in place of where we usually pass the current child set. This has\n  // the effect of remounting all children regardless of whether their\n  // identities match.\n\n  workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderLanes);\n}\n\nfunction updateForwardRef(current, workInProgress, Component, nextProps, renderLanes) {\n  // TODO: current can be non-null here even if the component\n  // hasn't yet mounted. This happens after the first render suspends.\n  // We'll need to figure out if this is fine or can cause issues.\n  {\n    if (workInProgress.type !== workInProgress.elementType) {\n      // Lazy component props can't be validated in createElement\n      // because they're only guaranteed to be resolved here.\n      var innerPropTypes = Component.propTypes;\n\n      if (innerPropTypes) {\n        checkPropTypes(innerPropTypes, nextProps, // Resolved props\n        'prop', getComponentNameFromType(Component));\n      }\n    }\n  }\n\n  var render = Component.render;\n  var ref = workInProgress.ref; // The rest is a fork of updateFunctionComponent\n\n  var nextChildren;\n  var hasId;\n  prepareToReadContext(workInProgress, renderLanes);\n\n  {\n    markComponentRenderStarted(workInProgress);\n  }\n\n  {\n    ReactCurrentOwner$1.current = workInProgress;\n    setIsRendering(true);\n    nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderLanes);\n    hasId = checkDidRenderIdHook();\n\n    if ( workInProgress.mode & StrictLegacyMode) {\n      setIsStrictModeForDevtools(true);\n\n      try {\n        nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderLanes);\n        hasId = checkDidRenderIdHook();\n      } finally {\n        setIsStrictModeForDevtools(false);\n      }\n    }\n\n    setIsRendering(false);\n  }\n\n  {\n    markComponentRenderStopped();\n  }\n\n  if (current !== null && !didReceiveUpdate) {\n    bailoutHooks(current, workInProgress, renderLanes);\n    return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n  }\n\n  if (getIsHydrating() && hasId) {\n    pushMaterializedTreeId(workInProgress);\n  } // React DevTools reads this flag.\n\n\n  workInProgress.flags |= PerformedWork;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\n\nfunction updateMemoComponent(current, workInProgress, Component, nextProps, renderLanes) {\n  if (current === null) {\n    var type = Component.type;\n\n    if (isSimpleFunctionComponent(type) && Component.compare === null && // SimpleMemoComponent codepath doesn't resolve outer props either.\n    Component.defaultProps === undefined) {\n      var resolvedType = type;\n\n      {\n        resolvedType = resolveFunctionForHotReloading(type);\n      } // If this is a plain function component without default props,\n      // and with only the default shallow comparison, we upgrade it\n      // to a SimpleMemoComponent to allow fast path updates.\n\n\n      workInProgress.tag = SimpleMemoComponent;\n      workInProgress.type = resolvedType;\n\n      {\n        validateFunctionComponentInDev(workInProgress, type);\n      }\n\n      return updateSimpleMemoComponent(current, workInProgress, resolvedType, nextProps, renderLanes);\n    }\n\n    {\n      var innerPropTypes = type.propTypes;\n\n      if (innerPropTypes) {\n        // Inner memo component props aren't currently validated in createElement.\n        // We could move it there, but we'd still need this for lazy code path.\n        checkPropTypes(innerPropTypes, nextProps, // Resolved props\n        'prop', getComponentNameFromType(type));\n      }\n\n      if ( Component.defaultProps !== undefined) {\n        var componentName = getComponentNameFromType(type) || 'Unknown';\n\n        if (!didWarnAboutDefaultPropsOnFunctionComponent[componentName]) {\n          error('%s: Support for defaultProps will be removed from memo components ' + 'in a future major release. Use JavaScript default parameters instead.', componentName);\n\n          didWarnAboutDefaultPropsOnFunctionComponent[componentName] = true;\n        }\n      }\n    }\n\n    var child = createFiberFromTypeAndProps(Component.type, null, nextProps, workInProgress, workInProgress.mode, renderLanes);\n    child.ref = workInProgress.ref;\n    child.return = workInProgress;\n    workInProgress.child = child;\n    return child;\n  }\n\n  {\n    var _type = Component.type;\n    var _innerPropTypes = _type.propTypes;\n\n    if (_innerPropTypes) {\n      // Inner memo component props aren't currently validated in createElement.\n      // We could move it there, but we'd still need this for lazy code path.\n      checkPropTypes(_innerPropTypes, nextProps, // Resolved props\n      'prop', getComponentNameFromType(_type));\n    }\n  }\n\n  var currentChild = current.child; // This is always exactly one child\n\n  var hasScheduledUpdateOrContext = checkScheduledUpdateOrContext(current, renderLanes);\n\n  if (!hasScheduledUpdateOrContext) {\n    // This will be the props with resolved defaultProps,\n    // unlike current.memoizedProps which will be the unresolved ones.\n    var prevProps = currentChild.memoizedProps; // Default to shallow comparison\n\n    var compare = Component.compare;\n    compare = compare !== null ? compare : shallowEqual;\n\n    if (compare(prevProps, nextProps) && current.ref === workInProgress.ref) {\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n    }\n  } // React DevTools reads this flag.\n\n\n  workInProgress.flags |= PerformedWork;\n  var newChild = createWorkInProgress(currentChild, nextProps);\n  newChild.ref = workInProgress.ref;\n  newChild.return = workInProgress;\n  workInProgress.child = newChild;\n  return newChild;\n}\n\nfunction updateSimpleMemoComponent(current, workInProgress, Component, nextProps, renderLanes) {\n  // TODO: current can be non-null here even if the component\n  // hasn't yet mounted. This happens when the inner render suspends.\n  // We'll need to figure out if this is fine or can cause issues.\n  {\n    if (workInProgress.type !== workInProgress.elementType) {\n      // Lazy component props can't be validated in createElement\n      // because they're only guaranteed to be resolved here.\n      var outerMemoType = workInProgress.elementType;\n\n      if (outerMemoType.$$typeof === REACT_LAZY_TYPE) {\n        // We warn when you define propTypes on lazy()\n        // so let's just skip over it to find memo() outer wrapper.\n        // Inner props for memo are validated later.\n        var lazyComponent = outerMemoType;\n        var payload = lazyComponent._payload;\n        var init = lazyComponent._init;\n\n        try {\n          outerMemoType = init(payload);\n        } catch (x) {\n          outerMemoType = null;\n        } // Inner propTypes will be validated in the function component path.\n\n\n        var outerPropTypes = outerMemoType && outerMemoType.propTypes;\n\n        if (outerPropTypes) {\n          checkPropTypes(outerPropTypes, nextProps, // Resolved (SimpleMemoComponent has no defaultProps)\n          'prop', getComponentNameFromType(outerMemoType));\n        }\n      }\n    }\n  }\n\n  if (current !== null) {\n    var prevProps = current.memoizedProps;\n\n    if (shallowEqual(prevProps, nextProps) && current.ref === workInProgress.ref && ( // Prevent bailout if the implementation changed due to hot reload.\n     workInProgress.type === current.type )) {\n      didReceiveUpdate = false; // The props are shallowly equal. Reuse the previous props object, like we\n      // would during a normal fiber bailout.\n      //\n      // We don't have strong guarantees that the props object is referentially\n      // equal during updates where we can't bail out anyway — like if the props\n      // are shallowly equal, but there's a local state or context update in the\n      // same batch.\n      //\n      // However, as a principle, we should aim to make the behavior consistent\n      // across different ways of memoizing a component. For example, React.memo\n      // has a different internal Fiber layout if you pass a normal function\n      // component (SimpleMemoComponent) versus if you pass a different type\n      // like forwardRef (MemoComponent). But this is an implementation detail.\n      // Wrapping a component in forwardRef (or React.lazy, etc) shouldn't\n      // affect whether the props object is reused during a bailout.\n\n      workInProgress.pendingProps = nextProps = prevProps;\n\n      if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n        // The pending lanes were cleared at the beginning of beginWork. We're\n        // about to bail out, but there might be other lanes that weren't\n        // included in the current render. Usually, the priority level of the\n        // remaining updates is accumulated during the evaluation of the\n        // component (i.e. when processing the update queue). But since since\n        // we're bailing out early *without* evaluating the component, we need\n        // to account for it here, too. Reset to the value of the current fiber.\n        // NOTE: This only applies to SimpleMemoComponent, not MemoComponent,\n        // because a MemoComponent fiber does not have hooks or an update queue;\n        // rather, it wraps around an inner component, which may or may not\n        // contains hooks.\n        // TODO: Move the reset at in beginWork out of the common path so that\n        // this is no longer necessary.\n        workInProgress.lanes = current.lanes;\n        return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n      } else if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags) {\n        // This is a special case that only exists for legacy mode.\n        // See https://github.com/facebook/react/pull/19216.\n        didReceiveUpdate = true;\n      }\n    }\n  }\n\n  return updateFunctionComponent(current, workInProgress, Component, nextProps, renderLanes);\n}\n\nfunction updateOffscreenComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps;\n  var nextChildren = nextProps.children;\n  var prevState = current !== null ? current.memoizedState : null;\n\n  if (nextProps.mode === 'hidden' || enableLegacyHidden ) {\n    // Rendering a hidden tree.\n    if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n      // In legacy sync mode, don't defer the subtree. Render it now.\n      // TODO: Consider how Offscreen should work with transitions in the future\n      var nextState = {\n        baseLanes: NoLanes,\n        cachePool: null,\n        transitions: null\n      };\n      workInProgress.memoizedState = nextState;\n\n      pushRenderLanes(workInProgress, renderLanes);\n    } else if (!includesSomeLane(renderLanes, OffscreenLane)) {\n      var spawnedCachePool = null; // We're hidden, and we're not rendering at Offscreen. We will bail out\n      // and resume this tree later.\n\n      var nextBaseLanes;\n\n      if (prevState !== null) {\n        var prevBaseLanes = prevState.baseLanes;\n        nextBaseLanes = mergeLanes(prevBaseLanes, renderLanes);\n      } else {\n        nextBaseLanes = renderLanes;\n      } // Schedule this fiber to re-render at offscreen priority. Then bailout.\n\n\n      workInProgress.lanes = workInProgress.childLanes = laneToLanes(OffscreenLane);\n      var _nextState = {\n        baseLanes: nextBaseLanes,\n        cachePool: spawnedCachePool,\n        transitions: null\n      };\n      workInProgress.memoizedState = _nextState;\n      workInProgress.updateQueue = null;\n      // to avoid a push/pop misalignment.\n\n\n      pushRenderLanes(workInProgress, nextBaseLanes);\n\n      return null;\n    } else {\n      // This is the second render. The surrounding visible content has already\n      // committed. Now we resume rendering the hidden tree.\n      // Rendering at offscreen, so we can clear the base lanes.\n      var _nextState2 = {\n        baseLanes: NoLanes,\n        cachePool: null,\n        transitions: null\n      };\n      workInProgress.memoizedState = _nextState2; // Push the lanes that were skipped when we bailed out.\n\n      var subtreeRenderLanes = prevState !== null ? prevState.baseLanes : renderLanes;\n\n      pushRenderLanes(workInProgress, subtreeRenderLanes);\n    }\n  } else {\n    // Rendering a visible tree.\n    var _subtreeRenderLanes;\n\n    if (prevState !== null) {\n      // We're going from hidden -> visible.\n      _subtreeRenderLanes = mergeLanes(prevState.baseLanes, renderLanes);\n\n      workInProgress.memoizedState = null;\n    } else {\n      // We weren't previously hidden, and we still aren't, so there's nothing\n      // special to do. Need to push to the stack regardless, though, to avoid\n      // a push/pop misalignment.\n      _subtreeRenderLanes = renderLanes;\n    }\n\n    pushRenderLanes(workInProgress, _subtreeRenderLanes);\n  }\n\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n} // Note: These happen to have identical begin phases, for now. We shouldn't hold\n\nfunction updateFragment(current, workInProgress, renderLanes) {\n  var nextChildren = workInProgress.pendingProps;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\n\nfunction updateMode(current, workInProgress, renderLanes) {\n  var nextChildren = workInProgress.pendingProps.children;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\n\nfunction updateProfiler(current, workInProgress, renderLanes) {\n  {\n    workInProgress.flags |= Update;\n\n    {\n      // Reset effect durations for the next eventual effect phase.\n      // These are reset during render to allow the DevTools commit hook a chance to read them,\n      var stateNode = workInProgress.stateNode;\n      stateNode.effectDuration = 0;\n      stateNode.passiveEffectDuration = 0;\n    }\n  }\n\n  var nextProps = workInProgress.pendingProps;\n  var nextChildren = nextProps.children;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\n\nfunction markRef(current, workInProgress) {\n  var ref = workInProgress.ref;\n\n  if (current === null && ref !== null || current !== null && current.ref !== ref) {\n    // Schedule a Ref effect\n    workInProgress.flags |= Ref;\n\n    {\n      workInProgress.flags |= RefStatic;\n    }\n  }\n}\n\nfunction updateFunctionComponent(current, workInProgress, Component, nextProps, renderLanes) {\n  {\n    if (workInProgress.type !== workInProgress.elementType) {\n      // Lazy component props can't be validated in createElement\n      // because they're only guaranteed to be resolved here.\n      var innerPropTypes = Component.propTypes;\n\n      if (innerPropTypes) {\n        checkPropTypes(innerPropTypes, nextProps, // Resolved props\n        'prop', getComponentNameFromType(Component));\n      }\n    }\n  }\n\n  var context;\n\n  {\n    var unmaskedContext = getUnmaskedContext(workInProgress, Component, true);\n    context = getMaskedContext(workInProgress, unmaskedContext);\n  }\n\n  var nextChildren;\n  var hasId;\n  prepareToReadContext(workInProgress, renderLanes);\n\n  {\n    markComponentRenderStarted(workInProgress);\n  }\n\n  {\n    ReactCurrentOwner$1.current = workInProgress;\n    setIsRendering(true);\n    nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderLanes);\n    hasId = checkDidRenderIdHook();\n\n    if ( workInProgress.mode & StrictLegacyMode) {\n      setIsStrictModeForDevtools(true);\n\n      try {\n        nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderLanes);\n        hasId = checkDidRenderIdHook();\n      } finally {\n        setIsStrictModeForDevtools(false);\n      }\n    }\n\n    setIsRendering(false);\n  }\n\n  {\n    markComponentRenderStopped();\n  }\n\n  if (current !== null && !didReceiveUpdate) {\n    bailoutHooks(current, workInProgress, renderLanes);\n    return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n  }\n\n  if (getIsHydrating() && hasId) {\n    pushMaterializedTreeId(workInProgress);\n  } // React DevTools reads this flag.\n\n\n  workInProgress.flags |= PerformedWork;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\n\nfunction updateClassComponent(current, workInProgress, Component, nextProps, renderLanes) {\n  {\n    // This is used by DevTools to force a boundary to error.\n    switch (shouldError(workInProgress)) {\n      case false:\n        {\n          var _instance = workInProgress.stateNode;\n          var ctor = workInProgress.type; // TODO This way of resetting the error boundary state is a hack.\n          // Is there a better way to do this?\n\n          var tempInstance = new ctor(workInProgress.memoizedProps, _instance.context);\n          var state = tempInstance.state;\n\n          _instance.updater.enqueueSetState(_instance, state, null);\n\n          break;\n        }\n\n      case true:\n        {\n          workInProgress.flags |= DidCapture;\n          workInProgress.flags |= ShouldCapture; // eslint-disable-next-line react-internal/prod-error-codes\n\n          var error$1 = new Error('Simulated error coming from DevTools');\n          var lane = pickArbitraryLane(renderLanes);\n          workInProgress.lanes = mergeLanes(workInProgress.lanes, lane); // Schedule the error boundary to re-render using updated state\n\n          var update = createClassErrorUpdate(workInProgress, createCapturedValueAtFiber(error$1, workInProgress), lane);\n          enqueueCapturedUpdate(workInProgress, update);\n          break;\n        }\n    }\n\n    if (workInProgress.type !== workInProgress.elementType) {\n      // Lazy component props can't be validated in createElement\n      // because they're only guaranteed to be resolved here.\n      var innerPropTypes = Component.propTypes;\n\n      if (innerPropTypes) {\n        checkPropTypes(innerPropTypes, nextProps, // Resolved props\n        'prop', getComponentNameFromType(Component));\n      }\n    }\n  } // Push context providers early to prevent context stack mismatches.\n  // During mounting we don't know the child context yet as the instance doesn't exist.\n  // We will invalidate the child context in finishClassComponent() right after rendering.\n\n\n  var hasContext;\n\n  if (isContextProvider(Component)) {\n    hasContext = true;\n    pushContextProvider(workInProgress);\n  } else {\n    hasContext = false;\n  }\n\n  prepareToReadContext(workInProgress, renderLanes);\n  var instance = workInProgress.stateNode;\n  var shouldUpdate;\n\n  if (instance === null) {\n    resetSuspendedCurrentOnMountInLegacyMode(current, workInProgress); // In the initial pass we might need to construct the instance.\n\n    constructClassInstance(workInProgress, Component, nextProps);\n    mountClassInstance(workInProgress, Component, nextProps, renderLanes);\n    shouldUpdate = true;\n  } else if (current === null) {\n    // In a resume, we'll already have an instance we can reuse.\n    shouldUpdate = resumeMountClassInstance(workInProgress, Component, nextProps, renderLanes);\n  } else {\n    shouldUpdate = updateClassInstance(current, workInProgress, Component, nextProps, renderLanes);\n  }\n\n  var nextUnitOfWork = finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderLanes);\n\n  {\n    var inst = workInProgress.stateNode;\n\n    if (shouldUpdate && inst.props !== nextProps) {\n      if (!didWarnAboutReassigningProps) {\n        error('It looks like %s is reassigning its own `this.props` while rendering. ' + 'This is not supported and can lead to confusing bugs.', getComponentNameFromFiber(workInProgress) || 'a component');\n      }\n\n      didWarnAboutReassigningProps = true;\n    }\n  }\n\n  return nextUnitOfWork;\n}\n\nfunction finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderLanes) {\n  // Refs should update even if shouldComponentUpdate returns false\n  markRef(current, workInProgress);\n  var didCaptureError = (workInProgress.flags & DidCapture) !== NoFlags;\n\n  if (!shouldUpdate && !didCaptureError) {\n    // Context providers should defer to sCU for rendering\n    if (hasContext) {\n      invalidateContextProvider(workInProgress, Component, false);\n    }\n\n    return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n  }\n\n  var instance = workInProgress.stateNode; // Rerender\n\n  ReactCurrentOwner$1.current = workInProgress;\n  var nextChildren;\n\n  if (didCaptureError && typeof Component.getDerivedStateFromError !== 'function') {\n    // If we captured an error, but getDerivedStateFromError is not defined,\n    // unmount all the children. componentDidCatch will schedule an update to\n    // re-render a fallback. This is temporary until we migrate everyone to\n    // the new API.\n    // TODO: Warn in a future release.\n    nextChildren = null;\n\n    {\n      stopProfilerTimerIfRunning();\n    }\n  } else {\n    {\n      markComponentRenderStarted(workInProgress);\n    }\n\n    {\n      setIsRendering(true);\n      nextChildren = instance.render();\n\n      if ( workInProgress.mode & StrictLegacyMode) {\n        setIsStrictModeForDevtools(true);\n\n        try {\n          instance.render();\n        } finally {\n          setIsStrictModeForDevtools(false);\n        }\n      }\n\n      setIsRendering(false);\n    }\n\n    {\n      markComponentRenderStopped();\n    }\n  } // React DevTools reads this flag.\n\n\n  workInProgress.flags |= PerformedWork;\n\n  if (current !== null && didCaptureError) {\n    // If we're recovering from an error, reconcile without reusing any of\n    // the existing children. Conceptually, the normal children and the children\n    // that are shown on error are two different sets, so we shouldn't reuse\n    // normal children even if their identities match.\n    forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderLanes);\n  } else {\n    reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  } // Memoize state using the values we just used to render.\n  // TODO: Restructure so we never read values from the instance.\n\n\n  workInProgress.memoizedState = instance.state; // The context might have changed so we need to recalculate it.\n\n  if (hasContext) {\n    invalidateContextProvider(workInProgress, Component, true);\n  }\n\n  return workInProgress.child;\n}\n\nfunction pushHostRootContext(workInProgress) {\n  var root = workInProgress.stateNode;\n\n  if (root.pendingContext) {\n    pushTopLevelContextObject(workInProgress, root.pendingContext, root.pendingContext !== root.context);\n  } else if (root.context) {\n    // Should always be set\n    pushTopLevelContextObject(workInProgress, root.context, false);\n  }\n\n  pushHostContainer(workInProgress, root.containerInfo);\n}\n\nfunction updateHostRoot(current, workInProgress, renderLanes) {\n  pushHostRootContext(workInProgress);\n\n  if (current === null) {\n    throw new Error('Should have a current fiber. This is a bug in React.');\n  }\n\n  var nextProps = workInProgress.pendingProps;\n  var prevState = workInProgress.memoizedState;\n  var prevChildren = prevState.element;\n  cloneUpdateQueue(current, workInProgress);\n  processUpdateQueue(workInProgress, nextProps, null, renderLanes);\n  var nextState = workInProgress.memoizedState;\n  var root = workInProgress.stateNode;\n  // being called \"element\".\n\n\n  var nextChildren = nextState.element;\n\n  if ( prevState.isDehydrated) {\n    // This is a hydration root whose shell has not yet hydrated. We should\n    // attempt to hydrate.\n    // Flip isDehydrated to false to indicate that when this render\n    // finishes, the root will no longer be dehydrated.\n    var overrideState = {\n      element: nextChildren,\n      isDehydrated: false,\n      cache: nextState.cache,\n      pendingSuspenseBoundaries: nextState.pendingSuspenseBoundaries,\n      transitions: nextState.transitions\n    };\n    var updateQueue = workInProgress.updateQueue; // `baseState` can always be the last state because the root doesn't\n    // have reducer functions so it doesn't need rebasing.\n\n    updateQueue.baseState = overrideState;\n    workInProgress.memoizedState = overrideState;\n\n    if (workInProgress.flags & ForceClientRender) {\n      // Something errored during a previous attempt to hydrate the shell, so we\n      // forced a client render.\n      var recoverableError = createCapturedValueAtFiber(new Error('There was an error while hydrating. Because the error happened outside ' + 'of a Suspense boundary, the entire root will switch to ' + 'client rendering.'), workInProgress);\n      return mountHostRootWithoutHydrating(current, workInProgress, nextChildren, renderLanes, recoverableError);\n    } else if (nextChildren !== prevChildren) {\n      var _recoverableError = createCapturedValueAtFiber(new Error('This root received an early update, before anything was able ' + 'hydrate. Switched the entire root to client rendering.'), workInProgress);\n\n      return mountHostRootWithoutHydrating(current, workInProgress, nextChildren, renderLanes, _recoverableError);\n    } else {\n      // The outermost shell has not hydrated yet. Start hydrating.\n      enterHydrationState(workInProgress);\n\n      var child = mountChildFibers(workInProgress, null, nextChildren, renderLanes);\n      workInProgress.child = child;\n      var node = child;\n\n      while (node) {\n        // Mark each child as hydrating. This is a fast path to know whether this\n        // tree is part of a hydrating tree. This is used to determine if a child\n        // node has fully mounted yet, and for scheduling event replaying.\n        // Conceptually this is similar to Placement in that a new subtree is\n        // inserted into the React tree here. It just happens to not need DOM\n        // mutations because it already exists.\n        node.flags = node.flags & ~Placement | Hydrating;\n        node = node.sibling;\n      }\n    }\n  } else {\n    // Root is not dehydrated. Either this is a client-only root, or it\n    // already hydrated.\n    resetHydrationState();\n\n    if (nextChildren === prevChildren) {\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n    }\n\n    reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  }\n\n  return workInProgress.child;\n}\n\nfunction mountHostRootWithoutHydrating(current, workInProgress, nextChildren, renderLanes, recoverableError) {\n  // Revert to client rendering.\n  resetHydrationState();\n  queueHydrationError(recoverableError);\n  workInProgress.flags |= ForceClientRender;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\n\nfunction updateHostComponent(current, workInProgress, renderLanes) {\n  pushHostContext(workInProgress);\n\n  if (current === null) {\n    tryToClaimNextHydratableInstance(workInProgress);\n  }\n\n  var type = workInProgress.type;\n  var nextProps = workInProgress.pendingProps;\n  var prevProps = current !== null ? current.memoizedProps : null;\n  var nextChildren = nextProps.children;\n  var isDirectTextChild = shouldSetTextContent(type, nextProps);\n\n  if (isDirectTextChild) {\n    // We special case a direct text child of a host node. This is a common\n    // case. We won't handle it as a reified child. We will instead handle\n    // this in the host environment that also has access to this prop. That\n    // avoids allocating another HostText fiber and traversing it.\n    nextChildren = null;\n  } else if (prevProps !== null && shouldSetTextContent(type, prevProps)) {\n    // If we're switching from a direct text child to a normal child, or to\n    // empty, we need to schedule the text content to be reset.\n    workInProgress.flags |= ContentReset;\n  }\n\n  markRef(current, workInProgress);\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\n\nfunction updateHostText(current, workInProgress) {\n  if (current === null) {\n    tryToClaimNextHydratableInstance(workInProgress);\n  } // Nothing to do here. This is terminal. We'll do the completion step\n  // immediately after.\n\n\n  return null;\n}\n\nfunction mountLazyComponent(_current, workInProgress, elementType, renderLanes) {\n  resetSuspendedCurrentOnMountInLegacyMode(_current, workInProgress);\n  var props = workInProgress.pendingProps;\n  var lazyComponent = elementType;\n  var payload = lazyComponent._payload;\n  var init = lazyComponent._init;\n  var Component = init(payload); // Store the unwrapped component in the type.\n\n  workInProgress.type = Component;\n  var resolvedTag = workInProgress.tag = resolveLazyComponentTag(Component);\n  var resolvedProps = resolveDefaultProps(Component, props);\n  var child;\n\n  switch (resolvedTag) {\n    case FunctionComponent:\n      {\n        {\n          validateFunctionComponentInDev(workInProgress, Component);\n          workInProgress.type = Component = resolveFunctionForHotReloading(Component);\n        }\n\n        child = updateFunctionComponent(null, workInProgress, Component, resolvedProps, renderLanes);\n        return child;\n      }\n\n    case ClassComponent:\n      {\n        {\n          workInProgress.type = Component = resolveClassForHotReloading(Component);\n        }\n\n        child = updateClassComponent(null, workInProgress, Component, resolvedProps, renderLanes);\n        return child;\n      }\n\n    case ForwardRef:\n      {\n        {\n          workInProgress.type = Component = resolveForwardRefForHotReloading(Component);\n        }\n\n        child = updateForwardRef(null, workInProgress, Component, resolvedProps, renderLanes);\n        return child;\n      }\n\n    case MemoComponent:\n      {\n        {\n          if (workInProgress.type !== workInProgress.elementType) {\n            var outerPropTypes = Component.propTypes;\n\n            if (outerPropTypes) {\n              checkPropTypes(outerPropTypes, resolvedProps, // Resolved for outer only\n              'prop', getComponentNameFromType(Component));\n            }\n          }\n        }\n\n        child = updateMemoComponent(null, workInProgress, Component, resolveDefaultProps(Component.type, resolvedProps), // The inner type can have defaults too\n        renderLanes);\n        return child;\n      }\n  }\n\n  var hint = '';\n\n  {\n    if (Component !== null && typeof Component === 'object' && Component.$$typeof === REACT_LAZY_TYPE) {\n      hint = ' Did you wrap a component in React.lazy() more than once?';\n    }\n  } // This message intentionally doesn't mention ForwardRef or MemoComponent\n  // because the fact that it's a separate type of work is an\n  // implementation detail.\n\n\n  throw new Error(\"Element type is invalid. Received a promise that resolves to: \" + Component + \". \" + (\"Lazy element type must resolve to a class or function.\" + hint));\n}\n\nfunction mountIncompleteClassComponent(_current, workInProgress, Component, nextProps, renderLanes) {\n  resetSuspendedCurrentOnMountInLegacyMode(_current, workInProgress); // Promote the fiber to a class and try rendering again.\n\n  workInProgress.tag = ClassComponent; // The rest of this function is a fork of `updateClassComponent`\n  // Push context providers early to prevent context stack mismatches.\n  // During mounting we don't know the child context yet as the instance doesn't exist.\n  // We will invalidate the child context in finishClassComponent() right after rendering.\n\n  var hasContext;\n\n  if (isContextProvider(Component)) {\n    hasContext = true;\n    pushContextProvider(workInProgress);\n  } else {\n    hasContext = false;\n  }\n\n  prepareToReadContext(workInProgress, renderLanes);\n  constructClassInstance(workInProgress, Component, nextProps);\n  mountClassInstance(workInProgress, Component, nextProps, renderLanes);\n  return finishClassComponent(null, workInProgress, Component, true, hasContext, renderLanes);\n}\n\nfunction mountIndeterminateComponent(_current, workInProgress, Component, renderLanes) {\n  resetSuspendedCurrentOnMountInLegacyMode(_current, workInProgress);\n  var props = workInProgress.pendingProps;\n  var context;\n\n  {\n    var unmaskedContext = getUnmaskedContext(workInProgress, Component, false);\n    context = getMaskedContext(workInProgress, unmaskedContext);\n  }\n\n  prepareToReadContext(workInProgress, renderLanes);\n  var value;\n  var hasId;\n\n  {\n    markComponentRenderStarted(workInProgress);\n  }\n\n  {\n    if (Component.prototype && typeof Component.prototype.render === 'function') {\n      var componentName = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutBadClass[componentName]) {\n        error(\"The <%s /> component appears to have a render method, but doesn't extend React.Component. \" + 'This is likely to cause errors. Change %s to extend React.Component instead.', componentName, componentName);\n\n        didWarnAboutBadClass[componentName] = true;\n      }\n    }\n\n    if (workInProgress.mode & StrictLegacyMode) {\n      ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, null);\n    }\n\n    setIsRendering(true);\n    ReactCurrentOwner$1.current = workInProgress;\n    value = renderWithHooks(null, workInProgress, Component, props, context, renderLanes);\n    hasId = checkDidRenderIdHook();\n    setIsRendering(false);\n  }\n\n  {\n    markComponentRenderStopped();\n  } // React DevTools reads this flag.\n\n\n  workInProgress.flags |= PerformedWork;\n\n  {\n    // Support for module components is deprecated and is removed behind a flag.\n    // Whether or not it would crash later, we want to show a good message in DEV first.\n    if (typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {\n      var _componentName = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutModulePatternComponent[_componentName]) {\n        error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + \"If you can't use a class try assigning the prototype on the function as a workaround. \" + \"`%s.prototype = React.Component.prototype`. Don't use an arrow function since it \" + 'cannot be called with `new` by React.', _componentName, _componentName, _componentName);\n\n        didWarnAboutModulePatternComponent[_componentName] = true;\n      }\n    }\n  }\n\n  if ( // Run these checks in production only if the flag is off.\n  // Eventually we'll delete this branch altogether.\n   typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {\n    {\n      var _componentName2 = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutModulePatternComponent[_componentName2]) {\n        error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + \"If you can't use a class try assigning the prototype on the function as a workaround. \" + \"`%s.prototype = React.Component.prototype`. Don't use an arrow function since it \" + 'cannot be called with `new` by React.', _componentName2, _componentName2, _componentName2);\n\n        didWarnAboutModulePatternComponent[_componentName2] = true;\n      }\n    } // Proceed under the assumption that this is a class instance\n\n\n    workInProgress.tag = ClassComponent; // Throw out any hooks that were used.\n\n    workInProgress.memoizedState = null;\n    workInProgress.updateQueue = null; // Push context providers early to prevent context stack mismatches.\n    // During mounting we don't know the child context yet as the instance doesn't exist.\n    // We will invalidate the child context in finishClassComponent() right after rendering.\n\n    var hasContext = false;\n\n    if (isContextProvider(Component)) {\n      hasContext = true;\n      pushContextProvider(workInProgress);\n    } else {\n      hasContext = false;\n    }\n\n    workInProgress.memoizedState = value.state !== null && value.state !== undefined ? value.state : null;\n    initializeUpdateQueue(workInProgress);\n    adoptClassInstance(workInProgress, value);\n    mountClassInstance(workInProgress, Component, props, renderLanes);\n    return finishClassComponent(null, workInProgress, Component, true, hasContext, renderLanes);\n  } else {\n    // Proceed under the assumption that this is a function component\n    workInProgress.tag = FunctionComponent;\n\n    {\n\n      if ( workInProgress.mode & StrictLegacyMode) {\n        setIsStrictModeForDevtools(true);\n\n        try {\n          value = renderWithHooks(null, workInProgress, Component, props, context, renderLanes);\n          hasId = checkDidRenderIdHook();\n        } finally {\n          setIsStrictModeForDevtools(false);\n        }\n      }\n    }\n\n    if (getIsHydrating() && hasId) {\n      pushMaterializedTreeId(workInProgress);\n    }\n\n    reconcileChildren(null, workInProgress, value, renderLanes);\n\n    {\n      validateFunctionComponentInDev(workInProgress, Component);\n    }\n\n    return workInProgress.child;\n  }\n}\n\nfunction validateFunctionComponentInDev(workInProgress, Component) {\n  {\n    if (Component) {\n      if (Component.childContextTypes) {\n        error('%s(...): childContextTypes cannot be defined on a function component.', Component.displayName || Component.name || 'Component');\n      }\n    }\n\n    if (workInProgress.ref !== null) {\n      var info = '';\n      var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n\n      if (ownerName) {\n        info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n      }\n\n      var warningKey = ownerName || '';\n      var debugSource = workInProgress._debugSource;\n\n      if (debugSource) {\n        warningKey = debugSource.fileName + ':' + debugSource.lineNumber;\n      }\n\n      if (!didWarnAboutFunctionRefs[warningKey]) {\n        didWarnAboutFunctionRefs[warningKey] = true;\n\n        error('Function components cannot be given refs. ' + 'Attempts to access this ref will fail. ' + 'Did you mean to use React.forwardRef()?%s', info);\n      }\n    }\n\n    if ( Component.defaultProps !== undefined) {\n      var componentName = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutDefaultPropsOnFunctionComponent[componentName]) {\n        error('%s: Support for defaultProps will be removed from function components ' + 'in a future major release. Use JavaScript default parameters instead.', componentName);\n\n        didWarnAboutDefaultPropsOnFunctionComponent[componentName] = true;\n      }\n    }\n\n    if (typeof Component.getDerivedStateFromProps === 'function') {\n      var _componentName3 = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3]) {\n        error('%s: Function components do not support getDerivedStateFromProps.', _componentName3);\n\n        didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3] = true;\n      }\n    }\n\n    if (typeof Component.contextType === 'object' && Component.contextType !== null) {\n      var _componentName4 = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutContextTypeOnFunctionComponent[_componentName4]) {\n        error('%s: Function components do not support contextType.', _componentName4);\n\n        didWarnAboutContextTypeOnFunctionComponent[_componentName4] = true;\n      }\n    }\n  }\n}\n\nvar SUSPENDED_MARKER = {\n  dehydrated: null,\n  treeContext: null,\n  retryLane: NoLane\n};\n\nfunction mountSuspenseOffscreenState(renderLanes) {\n  return {\n    baseLanes: renderLanes,\n    cachePool: getSuspendedCache(),\n    transitions: null\n  };\n}\n\nfunction updateSuspenseOffscreenState(prevOffscreenState, renderLanes) {\n  var cachePool = null;\n\n  return {\n    baseLanes: mergeLanes(prevOffscreenState.baseLanes, renderLanes),\n    cachePool: cachePool,\n    transitions: prevOffscreenState.transitions\n  };\n} // TODO: Probably should inline this back\n\n\nfunction shouldRemainOnFallback(suspenseContext, current, workInProgress, renderLanes) {\n  // If we're already showing a fallback, there are cases where we need to\n  // remain on that fallback regardless of whether the content has resolved.\n  // For example, SuspenseList coordinates when nested content appears.\n  if (current !== null) {\n    var suspenseState = current.memoizedState;\n\n    if (suspenseState === null) {\n      // Currently showing content. Don't hide it, even if ForceSuspenseFallback\n      // is true. More precise name might be \"ForceRemainSuspenseFallback\".\n      // Note: This is a factoring smell. Can't remain on a fallback if there's\n      // no fallback to remain on.\n      return false;\n    }\n  } // Not currently showing content. Consult the Suspense context.\n\n\n  return hasSuspenseContext(suspenseContext, ForceSuspenseFallback);\n}\n\nfunction getRemainingWorkInPrimaryTree(current, renderLanes) {\n  // TODO: Should not remove render lanes that were pinged during this render\n  return removeLanes(current.childLanes, renderLanes);\n}\n\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps; // This is used by DevTools to force a boundary to suspend.\n\n  {\n    if (shouldSuspend(workInProgress)) {\n      workInProgress.flags |= DidCapture;\n    }\n  }\n\n  var suspenseContext = suspenseStackCursor.current;\n  var showFallback = false;\n  var didSuspend = (workInProgress.flags & DidCapture) !== NoFlags;\n\n  if (didSuspend || shouldRemainOnFallback(suspenseContext, current)) {\n    // Something in this boundary's subtree already suspended. Switch to\n    // rendering the fallback children.\n    showFallback = true;\n    workInProgress.flags &= ~DidCapture;\n  } else {\n    // Attempting the main content\n    if (current === null || current.memoizedState !== null) {\n      // This is a new mount or this boundary is already showing a fallback state.\n      // Mark this subtree context as having at least one invisible parent that could\n      // handle the fallback state.\n      // Avoided boundaries are not considered since they cannot handle preferred fallback states.\n      {\n        suspenseContext = addSubtreeSuspenseContext(suspenseContext, InvisibleParentSuspenseContext);\n      }\n    }\n  }\n\n  suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n  pushSuspenseContext(workInProgress, suspenseContext); // OK, the next part is confusing. We're about to reconcile the Suspense\n  // boundary's children. This involves some custom reconciliation logic. Two\n  // main reasons this is so complicated.\n  //\n  // First, Legacy Mode has different semantics for backwards compatibility. The\n  // primary tree will commit in an inconsistent state, so when we do the\n  // second pass to render the fallback, we do some exceedingly, uh, clever\n  // hacks to make that not totally break. Like transferring effects and\n  // deletions from hidden tree. In Concurrent Mode, it's much simpler,\n  // because we bailout on the primary tree completely and leave it in its old\n  // state, no effects. Same as what we do for Offscreen (except that\n  // Offscreen doesn't have the first render pass).\n  //\n  // Second is hydration. During hydration, the Suspense fiber has a slightly\n  // different layout, where the child points to a dehydrated fragment, which\n  // contains the DOM rendered by the server.\n  //\n  // Third, even if you set all that aside, Suspense is like error boundaries in\n  // that we first we try to render one tree, and if that fails, we render again\n  // and switch to a different tree. Like a try/catch block. So we have to track\n  // which branch we're currently rendering. Ideally we would model this using\n  // a stack.\n\n  if (current === null) {\n    // Initial mount\n    // Special path for hydration\n    // If we're currently hydrating, try to hydrate this boundary.\n    tryToClaimNextHydratableInstance(workInProgress); // This could've been a dehydrated suspense component.\n\n    var suspenseState = workInProgress.memoizedState;\n\n    if (suspenseState !== null) {\n      var dehydrated = suspenseState.dehydrated;\n\n      if (dehydrated !== null) {\n        return mountDehydratedSuspenseComponent(workInProgress, dehydrated);\n      }\n    }\n\n    var nextPrimaryChildren = nextProps.children;\n    var nextFallbackChildren = nextProps.fallback;\n\n    if (showFallback) {\n      var fallbackFragment = mountSuspenseFallbackChildren(workInProgress, nextPrimaryChildren, nextFallbackChildren, renderLanes);\n      var primaryChildFragment = workInProgress.child;\n      primaryChildFragment.memoizedState = mountSuspenseOffscreenState(renderLanes);\n      workInProgress.memoizedState = SUSPENDED_MARKER;\n\n      return fallbackFragment;\n    } else {\n      return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren);\n    }\n  } else {\n    // This is an update.\n    // Special path for hydration\n    var prevState = current.memoizedState;\n\n    if (prevState !== null) {\n      var _dehydrated = prevState.dehydrated;\n\n      if (_dehydrated !== null) {\n        return updateDehydratedSuspenseComponent(current, workInProgress, didSuspend, nextProps, _dehydrated, prevState, renderLanes);\n      }\n    }\n\n    if (showFallback) {\n      var _nextFallbackChildren = nextProps.fallback;\n      var _nextPrimaryChildren = nextProps.children;\n      var fallbackChildFragment = updateSuspenseFallbackChildren(current, workInProgress, _nextPrimaryChildren, _nextFallbackChildren, renderLanes);\n      var _primaryChildFragment2 = workInProgress.child;\n      var prevOffscreenState = current.child.memoizedState;\n      _primaryChildFragment2.memoizedState = prevOffscreenState === null ? mountSuspenseOffscreenState(renderLanes) : updateSuspenseOffscreenState(prevOffscreenState, renderLanes);\n\n      _primaryChildFragment2.childLanes = getRemainingWorkInPrimaryTree(current, renderLanes);\n      workInProgress.memoizedState = SUSPENDED_MARKER;\n      return fallbackChildFragment;\n    } else {\n      var _nextPrimaryChildren2 = nextProps.children;\n\n      var _primaryChildFragment3 = updateSuspensePrimaryChildren(current, workInProgress, _nextPrimaryChildren2, renderLanes);\n\n      workInProgress.memoizedState = null;\n      return _primaryChildFragment3;\n    }\n  }\n}\n\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren, renderLanes) {\n  var mode = workInProgress.mode;\n  var primaryChildProps = {\n    mode: 'visible',\n    children: primaryChildren\n  };\n  var primaryChildFragment = mountWorkInProgressOffscreenFiber(primaryChildProps, mode);\n  primaryChildFragment.return = workInProgress;\n  workInProgress.child = primaryChildFragment;\n  return primaryChildFragment;\n}\n\nfunction mountSuspenseFallbackChildren(workInProgress, primaryChildren, fallbackChildren, renderLanes) {\n  var mode = workInProgress.mode;\n  var progressedPrimaryFragment = workInProgress.child;\n  var primaryChildProps = {\n    mode: 'hidden',\n    children: primaryChildren\n  };\n  var primaryChildFragment;\n  var fallbackChildFragment;\n\n  if ((mode & ConcurrentMode) === NoMode && progressedPrimaryFragment !== null) {\n    // In legacy mode, we commit the primary tree as if it successfully\n    // completed, even though it's in an inconsistent state.\n    primaryChildFragment = progressedPrimaryFragment;\n    primaryChildFragment.childLanes = NoLanes;\n    primaryChildFragment.pendingProps = primaryChildProps;\n\n    if ( workInProgress.mode & ProfileMode) {\n      // Reset the durations from the first pass so they aren't included in the\n      // final amounts. This seems counterintuitive, since we're intentionally\n      // not measuring part of the render phase, but this makes it match what we\n      // do in Concurrent Mode.\n      primaryChildFragment.actualDuration = 0;\n      primaryChildFragment.actualStartTime = -1;\n      primaryChildFragment.selfBaseDuration = 0;\n      primaryChildFragment.treeBaseDuration = 0;\n    }\n\n    fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null);\n  } else {\n    primaryChildFragment = mountWorkInProgressOffscreenFiber(primaryChildProps, mode);\n    fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null);\n  }\n\n  primaryChildFragment.return = workInProgress;\n  fallbackChildFragment.return = workInProgress;\n  primaryChildFragment.sibling = fallbackChildFragment;\n  workInProgress.child = primaryChildFragment;\n  return fallbackChildFragment;\n}\n\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode, renderLanes) {\n  // The props argument to `createFiberFromOffscreen` is `any` typed, so we use\n  // this wrapper function to constrain it.\n  return createFiberFromOffscreen(offscreenProps, mode, NoLanes, null);\n}\n\nfunction updateWorkInProgressOffscreenFiber(current, offscreenProps) {\n  // The props argument to `createWorkInProgress` is `any` typed, so we use this\n  // wrapper function to constrain it.\n  return createWorkInProgress(current, offscreenProps);\n}\n\nfunction updateSuspensePrimaryChildren(current, workInProgress, primaryChildren, renderLanes) {\n  var currentPrimaryChildFragment = current.child;\n  var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;\n  var primaryChildFragment = updateWorkInProgressOffscreenFiber(currentPrimaryChildFragment, {\n    mode: 'visible',\n    children: primaryChildren\n  });\n\n  if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n    primaryChildFragment.lanes = renderLanes;\n  }\n\n  primaryChildFragment.return = workInProgress;\n  primaryChildFragment.sibling = null;\n\n  if (currentFallbackChildFragment !== null) {\n    // Delete the fallback child fragment\n    var deletions = workInProgress.deletions;\n\n    if (deletions === null) {\n      workInProgress.deletions = [currentFallbackChildFragment];\n      workInProgress.flags |= ChildDeletion;\n    } else {\n      deletions.push(currentFallbackChildFragment);\n    }\n  }\n\n  workInProgress.child = primaryChildFragment;\n  return primaryChildFragment;\n}\n\nfunction updateSuspenseFallbackChildren(current, workInProgress, primaryChildren, fallbackChildren, renderLanes) {\n  var mode = workInProgress.mode;\n  var currentPrimaryChildFragment = current.child;\n  var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;\n  var primaryChildProps = {\n    mode: 'hidden',\n    children: primaryChildren\n  };\n  var primaryChildFragment;\n\n  if ( // In legacy mode, we commit the primary tree as if it successfully\n  // completed, even though it's in an inconsistent state.\n  (mode & ConcurrentMode) === NoMode && // Make sure we're on the second pass, i.e. the primary child fragment was\n  // already cloned. In legacy mode, the only case where this isn't true is\n  // when DevTools forces us to display a fallback; we skip the first render\n  // pass entirely and go straight to rendering the fallback. (In Concurrent\n  // Mode, SuspenseList can also trigger this scenario, but this is a legacy-\n  // only codepath.)\n  workInProgress.child !== currentPrimaryChildFragment) {\n    var progressedPrimaryFragment = workInProgress.child;\n    primaryChildFragment = progressedPrimaryFragment;\n    primaryChildFragment.childLanes = NoLanes;\n    primaryChildFragment.pendingProps = primaryChildProps;\n\n    if ( workInProgress.mode & ProfileMode) {\n      // Reset the durations from the first pass so they aren't included in the\n      // final amounts. This seems counterintuitive, since we're intentionally\n      // not measuring part of the render phase, but this makes it match what we\n      // do in Concurrent Mode.\n      primaryChildFragment.actualDuration = 0;\n      primaryChildFragment.actualStartTime = -1;\n      primaryChildFragment.selfBaseDuration = currentPrimaryChildFragment.selfBaseDuration;\n      primaryChildFragment.treeBaseDuration = currentPrimaryChildFragment.treeBaseDuration;\n    } // The fallback fiber was added as a deletion during the first pass.\n    // However, since we're going to remain on the fallback, we no longer want\n    // to delete it.\n\n\n    workInProgress.deletions = null;\n  } else {\n    primaryChildFragment = updateWorkInProgressOffscreenFiber(currentPrimaryChildFragment, primaryChildProps); // Since we're reusing a current tree, we need to reuse the flags, too.\n    // (We don't do this in legacy mode, because in legacy mode we don't re-use\n    // the current tree; see previous branch.)\n\n    primaryChildFragment.subtreeFlags = currentPrimaryChildFragment.subtreeFlags & StaticMask;\n  }\n\n  var fallbackChildFragment;\n\n  if (currentFallbackChildFragment !== null) {\n    fallbackChildFragment = createWorkInProgress(currentFallbackChildFragment, fallbackChildren);\n  } else {\n    fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null); // Needs a placement effect because the parent (the Suspense boundary) already\n    // mounted but this is a new fiber.\n\n    fallbackChildFragment.flags |= Placement;\n  }\n\n  fallbackChildFragment.return = workInProgress;\n  primaryChildFragment.return = workInProgress;\n  primaryChildFragment.sibling = fallbackChildFragment;\n  workInProgress.child = primaryChildFragment;\n  return fallbackChildFragment;\n}\n\nfunction retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, recoverableError) {\n  // Falling back to client rendering. Because this has performance\n  // implications, it's considered a recoverable error, even though the user\n  // likely won't observe anything wrong with the UI.\n  //\n  // The error is passed in as an argument to enforce that every caller provide\n  // a custom message, or explicitly opt out (currently the only path that opts\n  // out is legacy mode; every concurrent path provides an error).\n  if (recoverableError !== null) {\n    queueHydrationError(recoverableError);\n  } // This will add the old fiber to the deletion list\n\n\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes); // We're now not suspended nor dehydrated.\n\n  var nextProps = workInProgress.pendingProps;\n  var primaryChildren = nextProps.children;\n  var primaryChildFragment = mountSuspensePrimaryChildren(workInProgress, primaryChildren); // Needs a placement effect because the parent (the Suspense boundary) already\n  // mounted but this is a new fiber.\n\n  primaryChildFragment.flags |= Placement;\n  workInProgress.memoizedState = null;\n  return primaryChildFragment;\n}\n\nfunction mountSuspenseFallbackAfterRetryWithoutHydrating(current, workInProgress, primaryChildren, fallbackChildren, renderLanes) {\n  var fiberMode = workInProgress.mode;\n  var primaryChildProps = {\n    mode: 'visible',\n    children: primaryChildren\n  };\n  var primaryChildFragment = mountWorkInProgressOffscreenFiber(primaryChildProps, fiberMode);\n  var fallbackChildFragment = createFiberFromFragment(fallbackChildren, fiberMode, renderLanes, null); // Needs a placement effect because the parent (the Suspense\n  // boundary) already mounted but this is a new fiber.\n\n  fallbackChildFragment.flags |= Placement;\n  primaryChildFragment.return = workInProgress;\n  fallbackChildFragment.return = workInProgress;\n  primaryChildFragment.sibling = fallbackChildFragment;\n  workInProgress.child = primaryChildFragment;\n\n  if ((workInProgress.mode & ConcurrentMode) !== NoMode) {\n    // We will have dropped the effect list which contains the\n    // deletion. We need to reconcile to delete the current child.\n    reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  }\n\n  return fallbackChildFragment;\n}\n\nfunction mountDehydratedSuspenseComponent(workInProgress, suspenseInstance, renderLanes) {\n  // During the first pass, we'll bail out and not drill into the children.\n  // Instead, we'll leave the content in place and try to hydrate it later.\n  if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n    {\n      error('Cannot hydrate Suspense in legacy mode. Switch from ' + 'ReactDOM.hydrate(element, container) to ' + 'ReactDOMClient.hydrateRoot(container, <App />)' + '.render(element) or remove the Suspense components from ' + 'the server rendered components.');\n    }\n\n    workInProgress.lanes = laneToLanes(SyncLane);\n  } else if (isSuspenseInstanceFallback(suspenseInstance)) {\n    // This is a client-only boundary. Since we won't get any content from the server\n    // for this, we need to schedule that at a higher priority based on when it would\n    // have timed out. In theory we could render it in this pass but it would have the\n    // wrong priority associated with it and will prevent hydration of parent path.\n    // Instead, we'll leave work left on it to render it in a separate commit.\n    // TODO This time should be the time at which the server rendered response that is\n    // a parent to this boundary was displayed. However, since we currently don't have\n    // a protocol to transfer that time, we'll just estimate it by using the current\n    // time. This will mean that Suspense timeouts are slightly shifted to later than\n    // they should be.\n    // Schedule a normal pri update to render this content.\n    workInProgress.lanes = laneToLanes(DefaultHydrationLane);\n  } else {\n    // We'll continue hydrating the rest at offscreen priority since we'll already\n    // be showing the right content coming from the server, it is no rush.\n    workInProgress.lanes = laneToLanes(OffscreenLane);\n  }\n\n  return null;\n}\n\nfunction updateDehydratedSuspenseComponent(current, workInProgress, didSuspend, nextProps, suspenseInstance, suspenseState, renderLanes) {\n  if (!didSuspend) {\n    // This is the first render pass. Attempt to hydrate.\n    // We should never be hydrating at this point because it is the first pass,\n    // but after we've already committed once.\n    warnIfHydrating();\n\n    if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n      return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, // TODO: When we delete legacy mode, we should make this error argument\n      // required — every concurrent mode path that causes hydration to\n      // de-opt to client rendering should have an error message.\n      null);\n    }\n\n    if (isSuspenseInstanceFallback(suspenseInstance)) {\n      // This boundary is in a permanent fallback state. In this case, we'll never\n      // get an update and we'll never be able to hydrate the final content. Let's just try the\n      // client side render instead.\n      var digest, message, stack;\n\n      {\n        var _getSuspenseInstanceF = getSuspenseInstanceFallbackErrorDetails(suspenseInstance);\n\n        digest = _getSuspenseInstanceF.digest;\n        message = _getSuspenseInstanceF.message;\n        stack = _getSuspenseInstanceF.stack;\n      }\n\n      var error;\n\n      if (message) {\n        // eslint-disable-next-line react-internal/prod-error-codes\n        error = new Error(message);\n      } else {\n        error = new Error('The server could not finish this Suspense boundary, likely ' + 'due to an error during server rendering. Switched to ' + 'client rendering.');\n      }\n\n      var capturedValue = createCapturedValue(error, digest, stack);\n      return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, capturedValue);\n    }\n    // any context has changed, we need to treat is as if the input might have changed.\n\n\n    var hasContextChanged = includesSomeLane(renderLanes, current.childLanes);\n\n    if (didReceiveUpdate || hasContextChanged) {\n      // This boundary has changed since the first render. This means that we are now unable to\n      // hydrate it. We might still be able to hydrate it using a higher priority lane.\n      var root = getWorkInProgressRoot();\n\n      if (root !== null) {\n        var attemptHydrationAtLane = getBumpedLaneForHydration(root, renderLanes);\n\n        if (attemptHydrationAtLane !== NoLane && attemptHydrationAtLane !== suspenseState.retryLane) {\n          // Intentionally mutating since this render will get interrupted. This\n          // is one of the very rare times where we mutate the current tree\n          // during the render phase.\n          suspenseState.retryLane = attemptHydrationAtLane; // TODO: Ideally this would inherit the event time of the current render\n\n          var eventTime = NoTimestamp;\n          enqueueConcurrentRenderForLane(current, attemptHydrationAtLane);\n          scheduleUpdateOnFiber(root, current, attemptHydrationAtLane, eventTime);\n        }\n      } // If we have scheduled higher pri work above, this will probably just abort the render\n      // since we now have higher priority work, but in case it doesn't, we need to prepare to\n      // render something, if we time out. Even if that requires us to delete everything and\n      // skip hydration.\n      // Delay having to do this as long as the suspense timeout allows us.\n\n\n      renderDidSuspendDelayIfPossible();\n\n      var _capturedValue = createCapturedValue(new Error('This Suspense boundary received an update before it finished ' + 'hydrating. This caused the boundary to switch to client rendering. ' + 'The usual way to fix this is to wrap the original update ' + 'in startTransition.'));\n\n      return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, _capturedValue);\n    } else if (isSuspenseInstancePending(suspenseInstance)) {\n      // This component is still pending more data from the server, so we can't hydrate its\n      // content. We treat it as if this component suspended itself. It might seem as if\n      // we could just try to render it client-side instead. However, this will perform a\n      // lot of unnecessary work and is unlikely to complete since it often will suspend\n      // on missing data anyway. Additionally, the server might be able to render more\n      // than we can on the client yet. In that case we'd end up with more fallback states\n      // on the client than if we just leave it alone. If the server times out or errors\n      // these should update this boundary to the permanent Fallback state instead.\n      // Mark it as having captured (i.e. suspended).\n      workInProgress.flags |= DidCapture; // Leave the child in place. I.e. the dehydrated fragment.\n\n      workInProgress.child = current.child; // Register a callback to retry this boundary once the server has sent the result.\n\n      var retry = retryDehydratedSuspenseBoundary.bind(null, current);\n      registerSuspenseInstanceRetry(suspenseInstance, retry);\n      return null;\n    } else {\n      // This is the first attempt.\n      reenterHydrationStateFromDehydratedSuspenseInstance(workInProgress, suspenseInstance, suspenseState.treeContext);\n      var primaryChildren = nextProps.children;\n      var primaryChildFragment = mountSuspensePrimaryChildren(workInProgress, primaryChildren); // Mark the children as hydrating. This is a fast path to know whether this\n      // tree is part of a hydrating tree. This is used to determine if a child\n      // node has fully mounted yet, and for scheduling event replaying.\n      // Conceptually this is similar to Placement in that a new subtree is\n      // inserted into the React tree here. It just happens to not need DOM\n      // mutations because it already exists.\n\n      primaryChildFragment.flags |= Hydrating;\n      return primaryChildFragment;\n    }\n  } else {\n    // This is the second render pass. We already attempted to hydrated, but\n    // something either suspended or errored.\n    if (workInProgress.flags & ForceClientRender) {\n      // Something errored during hydration. Try again without hydrating.\n      workInProgress.flags &= ~ForceClientRender;\n\n      var _capturedValue2 = createCapturedValue(new Error('There was an error while hydrating this Suspense boundary. ' + 'Switched to client rendering.'));\n\n      return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, _capturedValue2);\n    } else if (workInProgress.memoizedState !== null) {\n      // Something suspended and we should still be in dehydrated mode.\n      // Leave the existing child in place.\n      workInProgress.child = current.child; // The dehydrated completion pass expects this flag to be there\n      // but the normal suspense pass doesn't.\n\n      workInProgress.flags |= DidCapture;\n      return null;\n    } else {\n      // Suspended but we should no longer be in dehydrated mode.\n      // Therefore we now have to render the fallback.\n      var nextPrimaryChildren = nextProps.children;\n      var nextFallbackChildren = nextProps.fallback;\n      var fallbackChildFragment = mountSuspenseFallbackAfterRetryWithoutHydrating(current, workInProgress, nextPrimaryChildren, nextFallbackChildren, renderLanes);\n      var _primaryChildFragment4 = workInProgress.child;\n      _primaryChildFragment4.memoizedState = mountSuspenseOffscreenState(renderLanes);\n      workInProgress.memoizedState = SUSPENDED_MARKER;\n      return fallbackChildFragment;\n    }\n  }\n}\n\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n  fiber.lanes = mergeLanes(fiber.lanes, renderLanes);\n  var alternate = fiber.alternate;\n\n  if (alternate !== null) {\n    alternate.lanes = mergeLanes(alternate.lanes, renderLanes);\n  }\n\n  scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\n\nfunction propagateSuspenseContextChange(workInProgress, firstChild, renderLanes) {\n  // Mark any Suspense boundaries with fallbacks as having work to do.\n  // If they were previously forced into fallbacks, they may now be able\n  // to unblock.\n  var node = firstChild;\n\n  while (node !== null) {\n    if (node.tag === SuspenseComponent) {\n      var state = node.memoizedState;\n\n      if (state !== null) {\n        scheduleSuspenseWorkOnFiber(node, renderLanes, workInProgress);\n      }\n    } else if (node.tag === SuspenseListComponent) {\n      // If the tail is hidden there might not be an Suspense boundaries\n      // to schedule work on. In this case we have to schedule it on the\n      // list itself.\n      // We don't have to traverse to the children of the list since\n      // the list will propagate the change when it rerenders.\n      scheduleSuspenseWorkOnFiber(node, renderLanes, workInProgress);\n    } else if (node.child !== null) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n\n    if (node === workInProgress) {\n      return;\n    }\n\n    while (node.sibling === null) {\n      if (node.return === null || node.return === workInProgress) {\n        return;\n      }\n\n      node = node.return;\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n}\n\nfunction findLastContentRow(firstChild) {\n  // This is going to find the last row among these children that is already\n  // showing content on the screen, as opposed to being in fallback state or\n  // new. If a row has multiple Suspense boundaries, any of them being in the\n  // fallback state, counts as the whole row being in a fallback state.\n  // Note that the \"rows\" will be workInProgress, but any nested children\n  // will still be current since we haven't rendered them yet. The mounted\n  // order may not be the same as the new order. We use the new order.\n  var row = firstChild;\n  var lastContentRow = null;\n\n  while (row !== null) {\n    var currentRow = row.alternate; // New rows can't be content rows.\n\n    if (currentRow !== null && findFirstSuspended(currentRow) === null) {\n      lastContentRow = row;\n    }\n\n    row = row.sibling;\n  }\n\n  return lastContentRow;\n}\n\nfunction validateRevealOrder(revealOrder) {\n  {\n    if (revealOrder !== undefined && revealOrder !== 'forwards' && revealOrder !== 'backwards' && revealOrder !== 'together' && !didWarnAboutRevealOrder[revealOrder]) {\n      didWarnAboutRevealOrder[revealOrder] = true;\n\n      if (typeof revealOrder === 'string') {\n        switch (revealOrder.toLowerCase()) {\n          case 'together':\n          case 'forwards':\n          case 'backwards':\n            {\n              error('\"%s\" is not a valid value for revealOrder on <SuspenseList />. ' + 'Use lowercase \"%s\" instead.', revealOrder, revealOrder.toLowerCase());\n\n              break;\n            }\n\n          case 'forward':\n          case 'backward':\n            {\n              error('\"%s\" is not a valid value for revealOrder on <SuspenseList />. ' + 'React uses the -s suffix in the spelling. Use \"%ss\" instead.', revealOrder, revealOrder.toLowerCase());\n\n              break;\n            }\n\n          default:\n            error('\"%s\" is not a supported revealOrder on <SuspenseList />. ' + 'Did you mean \"together\", \"forwards\" or \"backwards\"?', revealOrder);\n\n            break;\n        }\n      } else {\n        error('%s is not a supported value for revealOrder on <SuspenseList />. ' + 'Did you mean \"together\", \"forwards\" or \"backwards\"?', revealOrder);\n      }\n    }\n  }\n}\n\nfunction validateTailOptions(tailMode, revealOrder) {\n  {\n    if (tailMode !== undefined && !didWarnAboutTailOptions[tailMode]) {\n      if (tailMode !== 'collapsed' && tailMode !== 'hidden') {\n        didWarnAboutTailOptions[tailMode] = true;\n\n        error('\"%s\" is not a supported value for tail on <SuspenseList />. ' + 'Did you mean \"collapsed\" or \"hidden\"?', tailMode);\n      } else if (revealOrder !== 'forwards' && revealOrder !== 'backwards') {\n        didWarnAboutTailOptions[tailMode] = true;\n\n        error('<SuspenseList tail=\"%s\" /> is only valid if revealOrder is ' + '\"forwards\" or \"backwards\". ' + 'Did you mean to specify revealOrder=\"forwards\"?', tailMode);\n      }\n    }\n  }\n}\n\nfunction validateSuspenseListNestedChild(childSlot, index) {\n  {\n    var isAnArray = isArray(childSlot);\n    var isIterable = !isAnArray && typeof getIteratorFn(childSlot) === 'function';\n\n    if (isAnArray || isIterable) {\n      var type = isAnArray ? 'array' : 'iterable';\n\n      error('A nested %s was passed to row #%s in <SuspenseList />. Wrap it in ' + 'an additional SuspenseList to configure its revealOrder: ' + '<SuspenseList revealOrder=...> ... ' + '<SuspenseList revealOrder=...>{%s}</SuspenseList> ... ' + '</SuspenseList>', type, index, type);\n\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction validateSuspenseListChildren(children, revealOrder) {\n  {\n    if ((revealOrder === 'forwards' || revealOrder === 'backwards') && children !== undefined && children !== null && children !== false) {\n      if (isArray(children)) {\n        for (var i = 0; i < children.length; i++) {\n          if (!validateSuspenseListNestedChild(children[i], i)) {\n            return;\n          }\n        }\n      } else {\n        var iteratorFn = getIteratorFn(children);\n\n        if (typeof iteratorFn === 'function') {\n          var childrenIterator = iteratorFn.call(children);\n\n          if (childrenIterator) {\n            var step = childrenIterator.next();\n            var _i = 0;\n\n            for (; !step.done; step = childrenIterator.next()) {\n              if (!validateSuspenseListNestedChild(step.value, _i)) {\n                return;\n              }\n\n              _i++;\n            }\n          }\n        } else {\n          error('A single row was passed to a <SuspenseList revealOrder=\"%s\" />. ' + 'This is not useful since it needs multiple rows. ' + 'Did you mean to pass multiple children or an array?', revealOrder);\n        }\n      }\n    }\n  }\n}\n\nfunction initSuspenseListRenderState(workInProgress, isBackwards, tail, lastContentRow, tailMode) {\n  var renderState = workInProgress.memoizedState;\n\n  if (renderState === null) {\n    workInProgress.memoizedState = {\n      isBackwards: isBackwards,\n      rendering: null,\n      renderingStartTime: 0,\n      last: lastContentRow,\n      tail: tail,\n      tailMode: tailMode\n    };\n  } else {\n    // We can reuse the existing object from previous renders.\n    renderState.isBackwards = isBackwards;\n    renderState.rendering = null;\n    renderState.renderingStartTime = 0;\n    renderState.last = lastContentRow;\n    renderState.tail = tail;\n    renderState.tailMode = tailMode;\n  }\n} // This can end up rendering this component multiple passes.\n// The first pass splits the children fibers into two sets. A head and tail.\n// We first render the head. If anything is in fallback state, we do another\n// pass through beginWork to rerender all children (including the tail) with\n// the force suspend context. If the first render didn't have anything in\n// in fallback state. Then we render each row in the tail one-by-one.\n// That happens in the completeWork phase without going back to beginWork.\n\n\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps;\n  var revealOrder = nextProps.revealOrder;\n  var tailMode = nextProps.tail;\n  var newChildren = nextProps.children;\n  validateRevealOrder(revealOrder);\n  validateTailOptions(tailMode, revealOrder);\n  validateSuspenseListChildren(newChildren, revealOrder);\n  reconcileChildren(current, workInProgress, newChildren, renderLanes);\n  var suspenseContext = suspenseStackCursor.current;\n  var shouldForceFallback = hasSuspenseContext(suspenseContext, ForceSuspenseFallback);\n\n  if (shouldForceFallback) {\n    suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);\n    workInProgress.flags |= DidCapture;\n  } else {\n    var didSuspendBefore = current !== null && (current.flags & DidCapture) !== NoFlags;\n\n    if (didSuspendBefore) {\n      // If we previously forced a fallback, we need to schedule work\n      // on any nested boundaries to let them know to try to render\n      // again. This is the same as context updating.\n      propagateSuspenseContextChange(workInProgress, workInProgress.child, renderLanes);\n    }\n\n    suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n  }\n\n  pushSuspenseContext(workInProgress, suspenseContext);\n\n  if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n    // In legacy mode, SuspenseList doesn't work so we just\n    // use make it a noop by treating it as the default revealOrder.\n    workInProgress.memoizedState = null;\n  } else {\n    switch (revealOrder) {\n      case 'forwards':\n        {\n          var lastContentRow = findLastContentRow(workInProgress.child);\n          var tail;\n\n          if (lastContentRow === null) {\n            // The whole list is part of the tail.\n            // TODO: We could fast path by just rendering the tail now.\n            tail = workInProgress.child;\n            workInProgress.child = null;\n          } else {\n            // Disconnect the tail rows after the content row.\n            // We're going to render them separately later.\n            tail = lastContentRow.sibling;\n            lastContentRow.sibling = null;\n          }\n\n          initSuspenseListRenderState(workInProgress, false, // isBackwards\n          tail, lastContentRow, tailMode);\n          break;\n        }\n\n      case 'backwards':\n        {\n          // We're going to find the first row that has existing content.\n          // At the same time we're going to reverse the list of everything\n          // we pass in the meantime. That's going to be our tail in reverse\n          // order.\n          var _tail = null;\n          var row = workInProgress.child;\n          workInProgress.child = null;\n\n          while (row !== null) {\n            var currentRow = row.alternate; // New rows can't be content rows.\n\n            if (currentRow !== null && findFirstSuspended(currentRow) === null) {\n              // This is the beginning of the main content.\n              workInProgress.child = row;\n              break;\n            }\n\n            var nextRow = row.sibling;\n            row.sibling = _tail;\n            _tail = row;\n            row = nextRow;\n          } // TODO: If workInProgress.child is null, we can continue on the tail immediately.\n\n\n          initSuspenseListRenderState(workInProgress, true, // isBackwards\n          _tail, null, // last\n          tailMode);\n          break;\n        }\n\n      case 'together':\n        {\n          initSuspenseListRenderState(workInProgress, false, // isBackwards\n          null, // tail\n          null, // last\n          undefined);\n          break;\n        }\n\n      default:\n        {\n          // The default reveal order is the same as not having\n          // a boundary.\n          workInProgress.memoizedState = null;\n        }\n    }\n  }\n\n  return workInProgress.child;\n}\n\nfunction updatePortalComponent(current, workInProgress, renderLanes) {\n  pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n  var nextChildren = workInProgress.pendingProps;\n\n  if (current === null) {\n    // Portals are special because we don't append the children during mount\n    // but at commit. Therefore we need to track insertions which the normal\n    // flow doesn't do during mount. This doesn't happen at the root because\n    // the root always starts with a \"current\" with a null child.\n    // TODO: Consider unifying this with how the root works.\n    workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderLanes);\n  } else {\n    reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  }\n\n  return workInProgress.child;\n}\n\nvar hasWarnedAboutUsingNoValuePropOnContextProvider = false;\n\nfunction updateContextProvider(current, workInProgress, renderLanes) {\n  var providerType = workInProgress.type;\n  var context = providerType._context;\n  var newProps = workInProgress.pendingProps;\n  var oldProps = workInProgress.memoizedProps;\n  var newValue = newProps.value;\n\n  {\n    if (!('value' in newProps)) {\n      if (!hasWarnedAboutUsingNoValuePropOnContextProvider) {\n        hasWarnedAboutUsingNoValuePropOnContextProvider = true;\n\n        error('The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?');\n      }\n    }\n\n    var providerPropTypes = workInProgress.type.propTypes;\n\n    if (providerPropTypes) {\n      checkPropTypes(providerPropTypes, newProps, 'prop', 'Context.Provider');\n    }\n  }\n\n  pushProvider(workInProgress, context, newValue);\n\n  {\n    if (oldProps !== null) {\n      var oldValue = oldProps.value;\n\n      if (objectIs(oldValue, newValue)) {\n        // No change. Bailout early if children are the same.\n        if (oldProps.children === newProps.children && !hasContextChanged()) {\n          return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n        }\n      } else {\n        // The context value changed. Search for matching consumers and schedule\n        // them to update.\n        propagateContextChange(workInProgress, context, renderLanes);\n      }\n    }\n  }\n\n  var newChildren = newProps.children;\n  reconcileChildren(current, workInProgress, newChildren, renderLanes);\n  return workInProgress.child;\n}\n\nvar hasWarnedAboutUsingContextAsConsumer = false;\n\nfunction updateContextConsumer(current, workInProgress, renderLanes) {\n  var context = workInProgress.type; // The logic below for Context differs depending on PROD or DEV mode. In\n  // DEV mode, we create a separate object for Context.Consumer that acts\n  // like a proxy to Context. This proxy object adds unnecessary code in PROD\n  // so we use the old behaviour (Context.Consumer references Context) to\n  // reduce size and overhead. The separate object references context via\n  // a property called \"_context\", which also gives us the ability to check\n  // in DEV mode if this property exists or not and warn if it does not.\n\n  {\n    if (context._context === undefined) {\n      // This may be because it's a Context (rather than a Consumer).\n      // Or it may be because it's older React where they're the same thing.\n      // We only want to warn if we're sure it's a new React.\n      if (context !== context.Consumer) {\n        if (!hasWarnedAboutUsingContextAsConsumer) {\n          hasWarnedAboutUsingContextAsConsumer = true;\n\n          error('Rendering <Context> directly is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n        }\n      }\n    } else {\n      context = context._context;\n    }\n  }\n\n  var newProps = workInProgress.pendingProps;\n  var render = newProps.children;\n\n  {\n    if (typeof render !== 'function') {\n      error('A context consumer was rendered with multiple children, or a child ' + \"that isn't a function. A context consumer expects a single child \" + 'that is a function. If you did pass a function, make sure there ' + 'is no trailing or leading whitespace around it.');\n    }\n  }\n\n  prepareToReadContext(workInProgress, renderLanes);\n  var newValue = readContext(context);\n\n  {\n    markComponentRenderStarted(workInProgress);\n  }\n\n  var newChildren;\n\n  {\n    ReactCurrentOwner$1.current = workInProgress;\n    setIsRendering(true);\n    newChildren = render(newValue);\n    setIsRendering(false);\n  }\n\n  {\n    markComponentRenderStopped();\n  } // React DevTools reads this flag.\n\n\n  workInProgress.flags |= PerformedWork;\n  reconcileChildren(current, workInProgress, newChildren, renderLanes);\n  return workInProgress.child;\n}\n\nfunction markWorkInProgressReceivedUpdate() {\n  didReceiveUpdate = true;\n}\n\nfunction resetSuspendedCurrentOnMountInLegacyMode(current, workInProgress) {\n  if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n    if (current !== null) {\n      // A lazy component only mounts if it suspended inside a non-\n      // concurrent tree, in an inconsistent state. We want to treat it like\n      // a new mount, even though an empty version of it already committed.\n      // Disconnect the alternate pointers.\n      current.alternate = null;\n      workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n      workInProgress.flags |= Placement;\n    }\n  }\n}\n\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n  if (current !== null) {\n    // Reuse previous dependencies\n    workInProgress.dependencies = current.dependencies;\n  }\n\n  {\n    // Don't update \"base\" render times for bailouts.\n    stopProfilerTimerIfRunning();\n  }\n\n  markSkippedUpdateLanes(workInProgress.lanes); // Check if the children have any pending work.\n\n  if (!includesSomeLane(renderLanes, workInProgress.childLanes)) {\n    // The children don't have any work either. We can skip them.\n    // TODO: Once we add back resuming, we should check if the children are\n    // a work-in-progress set. If so, we need to transfer their effects.\n    {\n      return null;\n    }\n  } // This fiber doesn't have work, but its subtree does. Clone the child\n  // fibers and continue.\n\n\n  cloneChildFibers(current, workInProgress);\n  return workInProgress.child;\n}\n\nfunction remountFiber(current, oldWorkInProgress, newWorkInProgress) {\n  {\n    var returnFiber = oldWorkInProgress.return;\n\n    if (returnFiber === null) {\n      // eslint-disable-next-line react-internal/prod-error-codes\n      throw new Error('Cannot swap the root fiber.');\n    } // Disconnect from the old current.\n    // It will get deleted.\n\n\n    current.alternate = null;\n    oldWorkInProgress.alternate = null; // Connect to the new tree.\n\n    newWorkInProgress.index = oldWorkInProgress.index;\n    newWorkInProgress.sibling = oldWorkInProgress.sibling;\n    newWorkInProgress.return = oldWorkInProgress.return;\n    newWorkInProgress.ref = oldWorkInProgress.ref; // Replace the child/sibling pointers above it.\n\n    if (oldWorkInProgress === returnFiber.child) {\n      returnFiber.child = newWorkInProgress;\n    } else {\n      var prevSibling = returnFiber.child;\n\n      if (prevSibling === null) {\n        // eslint-disable-next-line react-internal/prod-error-codes\n        throw new Error('Expected parent to have a child.');\n      }\n\n      while (prevSibling.sibling !== oldWorkInProgress) {\n        prevSibling = prevSibling.sibling;\n\n        if (prevSibling === null) {\n          // eslint-disable-next-line react-internal/prod-error-codes\n          throw new Error('Expected to find the previous sibling.');\n        }\n      }\n\n      prevSibling.sibling = newWorkInProgress;\n    } // Delete the old fiber and place the new one.\n    // Since the old fiber is disconnected, we have to schedule it manually.\n\n\n    var deletions = returnFiber.deletions;\n\n    if (deletions === null) {\n      returnFiber.deletions = [current];\n      returnFiber.flags |= ChildDeletion;\n    } else {\n      deletions.push(current);\n    }\n\n    newWorkInProgress.flags |= Placement; // Restart work from the new fiber.\n\n    return newWorkInProgress;\n  }\n}\n\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n  // Before performing an early bailout, we must check if there are pending\n  // updates or context.\n  var updateLanes = current.lanes;\n\n  if (includesSomeLane(updateLanes, renderLanes)) {\n    return true;\n  } // No pending update, but because context is propagated lazily, we need\n\n  return false;\n}\n\nfunction attemptEarlyBailoutIfNoScheduledUpdate(current, workInProgress, renderLanes) {\n  // This fiber does not have any pending work. Bailout without entering\n  // the begin phase. There's still some bookkeeping we that needs to be done\n  // in this optimized path, mostly pushing stuff onto the stack.\n  switch (workInProgress.tag) {\n    case HostRoot:\n      pushHostRootContext(workInProgress);\n      var root = workInProgress.stateNode;\n\n      resetHydrationState();\n      break;\n\n    case HostComponent:\n      pushHostContext(workInProgress);\n      break;\n\n    case ClassComponent:\n      {\n        var Component = workInProgress.type;\n\n        if (isContextProvider(Component)) {\n          pushContextProvider(workInProgress);\n        }\n\n        break;\n      }\n\n    case HostPortal:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      break;\n\n    case ContextProvider:\n      {\n        var newValue = workInProgress.memoizedProps.value;\n        var context = workInProgress.type._context;\n        pushProvider(workInProgress, context, newValue);\n        break;\n      }\n\n    case Profiler:\n      {\n        // Profiler should only call onRender when one of its descendants actually rendered.\n        var hasChildWork = includesSomeLane(renderLanes, workInProgress.childLanes);\n\n        if (hasChildWork) {\n          workInProgress.flags |= Update;\n        }\n\n        {\n          // Reset effect durations for the next eventual effect phase.\n          // These are reset during render to allow the DevTools commit hook a chance to read them,\n          var stateNode = workInProgress.stateNode;\n          stateNode.effectDuration = 0;\n          stateNode.passiveEffectDuration = 0;\n        }\n      }\n\n      break;\n\n    case SuspenseComponent:\n      {\n        var state = workInProgress.memoizedState;\n\n        if (state !== null) {\n          if (state.dehydrated !== null) {\n            pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current)); // We know that this component will suspend again because if it has\n            // been unsuspended it has committed as a resolved Suspense component.\n            // If it needs to be retried, it should have work scheduled on it.\n\n            workInProgress.flags |= DidCapture; // We should never render the children of a dehydrated boundary until we\n            // upgrade it. We return null instead of bailoutOnAlreadyFinishedWork.\n\n            return null;\n          } // If this boundary is currently timed out, we need to decide\n          // whether to retry the primary children, or to skip over it and\n          // go straight to the fallback. Check the priority of the primary\n          // child fragment.\n\n\n          var primaryChildFragment = workInProgress.child;\n          var primaryChildLanes = primaryChildFragment.childLanes;\n\n          if (includesSomeLane(renderLanes, primaryChildLanes)) {\n            // The primary children have pending work. Use the normal path\n            // to attempt to render the primary children again.\n            return updateSuspenseComponent(current, workInProgress, renderLanes);\n          } else {\n            // The primary child fragment does not have pending work marked\n            // on it\n            pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current)); // The primary children do not have pending work with sufficient\n            // priority. Bailout.\n\n            var child = bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n\n            if (child !== null) {\n              // The fallback children have pending work. Skip over the\n              // primary children and work on the fallback.\n              return child.sibling;\n            } else {\n              // Note: We can return `null` here because we already checked\n              // whether there were nested context consumers, via the call to\n              // `bailoutOnAlreadyFinishedWork` above.\n              return null;\n            }\n          }\n        } else {\n          pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current));\n        }\n\n        break;\n      }\n\n    case SuspenseListComponent:\n      {\n        var didSuspendBefore = (current.flags & DidCapture) !== NoFlags;\n\n        var _hasChildWork = includesSomeLane(renderLanes, workInProgress.childLanes);\n\n        if (didSuspendBefore) {\n          if (_hasChildWork) {\n            // If something was in fallback state last time, and we have all the\n            // same children then we're still in progressive loading state.\n            // Something might get unblocked by state updates or retries in the\n            // tree which will affect the tail. So we need to use the normal\n            // path to compute the correct tail.\n            return updateSuspenseListComponent(current, workInProgress, renderLanes);\n          } // If none of the children had any work, that means that none of\n          // them got retried so they'll still be blocked in the same way\n          // as before. We can fast bail out.\n\n\n          workInProgress.flags |= DidCapture;\n        } // If nothing suspended before and we're rendering the same children,\n        // then the tail doesn't matter. Anything new that suspends will work\n        // in the \"together\" mode, so we can continue from the state we had.\n\n\n        var renderState = workInProgress.memoizedState;\n\n        if (renderState !== null) {\n          // Reset to the \"together\" mode in case we've started a different\n          // update in the past but didn't complete it.\n          renderState.rendering = null;\n          renderState.tail = null;\n          renderState.lastEffect = null;\n        }\n\n        pushSuspenseContext(workInProgress, suspenseStackCursor.current);\n\n        if (_hasChildWork) {\n          break;\n        } else {\n          // If none of the children had any work, that means that none of\n          // them got retried so they'll still be blocked in the same way\n          // as before. We can fast bail out.\n          return null;\n        }\n      }\n\n    case OffscreenComponent:\n    case LegacyHiddenComponent:\n      {\n        // Need to check if the tree still needs to be deferred. This is\n        // almost identical to the logic used in the normal update path,\n        // so we'll just enter that. The only difference is we'll bail out\n        // at the next level instead of this one, because the child props\n        // have not changed. Which is fine.\n        // TODO: Probably should refactor `beginWork` to split the bailout\n        // path from the normal path. I'm tempted to do a labeled break here\n        // but I won't :)\n        workInProgress.lanes = NoLanes;\n        return updateOffscreenComponent(current, workInProgress, renderLanes);\n      }\n  }\n\n  return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\n\nfunction beginWork(current, workInProgress, renderLanes) {\n  {\n    if (workInProgress._debugNeedsRemount && current !== null) {\n      // This will restart the begin phase with a new fiber.\n      return remountFiber(current, workInProgress, createFiberFromTypeAndProps(workInProgress.type, workInProgress.key, workInProgress.pendingProps, workInProgress._debugOwner || null, workInProgress.mode, workInProgress.lanes));\n    }\n  }\n\n  if (current !== null) {\n    var oldProps = current.memoizedProps;\n    var newProps = workInProgress.pendingProps;\n\n    if (oldProps !== newProps || hasContextChanged() || ( // Force a re-render if the implementation changed due to hot reload:\n     workInProgress.type !== current.type )) {\n      // If props or context changed, mark the fiber as having performed work.\n      // This may be unset if the props are determined to be equal later (memo).\n      didReceiveUpdate = true;\n    } else {\n      // Neither props nor legacy context changes. Check if there's a pending\n      // update or context change.\n      var hasScheduledUpdateOrContext = checkScheduledUpdateOrContext(current, renderLanes);\n\n      if (!hasScheduledUpdateOrContext && // If this is the second pass of an error or suspense boundary, there\n      // may not be work scheduled on `current`, so we check for this flag.\n      (workInProgress.flags & DidCapture) === NoFlags) {\n        // No pending updates or context. Bail out now.\n        didReceiveUpdate = false;\n        return attemptEarlyBailoutIfNoScheduledUpdate(current, workInProgress, renderLanes);\n      }\n\n      if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags) {\n        // This is a special case that only exists for legacy mode.\n        // See https://github.com/facebook/react/pull/19216.\n        didReceiveUpdate = true;\n      } else {\n        // An update was scheduled on this fiber, but there are no new props\n        // nor legacy context. Set this to false. If an update queue or context\n        // consumer produces a changed value, it will set this to true. Otherwise,\n        // the component will assume the children have not changed and bail out.\n        didReceiveUpdate = false;\n      }\n    }\n  } else {\n    didReceiveUpdate = false;\n\n    if (getIsHydrating() && isForkedChild(workInProgress)) {\n      // Check if this child belongs to a list of muliple children in\n      // its parent.\n      //\n      // In a true multi-threaded implementation, we would render children on\n      // parallel threads. This would represent the beginning of a new render\n      // thread for this subtree.\n      //\n      // We only use this for id generation during hydration, which is why the\n      // logic is located in this special branch.\n      var slotIndex = workInProgress.index;\n      var numberOfForks = getForksAtLevel();\n      pushTreeId(workInProgress, numberOfForks, slotIndex);\n    }\n  } // Before entering the begin phase, clear pending update priority.\n  // TODO: This assumes that we're about to evaluate the component and process\n  // the update queue. However, there's an exception: SimpleMemoComponent\n  // sometimes bails out later in the begin phase. This indicates that we should\n  // move this assignment out of the common path and into each branch.\n\n\n  workInProgress.lanes = NoLanes;\n\n  switch (workInProgress.tag) {\n    case IndeterminateComponent:\n      {\n        return mountIndeterminateComponent(current, workInProgress, workInProgress.type, renderLanes);\n      }\n\n    case LazyComponent:\n      {\n        var elementType = workInProgress.elementType;\n        return mountLazyComponent(current, workInProgress, elementType, renderLanes);\n      }\n\n    case FunctionComponent:\n      {\n        var Component = workInProgress.type;\n        var unresolvedProps = workInProgress.pendingProps;\n        var resolvedProps = workInProgress.elementType === Component ? unresolvedProps : resolveDefaultProps(Component, unresolvedProps);\n        return updateFunctionComponent(current, workInProgress, Component, resolvedProps, renderLanes);\n      }\n\n    case ClassComponent:\n      {\n        var _Component = workInProgress.type;\n        var _unresolvedProps = workInProgress.pendingProps;\n\n        var _resolvedProps = workInProgress.elementType === _Component ? _unresolvedProps : resolveDefaultProps(_Component, _unresolvedProps);\n\n        return updateClassComponent(current, workInProgress, _Component, _resolvedProps, renderLanes);\n      }\n\n    case HostRoot:\n      return updateHostRoot(current, workInProgress, renderLanes);\n\n    case HostComponent:\n      return updateHostComponent(current, workInProgress, renderLanes);\n\n    case HostText:\n      return updateHostText(current, workInProgress);\n\n    case SuspenseComponent:\n      return updateSuspenseComponent(current, workInProgress, renderLanes);\n\n    case HostPortal:\n      return updatePortalComponent(current, workInProgress, renderLanes);\n\n    case ForwardRef:\n      {\n        var type = workInProgress.type;\n        var _unresolvedProps2 = workInProgress.pendingProps;\n\n        var _resolvedProps2 = workInProgress.elementType === type ? _unresolvedProps2 : resolveDefaultProps(type, _unresolvedProps2);\n\n        return updateForwardRef(current, workInProgress, type, _resolvedProps2, renderLanes);\n      }\n\n    case Fragment:\n      return updateFragment(current, workInProgress, renderLanes);\n\n    case Mode:\n      return updateMode(current, workInProgress, renderLanes);\n\n    case Profiler:\n      return updateProfiler(current, workInProgress, renderLanes);\n\n    case ContextProvider:\n      return updateContextProvider(current, workInProgress, renderLanes);\n\n    case ContextConsumer:\n      return updateContextConsumer(current, workInProgress, renderLanes);\n\n    case MemoComponent:\n      {\n        var _type2 = workInProgress.type;\n        var _unresolvedProps3 = workInProgress.pendingProps; // Resolve outer props first, then resolve inner props.\n\n        var _resolvedProps3 = resolveDefaultProps(_type2, _unresolvedProps3);\n\n        {\n          if (workInProgress.type !== workInProgress.elementType) {\n            var outerPropTypes = _type2.propTypes;\n\n            if (outerPropTypes) {\n              checkPropTypes(outerPropTypes, _resolvedProps3, // Resolved for outer only\n              'prop', getComponentNameFromType(_type2));\n            }\n          }\n        }\n\n        _resolvedProps3 = resolveDefaultProps(_type2.type, _resolvedProps3);\n        return updateMemoComponent(current, workInProgress, _type2, _resolvedProps3, renderLanes);\n      }\n\n    case SimpleMemoComponent:\n      {\n        return updateSimpleMemoComponent(current, workInProgress, workInProgress.type, workInProgress.pendingProps, renderLanes);\n      }\n\n    case IncompleteClassComponent:\n      {\n        var _Component2 = workInProgress.type;\n        var _unresolvedProps4 = workInProgress.pendingProps;\n\n        var _resolvedProps4 = workInProgress.elementType === _Component2 ? _unresolvedProps4 : resolveDefaultProps(_Component2, _unresolvedProps4);\n\n        return mountIncompleteClassComponent(current, workInProgress, _Component2, _resolvedProps4, renderLanes);\n      }\n\n    case SuspenseListComponent:\n      {\n        return updateSuspenseListComponent(current, workInProgress, renderLanes);\n      }\n\n    case ScopeComponent:\n      {\n\n        break;\n      }\n\n    case OffscreenComponent:\n      {\n        return updateOffscreenComponent(current, workInProgress, renderLanes);\n      }\n  }\n\n  throw new Error(\"Unknown unit of work tag (\" + workInProgress.tag + \"). This error is likely caused by a bug in \" + 'React. Please file an issue.');\n}\n\nfunction markUpdate(workInProgress) {\n  // Tag the fiber with an update effect. This turns a Placement into\n  // a PlacementAndUpdate.\n  workInProgress.flags |= Update;\n}\n\nfunction markRef$1(workInProgress) {\n  workInProgress.flags |= Ref;\n\n  {\n    workInProgress.flags |= RefStatic;\n  }\n}\n\nvar appendAllChildren;\nvar updateHostContainer;\nvar updateHostComponent$1;\nvar updateHostText$1;\n\n{\n  // Mutation mode\n  appendAllChildren = function (parent, workInProgress, needsVisibilityToggle, isHidden) {\n    // We only have the top Fiber that was created but we need recurse down its\n    // children to find all the terminal nodes.\n    var node = workInProgress.child;\n\n    while (node !== null) {\n      if (node.tag === HostComponent || node.tag === HostText) {\n        appendInitialChild(parent, node.stateNode);\n      } else if (node.tag === HostPortal) ; else if (node.child !== null) {\n        node.child.return = node;\n        node = node.child;\n        continue;\n      }\n\n      if (node === workInProgress) {\n        return;\n      }\n\n      while (node.sibling === null) {\n        if (node.return === null || node.return === workInProgress) {\n          return;\n        }\n\n        node = node.return;\n      }\n\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  };\n\n  updateHostContainer = function (current, workInProgress) {// Noop\n  };\n\n  updateHostComponent$1 = function (current, workInProgress, type, newProps, rootContainerInstance) {\n    // If we have an alternate, that means this is an update and we need to\n    // schedule a side-effect to do the updates.\n    var oldProps = current.memoizedProps;\n\n    if (oldProps === newProps) {\n      // In mutation mode, this is sufficient for a bailout because\n      // we won't touch this node even if children changed.\n      return;\n    } // If we get updated because one of our children updated, we don't\n    // have newProps so we'll have to reuse them.\n    // TODO: Split the update API as separate for the props vs. children.\n    // Even better would be if children weren't special cased at all tho.\n\n\n    var instance = workInProgress.stateNode;\n    var currentHostContext = getHostContext(); // TODO: Experiencing an error where oldProps is null. Suggests a host\n    // component is hitting the resume path. Figure out why. Possibly\n    // related to `hidden`.\n\n    var updatePayload = prepareUpdate(instance, type, oldProps, newProps, rootContainerInstance, currentHostContext); // TODO: Type this specific to this type of component.\n\n    workInProgress.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there\n    // is a new ref we mark this as an update. All the work is done in commitWork.\n\n    if (updatePayload) {\n      markUpdate(workInProgress);\n    }\n  };\n\n  updateHostText$1 = function (current, workInProgress, oldText, newText) {\n    // If the text differs, mark it as an update. All the work in done in commitWork.\n    if (oldText !== newText) {\n      markUpdate(workInProgress);\n    }\n  };\n}\n\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n  if (getIsHydrating()) {\n    // If we're hydrating, we should consume as many items as we can\n    // so we don't leave any behind.\n    return;\n  }\n\n  switch (renderState.tailMode) {\n    case 'hidden':\n      {\n        // Any insertions at the end of the tail list after this point\n        // should be invisible. If there are already mounted boundaries\n        // anything before them are not considered for collapsing.\n        // Therefore we need to go through the whole tail to find if\n        // there are any.\n        var tailNode = renderState.tail;\n        var lastTailNode = null;\n\n        while (tailNode !== null) {\n          if (tailNode.alternate !== null) {\n            lastTailNode = tailNode;\n          }\n\n          tailNode = tailNode.sibling;\n        } // Next we're simply going to delete all insertions after the\n        // last rendered item.\n\n\n        if (lastTailNode === null) {\n          // All remaining items in the tail are insertions.\n          renderState.tail = null;\n        } else {\n          // Detach the insertion after the last node that was already\n          // inserted.\n          lastTailNode.sibling = null;\n        }\n\n        break;\n      }\n\n    case 'collapsed':\n      {\n        // Any insertions at the end of the tail list after this point\n        // should be invisible. If there are already mounted boundaries\n        // anything before them are not considered for collapsing.\n        // Therefore we need to go through the whole tail to find if\n        // there are any.\n        var _tailNode = renderState.tail;\n        var _lastTailNode = null;\n\n        while (_tailNode !== null) {\n          if (_tailNode.alternate !== null) {\n            _lastTailNode = _tailNode;\n          }\n\n          _tailNode = _tailNode.sibling;\n        } // Next we're simply going to delete all insertions after the\n        // last rendered item.\n\n\n        if (_lastTailNode === null) {\n          // All remaining items in the tail are insertions.\n          if (!hasRenderedATailFallback && renderState.tail !== null) {\n            // We suspended during the head. We want to show at least one\n            // row at the tail. So we'll keep on and cut off the rest.\n            renderState.tail.sibling = null;\n          } else {\n            renderState.tail = null;\n          }\n        } else {\n          // Detach the insertion after the last node that was already\n          // inserted.\n          _lastTailNode.sibling = null;\n        }\n\n        break;\n      }\n  }\n}\n\nfunction bubbleProperties(completedWork) {\n  var didBailout = completedWork.alternate !== null && completedWork.alternate.child === completedWork.child;\n  var newChildLanes = NoLanes;\n  var subtreeFlags = NoFlags;\n\n  if (!didBailout) {\n    // Bubble up the earliest expiration time.\n    if ( (completedWork.mode & ProfileMode) !== NoMode) {\n      // In profiling mode, resetChildExpirationTime is also used to reset\n      // profiler durations.\n      var actualDuration = completedWork.actualDuration;\n      var treeBaseDuration = completedWork.selfBaseDuration;\n      var child = completedWork.child;\n\n      while (child !== null) {\n        newChildLanes = mergeLanes(newChildLanes, mergeLanes(child.lanes, child.childLanes));\n        subtreeFlags |= child.subtreeFlags;\n        subtreeFlags |= child.flags; // When a fiber is cloned, its actualDuration is reset to 0. This value will\n        // only be updated if work is done on the fiber (i.e. it doesn't bailout).\n        // When work is done, it should bubble to the parent's actualDuration. If\n        // the fiber has not been cloned though, (meaning no work was done), then\n        // this value will reflect the amount of time spent working on a previous\n        // render. In that case it should not bubble. We determine whether it was\n        // cloned by comparing the child pointer.\n\n        actualDuration += child.actualDuration;\n        treeBaseDuration += child.treeBaseDuration;\n        child = child.sibling;\n      }\n\n      completedWork.actualDuration = actualDuration;\n      completedWork.treeBaseDuration = treeBaseDuration;\n    } else {\n      var _child = completedWork.child;\n\n      while (_child !== null) {\n        newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child.lanes, _child.childLanes));\n        subtreeFlags |= _child.subtreeFlags;\n        subtreeFlags |= _child.flags; // Update the return pointer so the tree is consistent. This is a code\n        // smell because it assumes the commit phase is never concurrent with\n        // the render phase. Will address during refactor to alternate model.\n\n        _child.return = completedWork;\n        _child = _child.sibling;\n      }\n    }\n\n    completedWork.subtreeFlags |= subtreeFlags;\n  } else {\n    // Bubble up the earliest expiration time.\n    if ( (completedWork.mode & ProfileMode) !== NoMode) {\n      // In profiling mode, resetChildExpirationTime is also used to reset\n      // profiler durations.\n      var _treeBaseDuration = completedWork.selfBaseDuration;\n      var _child2 = completedWork.child;\n\n      while (_child2 !== null) {\n        newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child2.lanes, _child2.childLanes)); // \"Static\" flags share the lifetime of the fiber/hook they belong to,\n        // so we should bubble those up even during a bailout. All the other\n        // flags have a lifetime only of a single render + commit, so we should\n        // ignore them.\n\n        subtreeFlags |= _child2.subtreeFlags & StaticMask;\n        subtreeFlags |= _child2.flags & StaticMask;\n        _treeBaseDuration += _child2.treeBaseDuration;\n        _child2 = _child2.sibling;\n      }\n\n      completedWork.treeBaseDuration = _treeBaseDuration;\n    } else {\n      var _child3 = completedWork.child;\n\n      while (_child3 !== null) {\n        newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child3.lanes, _child3.childLanes)); // \"Static\" flags share the lifetime of the fiber/hook they belong to,\n        // so we should bubble those up even during a bailout. All the other\n        // flags have a lifetime only of a single render + commit, so we should\n        // ignore them.\n\n        subtreeFlags |= _child3.subtreeFlags & StaticMask;\n        subtreeFlags |= _child3.flags & StaticMask; // Update the return pointer so the tree is consistent. This is a code\n        // smell because it assumes the commit phase is never concurrent with\n        // the render phase. Will address during refactor to alternate model.\n\n        _child3.return = completedWork;\n        _child3 = _child3.sibling;\n      }\n    }\n\n    completedWork.subtreeFlags |= subtreeFlags;\n  }\n\n  completedWork.childLanes = newChildLanes;\n  return didBailout;\n}\n\nfunction completeDehydratedSuspenseBoundary(current, workInProgress, nextState) {\n  if (hasUnhydratedTailNodes() && (workInProgress.mode & ConcurrentMode) !== NoMode && (workInProgress.flags & DidCapture) === NoFlags) {\n    warnIfUnhydratedTailNodes(workInProgress);\n    resetHydrationState();\n    workInProgress.flags |= ForceClientRender | Incomplete | ShouldCapture;\n    return false;\n  }\n\n  var wasHydrated = popHydrationState(workInProgress);\n\n  if (nextState !== null && nextState.dehydrated !== null) {\n    // We might be inside a hydration state the first time we're picking up this\n    // Suspense boundary, and also after we've reentered it for further hydration.\n    if (current === null) {\n      if (!wasHydrated) {\n        throw new Error('A dehydrated suspense component was completed without a hydrated node. ' + 'This is probably a bug in React.');\n      }\n\n      prepareToHydrateHostSuspenseInstance(workInProgress);\n      bubbleProperties(workInProgress);\n\n      {\n        if ((workInProgress.mode & ProfileMode) !== NoMode) {\n          var isTimedOutSuspense = nextState !== null;\n\n          if (isTimedOutSuspense) {\n            // Don't count time spent in a timed out Suspense subtree as part of the base duration.\n            var primaryChildFragment = workInProgress.child;\n\n            if (primaryChildFragment !== null) {\n              // $FlowFixMe Flow doesn't support type casting in combination with the -= operator\n              workInProgress.treeBaseDuration -= primaryChildFragment.treeBaseDuration;\n            }\n          }\n        }\n      }\n\n      return false;\n    } else {\n      // We might have reentered this boundary to hydrate it. If so, we need to reset the hydration\n      // state since we're now exiting out of it. popHydrationState doesn't do that for us.\n      resetHydrationState();\n\n      if ((workInProgress.flags & DidCapture) === NoFlags) {\n        // This boundary did not suspend so it's now hydrated and unsuspended.\n        workInProgress.memoizedState = null;\n      } // If nothing suspended, we need to schedule an effect to mark this boundary\n      // as having hydrated so events know that they're free to be invoked.\n      // It's also a signal to replay events and the suspense callback.\n      // If something suspended, schedule an effect to attach retry listeners.\n      // So we might as well always mark this.\n\n\n      workInProgress.flags |= Update;\n      bubbleProperties(workInProgress);\n\n      {\n        if ((workInProgress.mode & ProfileMode) !== NoMode) {\n          var _isTimedOutSuspense = nextState !== null;\n\n          if (_isTimedOutSuspense) {\n            // Don't count time spent in a timed out Suspense subtree as part of the base duration.\n            var _primaryChildFragment = workInProgress.child;\n\n            if (_primaryChildFragment !== null) {\n              // $FlowFixMe Flow doesn't support type casting in combination with the -= operator\n              workInProgress.treeBaseDuration -= _primaryChildFragment.treeBaseDuration;\n            }\n          }\n        }\n      }\n\n      return false;\n    }\n  } else {\n    // Successfully completed this tree. If this was a forced client render,\n    // there may have been recoverable errors during first hydration\n    // attempt. If so, add them to a queue so we can log them in the\n    // commit phase.\n    upgradeHydrationErrorsToRecoverable(); // Fall through to normal Suspense path\n\n    return true;\n  }\n}\n\nfunction completeWork(current, workInProgress, renderLanes) {\n  var newProps = workInProgress.pendingProps; // Note: This intentionally doesn't check if we're hydrating because comparing\n  // to the current tree provider fiber is just as fast and less error-prone.\n  // Ideally we would have a special version of the work loop only\n  // for hydration.\n\n  popTreeContext(workInProgress);\n\n  switch (workInProgress.tag) {\n    case IndeterminateComponent:\n    case LazyComponent:\n    case SimpleMemoComponent:\n    case FunctionComponent:\n    case ForwardRef:\n    case Fragment:\n    case Mode:\n    case Profiler:\n    case ContextConsumer:\n    case MemoComponent:\n      bubbleProperties(workInProgress);\n      return null;\n\n    case ClassComponent:\n      {\n        var Component = workInProgress.type;\n\n        if (isContextProvider(Component)) {\n          popContext(workInProgress);\n        }\n\n        bubbleProperties(workInProgress);\n        return null;\n      }\n\n    case HostRoot:\n      {\n        var fiberRoot = workInProgress.stateNode;\n        popHostContainer(workInProgress);\n        popTopLevelContextObject(workInProgress);\n        resetWorkInProgressVersions();\n\n        if (fiberRoot.pendingContext) {\n          fiberRoot.context = fiberRoot.pendingContext;\n          fiberRoot.pendingContext = null;\n        }\n\n        if (current === null || current.child === null) {\n          // If we hydrated, pop so that we can delete any remaining children\n          // that weren't hydrated.\n          var wasHydrated = popHydrationState(workInProgress);\n\n          if (wasHydrated) {\n            // If we hydrated, then we'll need to schedule an update for\n            // the commit side-effects on the root.\n            markUpdate(workInProgress);\n          } else {\n            if (current !== null) {\n              var prevState = current.memoizedState;\n\n              if ( // Check if this is a client root\n              !prevState.isDehydrated || // Check if we reverted to client rendering (e.g. due to an error)\n              (workInProgress.flags & ForceClientRender) !== NoFlags) {\n                // Schedule an effect to clear this container at the start of the\n                // next commit. This handles the case of React rendering into a\n                // container with previous children. It's also safe to do for\n                // updates too, because current.child would only be null if the\n                // previous render was null (so the container would already\n                // be empty).\n                workInProgress.flags |= Snapshot; // If this was a forced client render, there may have been\n                // recoverable errors during first hydration attempt. If so, add\n                // them to a queue so we can log them in the commit phase.\n\n                upgradeHydrationErrorsToRecoverable();\n              }\n            }\n          }\n        }\n\n        updateHostContainer(current, workInProgress);\n        bubbleProperties(workInProgress);\n\n        return null;\n      }\n\n    case HostComponent:\n      {\n        popHostContext(workInProgress);\n        var rootContainerInstance = getRootHostContainer();\n        var type = workInProgress.type;\n\n        if (current !== null && workInProgress.stateNode != null) {\n          updateHostComponent$1(current, workInProgress, type, newProps, rootContainerInstance);\n\n          if (current.ref !== workInProgress.ref) {\n            markRef$1(workInProgress);\n          }\n        } else {\n          if (!newProps) {\n            if (workInProgress.stateNode === null) {\n              throw new Error('We must have new props for new mounts. This error is likely ' + 'caused by a bug in React. Please file an issue.');\n            } // This can happen when we abort work.\n\n\n            bubbleProperties(workInProgress);\n            return null;\n          }\n\n          var currentHostContext = getHostContext(); // TODO: Move createInstance to beginWork and keep it on a context\n          // \"stack\" as the parent. Then append children as we go in beginWork\n          // or completeWork depending on whether we want to add them top->down or\n          // bottom->up. Top->down is faster in IE11.\n\n          var _wasHydrated = popHydrationState(workInProgress);\n\n          if (_wasHydrated) {\n            // TODO: Move this and createInstance step into the beginPhase\n            // to consolidate.\n            if (prepareToHydrateHostInstance(workInProgress, rootContainerInstance, currentHostContext)) {\n              // If changes to the hydrated node need to be applied at the\n              // commit-phase we mark this as such.\n              markUpdate(workInProgress);\n            }\n          } else {\n            var instance = createInstance(type, newProps, rootContainerInstance, currentHostContext, workInProgress);\n            appendAllChildren(instance, workInProgress, false, false);\n            workInProgress.stateNode = instance; // Certain renderers require commit-time effects for initial mount.\n            // (eg DOM renderer supports auto-focus for certain elements).\n            // Make sure such renderers get scheduled for later work.\n\n            if (finalizeInitialChildren(instance, type, newProps, rootContainerInstance)) {\n              markUpdate(workInProgress);\n            }\n          }\n\n          if (workInProgress.ref !== null) {\n            // If there is a ref on a host node we need to schedule a callback\n            markRef$1(workInProgress);\n          }\n        }\n\n        bubbleProperties(workInProgress);\n        return null;\n      }\n\n    case HostText:\n      {\n        var newText = newProps;\n\n        if (current && workInProgress.stateNode != null) {\n          var oldText = current.memoizedProps; // If we have an alternate, that means this is an update and we need\n          // to schedule a side-effect to do the updates.\n\n          updateHostText$1(current, workInProgress, oldText, newText);\n        } else {\n          if (typeof newText !== 'string') {\n            if (workInProgress.stateNode === null) {\n              throw new Error('We must have new props for new mounts. This error is likely ' + 'caused by a bug in React. Please file an issue.');\n            } // This can happen when we abort work.\n\n          }\n\n          var _rootContainerInstance = getRootHostContainer();\n\n          var _currentHostContext = getHostContext();\n\n          var _wasHydrated2 = popHydrationState(workInProgress);\n\n          if (_wasHydrated2) {\n            if (prepareToHydrateHostTextInstance(workInProgress)) {\n              markUpdate(workInProgress);\n            }\n          } else {\n            workInProgress.stateNode = createTextInstance(newText, _rootContainerInstance, _currentHostContext, workInProgress);\n          }\n        }\n\n        bubbleProperties(workInProgress);\n        return null;\n      }\n\n    case SuspenseComponent:\n      {\n        popSuspenseContext(workInProgress);\n        var nextState = workInProgress.memoizedState; // Special path for dehydrated boundaries. We may eventually move this\n        // to its own fiber type so that we can add other kinds of hydration\n        // boundaries that aren't associated with a Suspense tree. In anticipation\n        // of such a refactor, all the hydration logic is contained in\n        // this branch.\n\n        if (current === null || current.memoizedState !== null && current.memoizedState.dehydrated !== null) {\n          var fallthroughToNormalSuspensePath = completeDehydratedSuspenseBoundary(current, workInProgress, nextState);\n\n          if (!fallthroughToNormalSuspensePath) {\n            if (workInProgress.flags & ShouldCapture) {\n              // Special case. There were remaining unhydrated nodes. We treat\n              // this as a mismatch. Revert to client rendering.\n              return workInProgress;\n            } else {\n              // Did not finish hydrating, either because this is the initial\n              // render or because something suspended.\n              return null;\n            }\n          } // Continue with the normal Suspense path.\n\n        }\n\n        if ((workInProgress.flags & DidCapture) !== NoFlags) {\n          // Something suspended. Re-render with the fallback children.\n          workInProgress.lanes = renderLanes; // Do not reset the effect list.\n\n          if ( (workInProgress.mode & ProfileMode) !== NoMode) {\n            transferActualDuration(workInProgress);\n          } // Don't bubble properties in this case.\n\n\n          return workInProgress;\n        }\n\n        var nextDidTimeout = nextState !== null;\n        var prevDidTimeout = current !== null && current.memoizedState !== null;\n        // a passive effect, which is when we process the transitions\n\n\n        if (nextDidTimeout !== prevDidTimeout) {\n          // an effect to toggle the subtree's visibility. When we switch from\n          // fallback -> primary, the inner Offscreen fiber schedules this effect\n          // as part of its normal complete phase. But when we switch from\n          // primary -> fallback, the inner Offscreen fiber does not have a complete\n          // phase. So we need to schedule its effect here.\n          //\n          // We also use this flag to connect/disconnect the effects, but the same\n          // logic applies: when re-connecting, the Offscreen fiber's complete\n          // phase will handle scheduling the effect. It's only when the fallback\n          // is active that we have to do anything special.\n\n\n          if (nextDidTimeout) {\n            var _offscreenFiber2 = workInProgress.child;\n            _offscreenFiber2.flags |= Visibility; // TODO: This will still suspend a synchronous tree if anything\n            // in the concurrent tree already suspended during this render.\n            // This is a known bug.\n\n            if ((workInProgress.mode & ConcurrentMode) !== NoMode) {\n              // TODO: Move this back to throwException because this is too late\n              // if this is a large tree which is common for initial loads. We\n              // don't know if we should restart a render or not until we get\n              // this marker, and this is too late.\n              // If this render already had a ping or lower pri updates,\n              // and this is the first time we know we're going to suspend we\n              // should be able to immediately restart from within throwException.\n              var hasInvisibleChildContext = current === null && (workInProgress.memoizedProps.unstable_avoidThisFallback !== true || !enableSuspenseAvoidThisFallback);\n\n              if (hasInvisibleChildContext || hasSuspenseContext(suspenseStackCursor.current, InvisibleParentSuspenseContext)) {\n                // If this was in an invisible tree or a new render, then showing\n                // this boundary is ok.\n                renderDidSuspend();\n              } else {\n                // Otherwise, we're going to have to hide content so we should\n                // suspend for longer if possible.\n                renderDidSuspendDelayIfPossible();\n              }\n            }\n          }\n        }\n\n        var wakeables = workInProgress.updateQueue;\n\n        if (wakeables !== null) {\n          // Schedule an effect to attach a retry listener to the promise.\n          // TODO: Move to passive phase\n          workInProgress.flags |= Update;\n        }\n\n        bubbleProperties(workInProgress);\n\n        {\n          if ((workInProgress.mode & ProfileMode) !== NoMode) {\n            if (nextDidTimeout) {\n              // Don't count time spent in a timed out Suspense subtree as part of the base duration.\n              var primaryChildFragment = workInProgress.child;\n\n              if (primaryChildFragment !== null) {\n                // $FlowFixMe Flow doesn't support type casting in combination with the -= operator\n                workInProgress.treeBaseDuration -= primaryChildFragment.treeBaseDuration;\n              }\n            }\n          }\n        }\n\n        return null;\n      }\n\n    case HostPortal:\n      popHostContainer(workInProgress);\n      updateHostContainer(current, workInProgress);\n\n      if (current === null) {\n        preparePortalMount(workInProgress.stateNode.containerInfo);\n      }\n\n      bubbleProperties(workInProgress);\n      return null;\n\n    case ContextProvider:\n      // Pop provider fiber\n      var context = workInProgress.type._context;\n      popProvider(context, workInProgress);\n      bubbleProperties(workInProgress);\n      return null;\n\n    case IncompleteClassComponent:\n      {\n        // Same as class component case. I put it down here so that the tags are\n        // sequential to ensure this switch is compiled to a jump table.\n        var _Component = workInProgress.type;\n\n        if (isContextProvider(_Component)) {\n          popContext(workInProgress);\n        }\n\n        bubbleProperties(workInProgress);\n        return null;\n      }\n\n    case SuspenseListComponent:\n      {\n        popSuspenseContext(workInProgress);\n        var renderState = workInProgress.memoizedState;\n\n        if (renderState === null) {\n          // We're running in the default, \"independent\" mode.\n          // We don't do anything in this mode.\n          bubbleProperties(workInProgress);\n          return null;\n        }\n\n        var didSuspendAlready = (workInProgress.flags & DidCapture) !== NoFlags;\n        var renderedTail = renderState.rendering;\n\n        if (renderedTail === null) {\n          // We just rendered the head.\n          if (!didSuspendAlready) {\n            // This is the first pass. We need to figure out if anything is still\n            // suspended in the rendered set.\n            // If new content unsuspended, but there's still some content that\n            // didn't. Then we need to do a second pass that forces everything\n            // to keep showing their fallbacks.\n            // We might be suspended if something in this render pass suspended, or\n            // something in the previous committed pass suspended. Otherwise,\n            // there's no chance so we can skip the expensive call to\n            // findFirstSuspended.\n            var cannotBeSuspended = renderHasNotSuspendedYet() && (current === null || (current.flags & DidCapture) === NoFlags);\n\n            if (!cannotBeSuspended) {\n              var row = workInProgress.child;\n\n              while (row !== null) {\n                var suspended = findFirstSuspended(row);\n\n                if (suspended !== null) {\n                  didSuspendAlready = true;\n                  workInProgress.flags |= DidCapture;\n                  cutOffTailIfNeeded(renderState, false); // If this is a newly suspended tree, it might not get committed as\n                  // part of the second pass. In that case nothing will subscribe to\n                  // its thenables. Instead, we'll transfer its thenables to the\n                  // SuspenseList so that it can retry if they resolve.\n                  // There might be multiple of these in the list but since we're\n                  // going to wait for all of them anyway, it doesn't really matter\n                  // which ones gets to ping. In theory we could get clever and keep\n                  // track of how many dependencies remain but it gets tricky because\n                  // in the meantime, we can add/remove/change items and dependencies.\n                  // We might bail out of the loop before finding any but that\n                  // doesn't matter since that means that the other boundaries that\n                  // we did find already has their listeners attached.\n\n                  var newThenables = suspended.updateQueue;\n\n                  if (newThenables !== null) {\n                    workInProgress.updateQueue = newThenables;\n                    workInProgress.flags |= Update;\n                  } // Rerender the whole list, but this time, we'll force fallbacks\n                  // to stay in place.\n                  // Reset the effect flags before doing the second pass since that's now invalid.\n                  // Reset the child fibers to their original state.\n\n\n                  workInProgress.subtreeFlags = NoFlags;\n                  resetChildFibers(workInProgress, renderLanes); // Set up the Suspense Context to force suspense and immediately\n                  // rerender the children.\n\n                  pushSuspenseContext(workInProgress, setShallowSuspenseContext(suspenseStackCursor.current, ForceSuspenseFallback)); // Don't bubble properties in this case.\n\n                  return workInProgress.child;\n                }\n\n                row = row.sibling;\n              }\n            }\n\n            if (renderState.tail !== null && now() > getRenderTargetTime()) {\n              // We have already passed our CPU deadline but we still have rows\n              // left in the tail. We'll just give up further attempts to render\n              // the main content and only render fallbacks.\n              workInProgress.flags |= DidCapture;\n              didSuspendAlready = true;\n              cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this\n              // to get it started back up to attempt the next item. While in terms\n              // of priority this work has the same priority as this current render,\n              // it's not part of the same transition once the transition has\n              // committed. If it's sync, we still want to yield so that it can be\n              // painted. Conceptually, this is really the same as pinging.\n              // We can use any RetryLane even if it's the one currently rendering\n              // since we're leaving it behind on this node.\n\n              workInProgress.lanes = SomeRetryLane;\n            }\n          } else {\n            cutOffTailIfNeeded(renderState, false);\n          } // Next we're going to render the tail.\n\n        } else {\n          // Append the rendered row to the child list.\n          if (!didSuspendAlready) {\n            var _suspended = findFirstSuspended(renderedTail);\n\n            if (_suspended !== null) {\n              workInProgress.flags |= DidCapture;\n              didSuspendAlready = true; // Ensure we transfer the update queue to the parent so that it doesn't\n              // get lost if this row ends up dropped during a second pass.\n\n              var _newThenables = _suspended.updateQueue;\n\n              if (_newThenables !== null) {\n                workInProgress.updateQueue = _newThenables;\n                workInProgress.flags |= Update;\n              }\n\n              cutOffTailIfNeeded(renderState, true); // This might have been modified.\n\n              if (renderState.tail === null && renderState.tailMode === 'hidden' && !renderedTail.alternate && !getIsHydrating() // We don't cut it if we're hydrating.\n              ) {\n                  // We're done.\n                  bubbleProperties(workInProgress);\n                  return null;\n                }\n            } else if ( // The time it took to render last row is greater than the remaining\n            // time we have to render. So rendering one more row would likely\n            // exceed it.\n            now() * 2 - renderState.renderingStartTime > getRenderTargetTime() && renderLanes !== OffscreenLane) {\n              // We have now passed our CPU deadline and we'll just give up further\n              // attempts to render the main content and only render fallbacks.\n              // The assumption is that this is usually faster.\n              workInProgress.flags |= DidCapture;\n              didSuspendAlready = true;\n              cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this\n              // to get it started back up to attempt the next item. While in terms\n              // of priority this work has the same priority as this current render,\n              // it's not part of the same transition once the transition has\n              // committed. If it's sync, we still want to yield so that it can be\n              // painted. Conceptually, this is really the same as pinging.\n              // We can use any RetryLane even if it's the one currently rendering\n              // since we're leaving it behind on this node.\n\n              workInProgress.lanes = SomeRetryLane;\n            }\n          }\n\n          if (renderState.isBackwards) {\n            // The effect list of the backwards tail will have been added\n            // to the end. This breaks the guarantee that life-cycles fire in\n            // sibling order but that isn't a strong guarantee promised by React.\n            // Especially since these might also just pop in during future commits.\n            // Append to the beginning of the list.\n            renderedTail.sibling = workInProgress.child;\n            workInProgress.child = renderedTail;\n          } else {\n            var previousSibling = renderState.last;\n\n            if (previousSibling !== null) {\n              previousSibling.sibling = renderedTail;\n            } else {\n              workInProgress.child = renderedTail;\n            }\n\n            renderState.last = renderedTail;\n          }\n        }\n\n        if (renderState.tail !== null) {\n          // We still have tail rows to render.\n          // Pop a row.\n          var next = renderState.tail;\n          renderState.rendering = next;\n          renderState.tail = next.sibling;\n          renderState.renderingStartTime = now();\n          next.sibling = null; // Restore the context.\n          // TODO: We can probably just avoid popping it instead and only\n          // setting it the first time we go from not suspended to suspended.\n\n          var suspenseContext = suspenseStackCursor.current;\n\n          if (didSuspendAlready) {\n            suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);\n          } else {\n            suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n          }\n\n          pushSuspenseContext(workInProgress, suspenseContext); // Do a pass over the next row.\n          // Don't bubble properties in this case.\n\n          return next;\n        }\n\n        bubbleProperties(workInProgress);\n        return null;\n      }\n\n    case ScopeComponent:\n      {\n\n        break;\n      }\n\n    case OffscreenComponent:\n    case LegacyHiddenComponent:\n      {\n        popRenderLanes(workInProgress);\n        var _nextState = workInProgress.memoizedState;\n        var nextIsHidden = _nextState !== null;\n\n        if (current !== null) {\n          var _prevState = current.memoizedState;\n          var prevIsHidden = _prevState !== null;\n\n          if (prevIsHidden !== nextIsHidden && ( // LegacyHidden doesn't do any hiding — it only pre-renders.\n          !enableLegacyHidden )) {\n            workInProgress.flags |= Visibility;\n          }\n        }\n\n        if (!nextIsHidden || (workInProgress.mode & ConcurrentMode) === NoMode) {\n          bubbleProperties(workInProgress);\n        } else {\n          // Don't bubble properties for hidden children unless we're rendering\n          // at offscreen priority.\n          if (includesSomeLane(subtreeRenderLanes, OffscreenLane)) {\n            bubbleProperties(workInProgress);\n\n            {\n              // Check if there was an insertion or update in the hidden subtree.\n              // If so, we need to hide those nodes in the commit phase, so\n              // schedule a visibility effect.\n              if ( workInProgress.subtreeFlags & (Placement | Update)) {\n                workInProgress.flags |= Visibility;\n              }\n            }\n          }\n        }\n        return null;\n      }\n\n    case CacheComponent:\n      {\n\n        return null;\n      }\n\n    case TracingMarkerComponent:\n      {\n\n        return null;\n      }\n  }\n\n  throw new Error(\"Unknown unit of work tag (\" + workInProgress.tag + \"). This error is likely caused by a bug in \" + 'React. Please file an issue.');\n}\n\nfunction unwindWork(current, workInProgress, renderLanes) {\n  // Note: This intentionally doesn't check if we're hydrating because comparing\n  // to the current tree provider fiber is just as fast and less error-prone.\n  // Ideally we would have a special version of the work loop only\n  // for hydration.\n  popTreeContext(workInProgress);\n\n  switch (workInProgress.tag) {\n    case ClassComponent:\n      {\n        var Component = workInProgress.type;\n\n        if (isContextProvider(Component)) {\n          popContext(workInProgress);\n        }\n\n        var flags = workInProgress.flags;\n\n        if (flags & ShouldCapture) {\n          workInProgress.flags = flags & ~ShouldCapture | DidCapture;\n\n          if ( (workInProgress.mode & ProfileMode) !== NoMode) {\n            transferActualDuration(workInProgress);\n          }\n\n          return workInProgress;\n        }\n\n        return null;\n      }\n\n    case HostRoot:\n      {\n        var root = workInProgress.stateNode;\n        popHostContainer(workInProgress);\n        popTopLevelContextObject(workInProgress);\n        resetWorkInProgressVersions();\n        var _flags = workInProgress.flags;\n\n        if ((_flags & ShouldCapture) !== NoFlags && (_flags & DidCapture) === NoFlags) {\n          // There was an error during render that wasn't captured by a suspense\n          // boundary. Do a second pass on the root to unmount the children.\n          workInProgress.flags = _flags & ~ShouldCapture | DidCapture;\n          return workInProgress;\n        } // We unwound to the root without completing it. Exit.\n\n\n        return null;\n      }\n\n    case HostComponent:\n      {\n        // TODO: popHydrationState\n        popHostContext(workInProgress);\n        return null;\n      }\n\n    case SuspenseComponent:\n      {\n        popSuspenseContext(workInProgress);\n        var suspenseState = workInProgress.memoizedState;\n\n        if (suspenseState !== null && suspenseState.dehydrated !== null) {\n          if (workInProgress.alternate === null) {\n            throw new Error('Threw in newly mounted dehydrated component. This is likely a bug in ' + 'React. Please file an issue.');\n          }\n\n          resetHydrationState();\n        }\n\n        var _flags2 = workInProgress.flags;\n\n        if (_flags2 & ShouldCapture) {\n          workInProgress.flags = _flags2 & ~ShouldCapture | DidCapture; // Captured a suspense effect. Re-render the boundary.\n\n          if ( (workInProgress.mode & ProfileMode) !== NoMode) {\n            transferActualDuration(workInProgress);\n          }\n\n          return workInProgress;\n        }\n\n        return null;\n      }\n\n    case SuspenseListComponent:\n      {\n        popSuspenseContext(workInProgress); // SuspenseList doesn't actually catch anything. It should've been\n        // caught by a nested boundary. If not, it should bubble through.\n\n        return null;\n      }\n\n    case HostPortal:\n      popHostContainer(workInProgress);\n      return null;\n\n    case ContextProvider:\n      var context = workInProgress.type._context;\n      popProvider(context, workInProgress);\n      return null;\n\n    case OffscreenComponent:\n    case LegacyHiddenComponent:\n      popRenderLanes(workInProgress);\n      return null;\n\n    case CacheComponent:\n\n      return null;\n\n    default:\n      return null;\n  }\n}\n\nfunction unwindInterruptedWork(current, interruptedWork, renderLanes) {\n  // Note: This intentionally doesn't check if we're hydrating because comparing\n  // to the current tree provider fiber is just as fast and less error-prone.\n  // Ideally we would have a special version of the work loop only\n  // for hydration.\n  popTreeContext(interruptedWork);\n\n  switch (interruptedWork.tag) {\n    case ClassComponent:\n      {\n        var childContextTypes = interruptedWork.type.childContextTypes;\n\n        if (childContextTypes !== null && childContextTypes !== undefined) {\n          popContext(interruptedWork);\n        }\n\n        break;\n      }\n\n    case HostRoot:\n      {\n        var root = interruptedWork.stateNode;\n        popHostContainer(interruptedWork);\n        popTopLevelContextObject(interruptedWork);\n        resetWorkInProgressVersions();\n        break;\n      }\n\n    case HostComponent:\n      {\n        popHostContext(interruptedWork);\n        break;\n      }\n\n    case HostPortal:\n      popHostContainer(interruptedWork);\n      break;\n\n    case SuspenseComponent:\n      popSuspenseContext(interruptedWork);\n      break;\n\n    case SuspenseListComponent:\n      popSuspenseContext(interruptedWork);\n      break;\n\n    case ContextProvider:\n      var context = interruptedWork.type._context;\n      popProvider(context, interruptedWork);\n      break;\n\n    case OffscreenComponent:\n    case LegacyHiddenComponent:\n      popRenderLanes(interruptedWork);\n      break;\n  }\n}\n\nvar didWarnAboutUndefinedSnapshotBeforeUpdate = null;\n\n{\n  didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();\n} // Used during the commit phase to track the state of the Offscreen component stack.\n// Allows us to avoid traversing the return path to find the nearest Offscreen ancestor.\n// Only used when enableSuspenseLayoutEffectSemantics is enabled.\n\n\nvar offscreenSubtreeIsHidden = false;\nvar offscreenSubtreeWasHidden = false;\nvar PossiblyWeakSet = typeof WeakSet === 'function' ? WeakSet : Set;\nvar nextEffect = null; // Used for Profiling builds to track updaters.\n\nvar inProgressLanes = null;\nvar inProgressRoot = null;\nfunction reportUncaughtErrorInDEV(error) {\n  // Wrapping each small part of the commit phase into a guarded\n  // callback is a bit too slow (https://github.com/facebook/react/pull/21666).\n  // But we rely on it to surface errors to DEV tools like overlays\n  // (https://github.com/facebook/react/issues/21712).\n  // As a compromise, rethrow only caught errors in a guard.\n  {\n    invokeGuardedCallback(null, function () {\n      throw error;\n    });\n    clearCaughtError();\n  }\n}\n\nvar callComponentWillUnmountWithTimer = function (current, instance) {\n  instance.props = current.memoizedProps;\n  instance.state = current.memoizedState;\n\n  if ( current.mode & ProfileMode) {\n    try {\n      startLayoutEffectTimer();\n      instance.componentWillUnmount();\n    } finally {\n      recordLayoutEffectDuration(current);\n    }\n  } else {\n    instance.componentWillUnmount();\n  }\n}; // Capture errors so they don't interrupt mounting.\n\n\nfunction safelyCallCommitHookLayoutEffectListMount(current, nearestMountedAncestor) {\n  try {\n    commitHookEffectListMount(Layout, current);\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n} // Capture errors so they don't interrupt unmounting.\n\n\nfunction safelyCallComponentWillUnmount(current, nearestMountedAncestor, instance) {\n  try {\n    callComponentWillUnmountWithTimer(current, instance);\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n} // Capture errors so they don't interrupt mounting.\n\n\nfunction safelyCallComponentDidMount(current, nearestMountedAncestor, instance) {\n  try {\n    instance.componentDidMount();\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n} // Capture errors so they don't interrupt mounting.\n\n\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n  try {\n    commitAttachRef(current);\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\n\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n  var ref = current.ref;\n\n  if (ref !== null) {\n    if (typeof ref === 'function') {\n      var retVal;\n\n      try {\n        if (enableProfilerTimer && enableProfilerCommitHooks && current.mode & ProfileMode) {\n          try {\n            startLayoutEffectTimer();\n            retVal = ref(null);\n          } finally {\n            recordLayoutEffectDuration(current);\n          }\n        } else {\n          retVal = ref(null);\n        }\n      } catch (error) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error);\n      }\n\n      {\n        if (typeof retVal === 'function') {\n          error('Unexpected return value from a callback ref in %s. ' + 'A callback ref should not return a function.', getComponentNameFromFiber(current));\n        }\n      }\n    } else {\n      ref.current = null;\n    }\n  }\n}\n\nfunction safelyCallDestroy(current, nearestMountedAncestor, destroy) {\n  try {\n    destroy();\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\n\nvar focusedInstanceHandle = null;\nvar shouldFireAfterActiveInstanceBlur = false;\nfunction commitBeforeMutationEffects(root, firstChild) {\n  focusedInstanceHandle = prepareForCommit(root.containerInfo);\n  nextEffect = firstChild;\n  commitBeforeMutationEffects_begin(); // We no longer need to track the active instance fiber\n\n  var shouldFire = shouldFireAfterActiveInstanceBlur;\n  shouldFireAfterActiveInstanceBlur = false;\n  focusedInstanceHandle = null;\n  return shouldFire;\n}\n\nfunction commitBeforeMutationEffects_begin() {\n  while (nextEffect !== null) {\n    var fiber = nextEffect; // This phase is only used for beforeActiveInstanceBlur.\n\n    var child = fiber.child;\n\n    if ((fiber.subtreeFlags & BeforeMutationMask) !== NoFlags && child !== null) {\n      child.return = fiber;\n      nextEffect = child;\n    } else {\n      commitBeforeMutationEffects_complete();\n    }\n  }\n}\n\nfunction commitBeforeMutationEffects_complete() {\n  while (nextEffect !== null) {\n    var fiber = nextEffect;\n    setCurrentFiber(fiber);\n\n    try {\n      commitBeforeMutationEffectsOnFiber(fiber);\n    } catch (error) {\n      captureCommitPhaseError(fiber, fiber.return, error);\n    }\n\n    resetCurrentFiber();\n    var sibling = fiber.sibling;\n\n    if (sibling !== null) {\n      sibling.return = fiber.return;\n      nextEffect = sibling;\n      return;\n    }\n\n    nextEffect = fiber.return;\n  }\n}\n\nfunction commitBeforeMutationEffectsOnFiber(finishedWork) {\n  var current = finishedWork.alternate;\n  var flags = finishedWork.flags;\n\n  if ((flags & Snapshot) !== NoFlags) {\n    setCurrentFiber(finishedWork);\n\n    switch (finishedWork.tag) {\n      case FunctionComponent:\n      case ForwardRef:\n      case SimpleMemoComponent:\n        {\n          break;\n        }\n\n      case ClassComponent:\n        {\n          if (current !== null) {\n            var prevProps = current.memoizedProps;\n            var prevState = current.memoizedState;\n            var instance = finishedWork.stateNode; // We could update instance props and state here,\n            // but instead we rely on them being set during last render.\n            // TODO: revisit this when we implement resuming.\n\n            {\n              if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n                if (instance.props !== finishedWork.memoizedProps) {\n                  error('Expected %s props to match memoized props before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n                }\n\n                if (instance.state !== finishedWork.memoizedState) {\n                  error('Expected %s state to match memoized state before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n                }\n              }\n            }\n\n            var snapshot = instance.getSnapshotBeforeUpdate(finishedWork.elementType === finishedWork.type ? prevProps : resolveDefaultProps(finishedWork.type, prevProps), prevState);\n\n            {\n              var didWarnSet = didWarnAboutUndefinedSnapshotBeforeUpdate;\n\n              if (snapshot === undefined && !didWarnSet.has(finishedWork.type)) {\n                didWarnSet.add(finishedWork.type);\n\n                error('%s.getSnapshotBeforeUpdate(): A snapshot value (or null) ' + 'must be returned. You have returned undefined.', getComponentNameFromFiber(finishedWork));\n              }\n            }\n\n            instance.__reactInternalSnapshotBeforeUpdate = snapshot;\n          }\n\n          break;\n        }\n\n      case HostRoot:\n        {\n          {\n            var root = finishedWork.stateNode;\n            clearContainer(root.containerInfo);\n          }\n\n          break;\n        }\n\n      case HostComponent:\n      case HostText:\n      case HostPortal:\n      case IncompleteClassComponent:\n        // Nothing to do for these component types\n        break;\n\n      default:\n        {\n          throw new Error('This unit of work tag should not have side-effects. This error is ' + 'likely caused by a bug in React. Please file an issue.');\n        }\n    }\n\n    resetCurrentFiber();\n  }\n}\n\nfunction commitHookEffectListUnmount(flags, finishedWork, nearestMountedAncestor) {\n  var updateQueue = finishedWork.updateQueue;\n  var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;\n\n  if (lastEffect !== null) {\n    var firstEffect = lastEffect.next;\n    var effect = firstEffect;\n\n    do {\n      if ((effect.tag & flags) === flags) {\n        // Unmount\n        var destroy = effect.destroy;\n        effect.destroy = undefined;\n\n        if (destroy !== undefined) {\n          {\n            if ((flags & Passive$1) !== NoFlags$1) {\n              markComponentPassiveEffectUnmountStarted(finishedWork);\n            } else if ((flags & Layout) !== NoFlags$1) {\n              markComponentLayoutEffectUnmountStarted(finishedWork);\n            }\n          }\n\n          {\n            if ((flags & Insertion) !== NoFlags$1) {\n              setIsRunningInsertionEffect(true);\n            }\n          }\n\n          safelyCallDestroy(finishedWork, nearestMountedAncestor, destroy);\n\n          {\n            if ((flags & Insertion) !== NoFlags$1) {\n              setIsRunningInsertionEffect(false);\n            }\n          }\n\n          {\n            if ((flags & Passive$1) !== NoFlags$1) {\n              markComponentPassiveEffectUnmountStopped();\n            } else if ((flags & Layout) !== NoFlags$1) {\n              markComponentLayoutEffectUnmountStopped();\n            }\n          }\n        }\n      }\n\n      effect = effect.next;\n    } while (effect !== firstEffect);\n  }\n}\n\nfunction commitHookEffectListMount(flags, finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;\n\n  if (lastEffect !== null) {\n    var firstEffect = lastEffect.next;\n    var effect = firstEffect;\n\n    do {\n      if ((effect.tag & flags) === flags) {\n        {\n          if ((flags & Passive$1) !== NoFlags$1) {\n            markComponentPassiveEffectMountStarted(finishedWork);\n          } else if ((flags & Layout) !== NoFlags$1) {\n            markComponentLayoutEffectMountStarted(finishedWork);\n          }\n        } // Mount\n\n\n        var create = effect.create;\n\n        {\n          if ((flags & Insertion) !== NoFlags$1) {\n            setIsRunningInsertionEffect(true);\n          }\n        }\n\n        effect.destroy = create();\n\n        {\n          if ((flags & Insertion) !== NoFlags$1) {\n            setIsRunningInsertionEffect(false);\n          }\n        }\n\n        {\n          if ((flags & Passive$1) !== NoFlags$1) {\n            markComponentPassiveEffectMountStopped();\n          } else if ((flags & Layout) !== NoFlags$1) {\n            markComponentLayoutEffectMountStopped();\n          }\n        }\n\n        {\n          var destroy = effect.destroy;\n\n          if (destroy !== undefined && typeof destroy !== 'function') {\n            var hookName = void 0;\n\n            if ((effect.tag & Layout) !== NoFlags) {\n              hookName = 'useLayoutEffect';\n            } else if ((effect.tag & Insertion) !== NoFlags) {\n              hookName = 'useInsertionEffect';\n            } else {\n              hookName = 'useEffect';\n            }\n\n            var addendum = void 0;\n\n            if (destroy === null) {\n              addendum = ' You returned null. If your effect does not require clean ' + 'up, return undefined (or nothing).';\n            } else if (typeof destroy.then === 'function') {\n              addendum = '\\n\\nIt looks like you wrote ' + hookName + '(async () => ...) or returned a Promise. ' + 'Instead, write the async function inside your effect ' + 'and call it immediately:\\n\\n' + hookName + '(() => {\\n' + '  async function fetchData() {\\n' + '    // You can await here\\n' + '    const response = await MyAPI.getData(someId);\\n' + '    // ...\\n' + '  }\\n' + '  fetchData();\\n' + \"}, [someId]); // Or [] if effect doesn't need props or state\\n\\n\" + 'Learn more about data fetching with Hooks: https://reactjs.org/link/hooks-data-fetching';\n            } else {\n              addendum = ' You returned: ' + destroy;\n            }\n\n            error('%s must not return anything besides a function, ' + 'which is used for clean-up.%s', hookName, addendum);\n          }\n        }\n      }\n\n      effect = effect.next;\n    } while (effect !== firstEffect);\n  }\n}\n\nfunction commitPassiveEffectDurations(finishedRoot, finishedWork) {\n  {\n    // Only Profilers with work in their subtree will have an Update effect scheduled.\n    if ((finishedWork.flags & Update) !== NoFlags) {\n      switch (finishedWork.tag) {\n        case Profiler:\n          {\n            var passiveEffectDuration = finishedWork.stateNode.passiveEffectDuration;\n            var _finishedWork$memoize = finishedWork.memoizedProps,\n                id = _finishedWork$memoize.id,\n                onPostCommit = _finishedWork$memoize.onPostCommit; // This value will still reflect the previous commit phase.\n            // It does not get reset until the start of the next commit phase.\n\n            var commitTime = getCommitTime();\n            var phase = finishedWork.alternate === null ? 'mount' : 'update';\n\n            {\n              if (isCurrentUpdateNested()) {\n                phase = 'nested-update';\n              }\n            }\n\n            if (typeof onPostCommit === 'function') {\n              onPostCommit(id, phase, passiveEffectDuration, commitTime);\n            } // Bubble times to the next nearest ancestor Profiler.\n            // After we process that Profiler, we'll bubble further up.\n\n\n            var parentFiber = finishedWork.return;\n\n            outer: while (parentFiber !== null) {\n              switch (parentFiber.tag) {\n                case HostRoot:\n                  var root = parentFiber.stateNode;\n                  root.passiveEffectDuration += passiveEffectDuration;\n                  break outer;\n\n                case Profiler:\n                  var parentStateNode = parentFiber.stateNode;\n                  parentStateNode.passiveEffectDuration += passiveEffectDuration;\n                  break outer;\n              }\n\n              parentFiber = parentFiber.return;\n            }\n\n            break;\n          }\n      }\n    }\n  }\n}\n\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork, committedLanes) {\n  if ((finishedWork.flags & LayoutMask) !== NoFlags) {\n    switch (finishedWork.tag) {\n      case FunctionComponent:\n      case ForwardRef:\n      case SimpleMemoComponent:\n        {\n          if ( !offscreenSubtreeWasHidden) {\n            // At this point layout effects have already been destroyed (during mutation phase).\n            // This is done to prevent sibling component effects from interfering with each other,\n            // e.g. a destroy function in one component should never override a ref set\n            // by a create function in another component during the same commit.\n            if ( finishedWork.mode & ProfileMode) {\n              try {\n                startLayoutEffectTimer();\n                commitHookEffectListMount(Layout | HasEffect, finishedWork);\n              } finally {\n                recordLayoutEffectDuration(finishedWork);\n              }\n            } else {\n              commitHookEffectListMount(Layout | HasEffect, finishedWork);\n            }\n          }\n\n          break;\n        }\n\n      case ClassComponent:\n        {\n          var instance = finishedWork.stateNode;\n\n          if (finishedWork.flags & Update) {\n            if (!offscreenSubtreeWasHidden) {\n              if (current === null) {\n                // We could update instance props and state here,\n                // but instead we rely on them being set during last render.\n                // TODO: revisit this when we implement resuming.\n                {\n                  if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n                    if (instance.props !== finishedWork.memoizedProps) {\n                      error('Expected %s props to match memoized props before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n                    }\n\n                    if (instance.state !== finishedWork.memoizedState) {\n                      error('Expected %s state to match memoized state before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n                    }\n                  }\n                }\n\n                if ( finishedWork.mode & ProfileMode) {\n                  try {\n                    startLayoutEffectTimer();\n                    instance.componentDidMount();\n                  } finally {\n                    recordLayoutEffectDuration(finishedWork);\n                  }\n                } else {\n                  instance.componentDidMount();\n                }\n              } else {\n                var prevProps = finishedWork.elementType === finishedWork.type ? current.memoizedProps : resolveDefaultProps(finishedWork.type, current.memoizedProps);\n                var prevState = current.memoizedState; // We could update instance props and state here,\n                // but instead we rely on them being set during last render.\n                // TODO: revisit this when we implement resuming.\n\n                {\n                  if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n                    if (instance.props !== finishedWork.memoizedProps) {\n                      error('Expected %s props to match memoized props before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n                    }\n\n                    if (instance.state !== finishedWork.memoizedState) {\n                      error('Expected %s state to match memoized state before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n                    }\n                  }\n                }\n\n                if ( finishedWork.mode & ProfileMode) {\n                  try {\n                    startLayoutEffectTimer();\n                    instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate);\n                  } finally {\n                    recordLayoutEffectDuration(finishedWork);\n                  }\n                } else {\n                  instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate);\n                }\n              }\n            }\n          } // TODO: I think this is now always non-null by the time it reaches the\n          // commit phase. Consider removing the type check.\n\n\n          var updateQueue = finishedWork.updateQueue;\n\n          if (updateQueue !== null) {\n            {\n              if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n                if (instance.props !== finishedWork.memoizedProps) {\n                  error('Expected %s props to match memoized props before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n                }\n\n                if (instance.state !== finishedWork.memoizedState) {\n                  error('Expected %s state to match memoized state before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n                }\n              }\n            } // We could update instance props and state here,\n            // but instead we rely on them being set during last render.\n            // TODO: revisit this when we implement resuming.\n\n\n            commitUpdateQueue(finishedWork, updateQueue, instance);\n          }\n\n          break;\n        }\n\n      case HostRoot:\n        {\n          // TODO: I think this is now always non-null by the time it reaches the\n          // commit phase. Consider removing the type check.\n          var _updateQueue = finishedWork.updateQueue;\n\n          if (_updateQueue !== null) {\n            var _instance = null;\n\n            if (finishedWork.child !== null) {\n              switch (finishedWork.child.tag) {\n                case HostComponent:\n                  _instance = getPublicInstance(finishedWork.child.stateNode);\n                  break;\n\n                case ClassComponent:\n                  _instance = finishedWork.child.stateNode;\n                  break;\n              }\n            }\n\n            commitUpdateQueue(finishedWork, _updateQueue, _instance);\n          }\n\n          break;\n        }\n\n      case HostComponent:\n        {\n          var _instance2 = finishedWork.stateNode; // Renderers may schedule work to be done after host components are mounted\n          // (eg DOM renderer may schedule auto-focus for inputs and form controls).\n          // These effects should only be committed when components are first mounted,\n          // aka when there is no current/alternate.\n\n          if (current === null && finishedWork.flags & Update) {\n            var type = finishedWork.type;\n            var props = finishedWork.memoizedProps;\n            commitMount(_instance2, type, props);\n          }\n\n          break;\n        }\n\n      case HostText:\n        {\n          // We have no life-cycles associated with text.\n          break;\n        }\n\n      case HostPortal:\n        {\n          // We have no life-cycles associated with portals.\n          break;\n        }\n\n      case Profiler:\n        {\n          {\n            var _finishedWork$memoize2 = finishedWork.memoizedProps,\n                onCommit = _finishedWork$memoize2.onCommit,\n                onRender = _finishedWork$memoize2.onRender;\n            var effectDuration = finishedWork.stateNode.effectDuration;\n            var commitTime = getCommitTime();\n            var phase = current === null ? 'mount' : 'update';\n\n            {\n              if (isCurrentUpdateNested()) {\n                phase = 'nested-update';\n              }\n            }\n\n            if (typeof onRender === 'function') {\n              onRender(finishedWork.memoizedProps.id, phase, finishedWork.actualDuration, finishedWork.treeBaseDuration, finishedWork.actualStartTime, commitTime);\n            }\n\n            {\n              if (typeof onCommit === 'function') {\n                onCommit(finishedWork.memoizedProps.id, phase, effectDuration, commitTime);\n              } // Schedule a passive effect for this Profiler to call onPostCommit hooks.\n              // This effect should be scheduled even if there is no onPostCommit callback for this Profiler,\n              // because the effect is also where times bubble to parent Profilers.\n\n\n              enqueuePendingPassiveProfilerEffect(finishedWork); // Propagate layout effect durations to the next nearest Profiler ancestor.\n              // Do not reset these values until the next render so DevTools has a chance to read them first.\n\n              var parentFiber = finishedWork.return;\n\n              outer: while (parentFiber !== null) {\n                switch (parentFiber.tag) {\n                  case HostRoot:\n                    var root = parentFiber.stateNode;\n                    root.effectDuration += effectDuration;\n                    break outer;\n\n                  case Profiler:\n                    var parentStateNode = parentFiber.stateNode;\n                    parentStateNode.effectDuration += effectDuration;\n                    break outer;\n                }\n\n                parentFiber = parentFiber.return;\n              }\n            }\n          }\n\n          break;\n        }\n\n      case SuspenseComponent:\n        {\n          commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n          break;\n        }\n\n      case SuspenseListComponent:\n      case IncompleteClassComponent:\n      case ScopeComponent:\n      case OffscreenComponent:\n      case LegacyHiddenComponent:\n      case TracingMarkerComponent:\n        {\n          break;\n        }\n\n      default:\n        throw new Error('This unit of work tag should not have side-effects. This error is ' + 'likely caused by a bug in React. Please file an issue.');\n    }\n  }\n\n  if ( !offscreenSubtreeWasHidden) {\n    {\n      if (finishedWork.flags & Ref) {\n        commitAttachRef(finishedWork);\n      }\n    }\n  }\n}\n\nfunction reappearLayoutEffectsOnFiber(node) {\n  // Turn on layout effects in a tree that previously disappeared.\n  // TODO (Offscreen) Check: flags & LayoutStatic\n  switch (node.tag) {\n    case FunctionComponent:\n    case ForwardRef:\n    case SimpleMemoComponent:\n      {\n        if ( node.mode & ProfileMode) {\n          try {\n            startLayoutEffectTimer();\n            safelyCallCommitHookLayoutEffectListMount(node, node.return);\n          } finally {\n            recordLayoutEffectDuration(node);\n          }\n        } else {\n          safelyCallCommitHookLayoutEffectListMount(node, node.return);\n        }\n\n        break;\n      }\n\n    case ClassComponent:\n      {\n        var instance = node.stateNode;\n\n        if (typeof instance.componentDidMount === 'function') {\n          safelyCallComponentDidMount(node, node.return, instance);\n        }\n\n        safelyAttachRef(node, node.return);\n        break;\n      }\n\n    case HostComponent:\n      {\n        safelyAttachRef(node, node.return);\n        break;\n      }\n  }\n}\n\nfunction hideOrUnhideAllChildren(finishedWork, isHidden) {\n  // Only hide or unhide the top-most host nodes.\n  var hostSubtreeRoot = null;\n\n  {\n    // We only have the top Fiber that was inserted but we need to recurse down its\n    // children to find all the terminal nodes.\n    var node = finishedWork;\n\n    while (true) {\n      if (node.tag === HostComponent) {\n        if (hostSubtreeRoot === null) {\n          hostSubtreeRoot = node;\n\n          try {\n            var instance = node.stateNode;\n\n            if (isHidden) {\n              hideInstance(instance);\n            } else {\n              unhideInstance(node.stateNode, node.memoizedProps);\n            }\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n        }\n      } else if (node.tag === HostText) {\n        if (hostSubtreeRoot === null) {\n          try {\n            var _instance3 = node.stateNode;\n\n            if (isHidden) {\n              hideTextInstance(_instance3);\n            } else {\n              unhideTextInstance(_instance3, node.memoizedProps);\n            }\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n        }\n      } else if ((node.tag === OffscreenComponent || node.tag === LegacyHiddenComponent) && node.memoizedState !== null && node !== finishedWork) ; else if (node.child !== null) {\n        node.child.return = node;\n        node = node.child;\n        continue;\n      }\n\n      if (node === finishedWork) {\n        return;\n      }\n\n      while (node.sibling === null) {\n        if (node.return === null || node.return === finishedWork) {\n          return;\n        }\n\n        if (hostSubtreeRoot === node) {\n          hostSubtreeRoot = null;\n        }\n\n        node = node.return;\n      }\n\n      if (hostSubtreeRoot === node) {\n        hostSubtreeRoot = null;\n      }\n\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n}\n\nfunction commitAttachRef(finishedWork) {\n  var ref = finishedWork.ref;\n\n  if (ref !== null) {\n    var instance = finishedWork.stateNode;\n    var instanceToUse;\n\n    switch (finishedWork.tag) {\n      case HostComponent:\n        instanceToUse = getPublicInstance(instance);\n        break;\n\n      default:\n        instanceToUse = instance;\n    } // Moved outside to ensure DCE works with this flag\n\n    if (typeof ref === 'function') {\n      var retVal;\n\n      if ( finishedWork.mode & ProfileMode) {\n        try {\n          startLayoutEffectTimer();\n          retVal = ref(instanceToUse);\n        } finally {\n          recordLayoutEffectDuration(finishedWork);\n        }\n      } else {\n        retVal = ref(instanceToUse);\n      }\n\n      {\n        if (typeof retVal === 'function') {\n          error('Unexpected return value from a callback ref in %s. ' + 'A callback ref should not return a function.', getComponentNameFromFiber(finishedWork));\n        }\n      }\n    } else {\n      {\n        if (!ref.hasOwnProperty('current')) {\n          error('Unexpected ref object provided for %s. ' + 'Use either a ref-setter function or React.createRef().', getComponentNameFromFiber(finishedWork));\n        }\n      }\n\n      ref.current = instanceToUse;\n    }\n  }\n}\n\nfunction detachFiberMutation(fiber) {\n  // Cut off the return pointer to disconnect it from the tree.\n  // This enables us to detect and warn against state updates on an unmounted component.\n  // It also prevents events from bubbling from within disconnected components.\n  //\n  // Ideally, we should also clear the child pointer of the parent alternate to let this\n  // get GC:ed but we don't know which for sure which parent is the current\n  // one so we'll settle for GC:ing the subtree of this child.\n  // This child itself will be GC:ed when the parent updates the next time.\n  //\n  // Note that we can't clear child or sibling pointers yet.\n  // They're needed for passive effects and for findDOMNode.\n  // We defer those fields, and all other cleanup, to the passive phase (see detachFiberAfterEffects).\n  //\n  // Don't reset the alternate yet, either. We need that so we can detach the\n  // alternate's fields in the passive phase. Clearing the return pointer is\n  // sufficient for findDOMNode semantics.\n  var alternate = fiber.alternate;\n\n  if (alternate !== null) {\n    alternate.return = null;\n  }\n\n  fiber.return = null;\n}\n\nfunction detachFiberAfterEffects(fiber) {\n  var alternate = fiber.alternate;\n\n  if (alternate !== null) {\n    fiber.alternate = null;\n    detachFiberAfterEffects(alternate);\n  } // Note: Defensively using negation instead of < in case\n  // `deletedTreeCleanUpLevel` is undefined.\n\n\n  {\n    // Clear cyclical Fiber fields. This level alone is designed to roughly\n    // approximate the planned Fiber refactor. In that world, `setState` will be\n    // bound to a special \"instance\" object instead of a Fiber. The Instance\n    // object will not have any of these fields. It will only be connected to\n    // the fiber tree via a single link at the root. So if this level alone is\n    // sufficient to fix memory issues, that bodes well for our plans.\n    fiber.child = null;\n    fiber.deletions = null;\n    fiber.sibling = null; // The `stateNode` is cyclical because on host nodes it points to the host\n    // tree, which has its own pointers to children, parents, and siblings.\n    // The other host nodes also point back to fibers, so we should detach that\n    // one, too.\n\n    if (fiber.tag === HostComponent) {\n      var hostInstance = fiber.stateNode;\n\n      if (hostInstance !== null) {\n        detachDeletedInstance(hostInstance);\n      }\n    }\n\n    fiber.stateNode = null; // I'm intentionally not clearing the `return` field in this level. We\n    // already disconnect the `return` pointer at the root of the deleted\n    // subtree (in `detachFiberMutation`). Besides, `return` by itself is not\n    // cyclical — it's only cyclical when combined with `child`, `sibling`, and\n    // `alternate`. But we'll clear it in the next level anyway, just in case.\n\n    {\n      fiber._debugOwner = null;\n    }\n\n    {\n      // Theoretically, nothing in here should be necessary, because we already\n      // disconnected the fiber from the tree. So even if something leaks this\n      // particular fiber, it won't leak anything else\n      //\n      // The purpose of this branch is to be super aggressive so we can measure\n      // if there's any difference in memory impact. If there is, that could\n      // indicate a React leak we don't know about.\n      fiber.return = null;\n      fiber.dependencies = null;\n      fiber.memoizedProps = null;\n      fiber.memoizedState = null;\n      fiber.pendingProps = null;\n      fiber.stateNode = null; // TODO: Move to `commitPassiveUnmountInsideDeletedTreeOnFiber` instead.\n\n      fiber.updateQueue = null;\n    }\n  }\n}\n\nfunction getHostParentFiber(fiber) {\n  var parent = fiber.return;\n\n  while (parent !== null) {\n    if (isHostParent(parent)) {\n      return parent;\n    }\n\n    parent = parent.return;\n  }\n\n  throw new Error('Expected to find a host parent. This error is likely caused by a bug ' + 'in React. Please file an issue.');\n}\n\nfunction isHostParent(fiber) {\n  return fiber.tag === HostComponent || fiber.tag === HostRoot || fiber.tag === HostPortal;\n}\n\nfunction getHostSibling(fiber) {\n  // We're going to search forward into the tree until we find a sibling host\n  // node. Unfortunately, if multiple insertions are done in a row we have to\n  // search past them. This leads to exponential search for the next sibling.\n  // TODO: Find a more efficient way to do this.\n  var node = fiber;\n\n  siblings: while (true) {\n    // If we didn't find anything, let's try the next sibling.\n    while (node.sibling === null) {\n      if (node.return === null || isHostParent(node.return)) {\n        // If we pop out of the root or hit the parent the fiber we are the\n        // last sibling.\n        return null;\n      }\n\n      node = node.return;\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n\n    while (node.tag !== HostComponent && node.tag !== HostText && node.tag !== DehydratedFragment) {\n      // If it is not host node and, we might have a host node inside it.\n      // Try to search down until we find one.\n      if (node.flags & Placement) {\n        // If we don't have a child, try the siblings instead.\n        continue siblings;\n      } // If we don't have a child, try the siblings instead.\n      // We also skip portals because they are not part of this host tree.\n\n\n      if (node.child === null || node.tag === HostPortal) {\n        continue siblings;\n      } else {\n        node.child.return = node;\n        node = node.child;\n      }\n    } // Check if this host node is stable or about to be placed.\n\n\n    if (!(node.flags & Placement)) {\n      // Found it!\n      return node.stateNode;\n    }\n  }\n}\n\nfunction commitPlacement(finishedWork) {\n\n\n  var parentFiber = getHostParentFiber(finishedWork); // Note: these two variables *must* always be updated together.\n\n  switch (parentFiber.tag) {\n    case HostComponent:\n      {\n        var parent = parentFiber.stateNode;\n\n        if (parentFiber.flags & ContentReset) {\n          // Reset the text content of the parent before doing any insertions\n          resetTextContent(parent); // Clear ContentReset from the effect tag\n\n          parentFiber.flags &= ~ContentReset;\n        }\n\n        var before = getHostSibling(finishedWork); // We only have the top Fiber that was inserted but we need to recurse down its\n        // children to find all the terminal nodes.\n\n        insertOrAppendPlacementNode(finishedWork, before, parent);\n        break;\n      }\n\n    case HostRoot:\n    case HostPortal:\n      {\n        var _parent = parentFiber.stateNode.containerInfo;\n\n        var _before = getHostSibling(finishedWork);\n\n        insertOrAppendPlacementNodeIntoContainer(finishedWork, _before, _parent);\n        break;\n      }\n    // eslint-disable-next-line-no-fallthrough\n\n    default:\n      throw new Error('Invalid host parent fiber. This error is likely caused by a bug ' + 'in React. Please file an issue.');\n  }\n}\n\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n  var tag = node.tag;\n  var isHost = tag === HostComponent || tag === HostText;\n\n  if (isHost) {\n    var stateNode = node.stateNode;\n\n    if (before) {\n      insertInContainerBefore(parent, stateNode, before);\n    } else {\n      appendChildToContainer(parent, stateNode);\n    }\n  } else if (tag === HostPortal) ; else {\n    var child = node.child;\n\n    if (child !== null) {\n      insertOrAppendPlacementNodeIntoContainer(child, before, parent);\n      var sibling = child.sibling;\n\n      while (sibling !== null) {\n        insertOrAppendPlacementNodeIntoContainer(sibling, before, parent);\n        sibling = sibling.sibling;\n      }\n    }\n  }\n}\n\nfunction insertOrAppendPlacementNode(node, before, parent) {\n  var tag = node.tag;\n  var isHost = tag === HostComponent || tag === HostText;\n\n  if (isHost) {\n    var stateNode = node.stateNode;\n\n    if (before) {\n      insertBefore(parent, stateNode, before);\n    } else {\n      appendChild(parent, stateNode);\n    }\n  } else if (tag === HostPortal) ; else {\n    var child = node.child;\n\n    if (child !== null) {\n      insertOrAppendPlacementNode(child, before, parent);\n      var sibling = child.sibling;\n\n      while (sibling !== null) {\n        insertOrAppendPlacementNode(sibling, before, parent);\n        sibling = sibling.sibling;\n      }\n    }\n  }\n} // These are tracked on the stack as we recursively traverse a\n// deleted subtree.\n// TODO: Update these during the whole mutation phase, not just during\n// a deletion.\n\n\nvar hostParent = null;\nvar hostParentIsContainer = false;\n\nfunction commitDeletionEffects(root, returnFiber, deletedFiber) {\n  {\n    // We only have the top Fiber that was deleted but we need to recurse down its\n    // children to find all the terminal nodes.\n    // Recursively delete all host nodes from the parent, detach refs, clean\n    // up mounted layout effects, and call componentWillUnmount.\n    // We only need to remove the topmost host child in each branch. But then we\n    // still need to keep traversing to unmount effects, refs, and cWU. TODO: We\n    // could split this into two separate traversals functions, where the second\n    // one doesn't include any removeChild logic. This is maybe the same\n    // function as \"disappearLayoutEffects\" (or whatever that turns into after\n    // the layout phase is refactored to use recursion).\n    // Before starting, find the nearest host parent on the stack so we know\n    // which instance/container to remove the children from.\n    // TODO: Instead of searching up the fiber return path on every deletion, we\n    // can track the nearest host component on the JS stack as we traverse the\n    // tree during the commit phase. This would make insertions faster, too.\n    var parent = returnFiber;\n\n    findParent: while (parent !== null) {\n      switch (parent.tag) {\n        case HostComponent:\n          {\n            hostParent = parent.stateNode;\n            hostParentIsContainer = false;\n            break findParent;\n          }\n\n        case HostRoot:\n          {\n            hostParent = parent.stateNode.containerInfo;\n            hostParentIsContainer = true;\n            break findParent;\n          }\n\n        case HostPortal:\n          {\n            hostParent = parent.stateNode.containerInfo;\n            hostParentIsContainer = true;\n            break findParent;\n          }\n      }\n\n      parent = parent.return;\n    }\n\n    if (hostParent === null) {\n      throw new Error('Expected to find a host parent. This error is likely caused by ' + 'a bug in React. Please file an issue.');\n    }\n\n    commitDeletionEffectsOnFiber(root, returnFiber, deletedFiber);\n    hostParent = null;\n    hostParentIsContainer = false;\n  }\n\n  detachFiberMutation(deletedFiber);\n}\n\nfunction recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, parent) {\n  // TODO: Use a static flag to skip trees that don't have unmount effects\n  var child = parent.child;\n\n  while (child !== null) {\n    commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, child);\n    child = child.sibling;\n  }\n}\n\nfunction commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, deletedFiber) {\n  onCommitUnmount(deletedFiber); // The cases in this outer switch modify the stack before they traverse\n  // into their subtree. There are simpler cases in the inner switch\n  // that don't modify the stack.\n\n  switch (deletedFiber.tag) {\n    case HostComponent:\n      {\n        if (!offscreenSubtreeWasHidden) {\n          safelyDetachRef(deletedFiber, nearestMountedAncestor);\n        } // Intentional fallthrough to next branch\n\n      }\n    // eslint-disable-next-line-no-fallthrough\n\n    case HostText:\n      {\n        // We only need to remove the nearest host child. Set the host parent\n        // to `null` on the stack to indicate that nested children don't\n        // need to be removed.\n        {\n          var prevHostParent = hostParent;\n          var prevHostParentIsContainer = hostParentIsContainer;\n          hostParent = null;\n          recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n          hostParent = prevHostParent;\n          hostParentIsContainer = prevHostParentIsContainer;\n\n          if (hostParent !== null) {\n            // Now that all the child effects have unmounted, we can remove the\n            // node from the tree.\n            if (hostParentIsContainer) {\n              removeChildFromContainer(hostParent, deletedFiber.stateNode);\n            } else {\n              removeChild(hostParent, deletedFiber.stateNode);\n            }\n          }\n        }\n\n        return;\n      }\n\n    case DehydratedFragment:\n      {\n        // Delete the dehydrated suspense boundary and all of its content.\n\n\n        {\n          if (hostParent !== null) {\n            if (hostParentIsContainer) {\n              clearSuspenseBoundaryFromContainer(hostParent, deletedFiber.stateNode);\n            } else {\n              clearSuspenseBoundary(hostParent, deletedFiber.stateNode);\n            }\n          }\n        }\n\n        return;\n      }\n\n    case HostPortal:\n      {\n        {\n          // When we go into a portal, it becomes the parent to remove from.\n          var _prevHostParent = hostParent;\n          var _prevHostParentIsContainer = hostParentIsContainer;\n          hostParent = deletedFiber.stateNode.containerInfo;\n          hostParentIsContainer = true;\n          recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n          hostParent = _prevHostParent;\n          hostParentIsContainer = _prevHostParentIsContainer;\n        }\n\n        return;\n      }\n\n    case FunctionComponent:\n    case ForwardRef:\n    case MemoComponent:\n    case SimpleMemoComponent:\n      {\n        if (!offscreenSubtreeWasHidden) {\n          var updateQueue = deletedFiber.updateQueue;\n\n          if (updateQueue !== null) {\n            var lastEffect = updateQueue.lastEffect;\n\n            if (lastEffect !== null) {\n              var firstEffect = lastEffect.next;\n              var effect = firstEffect;\n\n              do {\n                var _effect = effect,\n                    destroy = _effect.destroy,\n                    tag = _effect.tag;\n\n                if (destroy !== undefined) {\n                  if ((tag & Insertion) !== NoFlags$1) {\n                    safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy);\n                  } else if ((tag & Layout) !== NoFlags$1) {\n                    {\n                      markComponentLayoutEffectUnmountStarted(deletedFiber);\n                    }\n\n                    if ( deletedFiber.mode & ProfileMode) {\n                      startLayoutEffectTimer();\n                      safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy);\n                      recordLayoutEffectDuration(deletedFiber);\n                    } else {\n                      safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy);\n                    }\n\n                    {\n                      markComponentLayoutEffectUnmountStopped();\n                    }\n                  }\n                }\n\n                effect = effect.next;\n              } while (effect !== firstEffect);\n            }\n          }\n        }\n\n        recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n        return;\n      }\n\n    case ClassComponent:\n      {\n        if (!offscreenSubtreeWasHidden) {\n          safelyDetachRef(deletedFiber, nearestMountedAncestor);\n          var instance = deletedFiber.stateNode;\n\n          if (typeof instance.componentWillUnmount === 'function') {\n            safelyCallComponentWillUnmount(deletedFiber, nearestMountedAncestor, instance);\n          }\n        }\n\n        recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n        return;\n      }\n\n    case ScopeComponent:\n      {\n\n        recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n        return;\n      }\n\n    case OffscreenComponent:\n      {\n        if ( // TODO: Remove this dead flag\n         deletedFiber.mode & ConcurrentMode) {\n          // If this offscreen component is hidden, we already unmounted it. Before\n          // deleting the children, track that it's already unmounted so that we\n          // don't attempt to unmount the effects again.\n          // TODO: If the tree is hidden, in most cases we should be able to skip\n          // over the nested children entirely. An exception is we haven't yet found\n          // the topmost host node to delete, which we already track on the stack.\n          // But the other case is portals, which need to be detached no matter how\n          // deeply they are nested. We should use a subtree flag to track whether a\n          // subtree includes a nested portal.\n          var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n          offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || deletedFiber.memoizedState !== null;\n          recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n          offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n        } else {\n          recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n        }\n\n        break;\n      }\n\n    default:\n      {\n        recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n        return;\n      }\n  }\n}\n\nfunction commitSuspenseCallback(finishedWork) {\n  // TODO: Move this to passive phase\n  var newState = finishedWork.memoizedState;\n}\n\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n\n  var newState = finishedWork.memoizedState;\n\n  if (newState === null) {\n    var current = finishedWork.alternate;\n\n    if (current !== null) {\n      var prevState = current.memoizedState;\n\n      if (prevState !== null) {\n        var suspenseInstance = prevState.dehydrated;\n\n        if (suspenseInstance !== null) {\n          commitHydratedSuspenseInstance(suspenseInstance);\n        }\n      }\n    }\n  }\n}\n\nfunction attachSuspenseRetryListeners(finishedWork) {\n  // If this boundary just timed out, then it will have a set of wakeables.\n  // For each wakeable, attach a listener so that when it resolves, React\n  // attempts to re-render the boundary in the primary (pre-timeout) state.\n  var wakeables = finishedWork.updateQueue;\n\n  if (wakeables !== null) {\n    finishedWork.updateQueue = null;\n    var retryCache = finishedWork.stateNode;\n\n    if (retryCache === null) {\n      retryCache = finishedWork.stateNode = new PossiblyWeakSet();\n    }\n\n    wakeables.forEach(function (wakeable) {\n      // Memoize using the boundary fiber to prevent redundant listeners.\n      var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n\n      if (!retryCache.has(wakeable)) {\n        retryCache.add(wakeable);\n\n        {\n          if (isDevToolsPresent) {\n            if (inProgressLanes !== null && inProgressRoot !== null) {\n              // If we have pending work still, associate the original updaters with it.\n              restorePendingUpdaters(inProgressRoot, inProgressLanes);\n            } else {\n              throw Error('Expected finished root and lanes to be set. This is a bug in React.');\n            }\n          }\n        }\n\n        wakeable.then(retry, retry);\n      }\n    });\n  }\n} // This function detects when a Suspense boundary goes from visible to hidden.\nfunction commitMutationEffects(root, finishedWork, committedLanes) {\n  inProgressLanes = committedLanes;\n  inProgressRoot = root;\n  setCurrentFiber(finishedWork);\n  commitMutationEffectsOnFiber(finishedWork, root);\n  setCurrentFiber(finishedWork);\n  inProgressLanes = null;\n  inProgressRoot = null;\n}\n\nfunction recursivelyTraverseMutationEffects(root, parentFiber, lanes) {\n  // Deletions effects can be scheduled on any fiber type. They need to happen\n  // before the children effects hae fired.\n  var deletions = parentFiber.deletions;\n\n  if (deletions !== null) {\n    for (var i = 0; i < deletions.length; i++) {\n      var childToDelete = deletions[i];\n\n      try {\n        commitDeletionEffects(root, parentFiber, childToDelete);\n      } catch (error) {\n        captureCommitPhaseError(childToDelete, parentFiber, error);\n      }\n    }\n  }\n\n  var prevDebugFiber = getCurrentFiber();\n\n  if (parentFiber.subtreeFlags & MutationMask) {\n    var child = parentFiber.child;\n\n    while (child !== null) {\n      setCurrentFiber(child);\n      commitMutationEffectsOnFiber(child, root);\n      child = child.sibling;\n    }\n  }\n\n  setCurrentFiber(prevDebugFiber);\n}\n\nfunction commitMutationEffectsOnFiber(finishedWork, root, lanes) {\n  var current = finishedWork.alternate;\n  var flags = finishedWork.flags; // The effect flag should be checked *after* we refine the type of fiber,\n  // because the fiber tag is more specific. An exception is any flag related\n  // to reconcilation, because those can be set on all fiber types.\n\n  switch (finishedWork.tag) {\n    case FunctionComponent:\n    case ForwardRef:\n    case MemoComponent:\n    case SimpleMemoComponent:\n      {\n        recursivelyTraverseMutationEffects(root, finishedWork);\n        commitReconciliationEffects(finishedWork);\n\n        if (flags & Update) {\n          try {\n            commitHookEffectListUnmount(Insertion | HasEffect, finishedWork, finishedWork.return);\n            commitHookEffectListMount(Insertion | HasEffect, finishedWork);\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          } // Layout effects are destroyed during the mutation phase so that all\n          // destroy functions for all fibers are called before any create functions.\n          // This prevents sibling component effects from interfering with each other,\n          // e.g. a destroy function in one component should never override a ref set\n          // by a create function in another component during the same commit.\n\n\n          if ( finishedWork.mode & ProfileMode) {\n            try {\n              startLayoutEffectTimer();\n              commitHookEffectListUnmount(Layout | HasEffect, finishedWork, finishedWork.return);\n            } catch (error) {\n              captureCommitPhaseError(finishedWork, finishedWork.return, error);\n            }\n\n            recordLayoutEffectDuration(finishedWork);\n          } else {\n            try {\n              commitHookEffectListUnmount(Layout | HasEffect, finishedWork, finishedWork.return);\n            } catch (error) {\n              captureCommitPhaseError(finishedWork, finishedWork.return, error);\n            }\n          }\n        }\n\n        return;\n      }\n\n    case ClassComponent:\n      {\n        recursivelyTraverseMutationEffects(root, finishedWork);\n        commitReconciliationEffects(finishedWork);\n\n        if (flags & Ref) {\n          if (current !== null) {\n            safelyDetachRef(current, current.return);\n          }\n        }\n\n        return;\n      }\n\n    case HostComponent:\n      {\n        recursivelyTraverseMutationEffects(root, finishedWork);\n        commitReconciliationEffects(finishedWork);\n\n        if (flags & Ref) {\n          if (current !== null) {\n            safelyDetachRef(current, current.return);\n          }\n        }\n\n        {\n          // TODO: ContentReset gets cleared by the children during the commit\n          // phase. This is a refactor hazard because it means we must read\n          // flags the flags after `commitReconciliationEffects` has already run;\n          // the order matters. We should refactor so that ContentReset does not\n          // rely on mutating the flag during commit. Like by setting a flag\n          // during the render phase instead.\n          if (finishedWork.flags & ContentReset) {\n            var instance = finishedWork.stateNode;\n\n            try {\n              resetTextContent(instance);\n            } catch (error) {\n              captureCommitPhaseError(finishedWork, finishedWork.return, error);\n            }\n          }\n\n          if (flags & Update) {\n            var _instance4 = finishedWork.stateNode;\n\n            if (_instance4 != null) {\n              // Commit the work prepared earlier.\n              var newProps = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps\n              // as the newProps. The updatePayload will contain the real change in\n              // this case.\n\n              var oldProps = current !== null ? current.memoizedProps : newProps;\n              var type = finishedWork.type; // TODO: Type the updateQueue to be specific to host components.\n\n              var updatePayload = finishedWork.updateQueue;\n              finishedWork.updateQueue = null;\n\n              if (updatePayload !== null) {\n                try {\n                  commitUpdate(_instance4, updatePayload, type, oldProps, newProps, finishedWork);\n                } catch (error) {\n                  captureCommitPhaseError(finishedWork, finishedWork.return, error);\n                }\n              }\n            }\n          }\n        }\n\n        return;\n      }\n\n    case HostText:\n      {\n        recursivelyTraverseMutationEffects(root, finishedWork);\n        commitReconciliationEffects(finishedWork);\n\n        if (flags & Update) {\n          {\n            if (finishedWork.stateNode === null) {\n              throw new Error('This should have a text node initialized. This error is likely ' + 'caused by a bug in React. Please file an issue.');\n            }\n\n            var textInstance = finishedWork.stateNode;\n            var newText = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps\n            // as the newProps. The updatePayload will contain the real change in\n            // this case.\n\n            var oldText = current !== null ? current.memoizedProps : newText;\n\n            try {\n              commitTextUpdate(textInstance, oldText, newText);\n            } catch (error) {\n              captureCommitPhaseError(finishedWork, finishedWork.return, error);\n            }\n          }\n        }\n\n        return;\n      }\n\n    case HostRoot:\n      {\n        recursivelyTraverseMutationEffects(root, finishedWork);\n        commitReconciliationEffects(finishedWork);\n\n        if (flags & Update) {\n          {\n            if (current !== null) {\n              var prevRootState = current.memoizedState;\n\n              if (prevRootState.isDehydrated) {\n                try {\n                  commitHydratedContainer(root.containerInfo);\n                } catch (error) {\n                  captureCommitPhaseError(finishedWork, finishedWork.return, error);\n                }\n              }\n            }\n          }\n        }\n\n        return;\n      }\n\n    case HostPortal:\n      {\n        recursivelyTraverseMutationEffects(root, finishedWork);\n        commitReconciliationEffects(finishedWork);\n\n        return;\n      }\n\n    case SuspenseComponent:\n      {\n        recursivelyTraverseMutationEffects(root, finishedWork);\n        commitReconciliationEffects(finishedWork);\n        var offscreenFiber = finishedWork.child;\n\n        if (offscreenFiber.flags & Visibility) {\n          var offscreenInstance = offscreenFiber.stateNode;\n          var newState = offscreenFiber.memoizedState;\n          var isHidden = newState !== null; // Track the current state on the Offscreen instance so we can\n          // read it during an event\n\n          offscreenInstance.isHidden = isHidden;\n\n          if (isHidden) {\n            var wasHidden = offscreenFiber.alternate !== null && offscreenFiber.alternate.memoizedState !== null;\n\n            if (!wasHidden) {\n              // TODO: Move to passive phase\n              markCommitTimeOfFallback();\n            }\n          }\n        }\n\n        if (flags & Update) {\n          try {\n            commitSuspenseCallback(finishedWork);\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n\n          attachSuspenseRetryListeners(finishedWork);\n        }\n\n        return;\n      }\n\n    case OffscreenComponent:\n      {\n        var _wasHidden = current !== null && current.memoizedState !== null;\n\n        if ( // TODO: Remove this dead flag\n         finishedWork.mode & ConcurrentMode) {\n          // Before committing the children, track on the stack whether this\n          // offscreen subtree was already hidden, so that we don't unmount the\n          // effects again.\n          var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n          offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || _wasHidden;\n          recursivelyTraverseMutationEffects(root, finishedWork);\n          offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n        } else {\n          recursivelyTraverseMutationEffects(root, finishedWork);\n        }\n\n        commitReconciliationEffects(finishedWork);\n\n        if (flags & Visibility) {\n          var _offscreenInstance = finishedWork.stateNode;\n          var _newState = finishedWork.memoizedState;\n\n          var _isHidden = _newState !== null;\n\n          var offscreenBoundary = finishedWork; // Track the current state on the Offscreen instance so we can\n          // read it during an event\n\n          _offscreenInstance.isHidden = _isHidden;\n\n          {\n            if (_isHidden) {\n              if (!_wasHidden) {\n                if ((offscreenBoundary.mode & ConcurrentMode) !== NoMode) {\n                  nextEffect = offscreenBoundary;\n                  var offscreenChild = offscreenBoundary.child;\n\n                  while (offscreenChild !== null) {\n                    nextEffect = offscreenChild;\n                    disappearLayoutEffects_begin(offscreenChild);\n                    offscreenChild = offscreenChild.sibling;\n                  }\n                }\n              }\n            }\n          }\n\n          {\n            // TODO: This needs to run whenever there's an insertion or update\n            // inside a hidden Offscreen tree.\n            hideOrUnhideAllChildren(offscreenBoundary, _isHidden);\n          }\n        }\n\n        return;\n      }\n\n    case SuspenseListComponent:\n      {\n        recursivelyTraverseMutationEffects(root, finishedWork);\n        commitReconciliationEffects(finishedWork);\n\n        if (flags & Update) {\n          attachSuspenseRetryListeners(finishedWork);\n        }\n\n        return;\n      }\n\n    case ScopeComponent:\n      {\n\n        return;\n      }\n\n    default:\n      {\n        recursivelyTraverseMutationEffects(root, finishedWork);\n        commitReconciliationEffects(finishedWork);\n        return;\n      }\n  }\n}\n\nfunction commitReconciliationEffects(finishedWork) {\n  // Placement effects (insertions, reorders) can be scheduled on any fiber\n  // type. They needs to happen after the children effects have fired, but\n  // before the effects on this fiber have fired.\n  var flags = finishedWork.flags;\n\n  if (flags & Placement) {\n    try {\n      commitPlacement(finishedWork);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    } // Clear the \"placement\" from effect tag so that we know that this is\n    // inserted, before any life-cycles like componentDidMount gets called.\n    // TODO: findDOMNode doesn't rely on this any more but isMounted does\n    // and isMounted is deprecated anyway so we should be able to kill this.\n\n\n    finishedWork.flags &= ~Placement;\n  }\n\n  if (flags & Hydrating) {\n    finishedWork.flags &= ~Hydrating;\n  }\n}\n\nfunction commitLayoutEffects(finishedWork, root, committedLanes) {\n  inProgressLanes = committedLanes;\n  inProgressRoot = root;\n  nextEffect = finishedWork;\n  commitLayoutEffects_begin(finishedWork, root, committedLanes);\n  inProgressLanes = null;\n  inProgressRoot = null;\n}\n\nfunction commitLayoutEffects_begin(subtreeRoot, root, committedLanes) {\n  // Suspense layout effects semantics don't change for legacy roots.\n  var isModernRoot = (subtreeRoot.mode & ConcurrentMode) !== NoMode;\n\n  while (nextEffect !== null) {\n    var fiber = nextEffect;\n    var firstChild = fiber.child;\n\n    if ( fiber.tag === OffscreenComponent && isModernRoot) {\n      // Keep track of the current Offscreen stack's state.\n      var isHidden = fiber.memoizedState !== null;\n      var newOffscreenSubtreeIsHidden = isHidden || offscreenSubtreeIsHidden;\n\n      if (newOffscreenSubtreeIsHidden) {\n        // The Offscreen tree is hidden. Skip over its layout effects.\n        commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes);\n        continue;\n      } else {\n        // TODO (Offscreen) Also check: subtreeFlags & LayoutMask\n        var current = fiber.alternate;\n        var wasHidden = current !== null && current.memoizedState !== null;\n        var newOffscreenSubtreeWasHidden = wasHidden || offscreenSubtreeWasHidden;\n        var prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden;\n        var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; // Traverse the Offscreen subtree with the current Offscreen as the root.\n\n        offscreenSubtreeIsHidden = newOffscreenSubtreeIsHidden;\n        offscreenSubtreeWasHidden = newOffscreenSubtreeWasHidden;\n\n        if (offscreenSubtreeWasHidden && !prevOffscreenSubtreeWasHidden) {\n          // This is the root of a reappearing boundary. Turn its layout effects\n          // back on.\n          nextEffect = fiber;\n          reappearLayoutEffects_begin(fiber);\n        }\n\n        var child = firstChild;\n\n        while (child !== null) {\n          nextEffect = child;\n          commitLayoutEffects_begin(child, // New root; bubble back up to here and stop.\n          root, committedLanes);\n          child = child.sibling;\n        } // Restore Offscreen state and resume in our-progress traversal.\n\n\n        nextEffect = fiber;\n        offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n        offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n        commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes);\n        continue;\n      }\n    }\n\n    if ((fiber.subtreeFlags & LayoutMask) !== NoFlags && firstChild !== null) {\n      firstChild.return = fiber;\n      nextEffect = firstChild;\n    } else {\n      commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes);\n    }\n  }\n}\n\nfunction commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes) {\n  while (nextEffect !== null) {\n    var fiber = nextEffect;\n\n    if ((fiber.flags & LayoutMask) !== NoFlags) {\n      var current = fiber.alternate;\n      setCurrentFiber(fiber);\n\n      try {\n        commitLayoutEffectOnFiber(root, current, fiber, committedLanes);\n      } catch (error) {\n        captureCommitPhaseError(fiber, fiber.return, error);\n      }\n\n      resetCurrentFiber();\n    }\n\n    if (fiber === subtreeRoot) {\n      nextEffect = null;\n      return;\n    }\n\n    var sibling = fiber.sibling;\n\n    if (sibling !== null) {\n      sibling.return = fiber.return;\n      nextEffect = sibling;\n      return;\n    }\n\n    nextEffect = fiber.return;\n  }\n}\n\nfunction disappearLayoutEffects_begin(subtreeRoot) {\n  while (nextEffect !== null) {\n    var fiber = nextEffect;\n    var firstChild = fiber.child; // TODO (Offscreen) Check: flags & (RefStatic | LayoutStatic)\n\n    switch (fiber.tag) {\n      case FunctionComponent:\n      case ForwardRef:\n      case MemoComponent:\n      case SimpleMemoComponent:\n        {\n          if ( fiber.mode & ProfileMode) {\n            try {\n              startLayoutEffectTimer();\n              commitHookEffectListUnmount(Layout, fiber, fiber.return);\n            } finally {\n              recordLayoutEffectDuration(fiber);\n            }\n          } else {\n            commitHookEffectListUnmount(Layout, fiber, fiber.return);\n          }\n\n          break;\n        }\n\n      case ClassComponent:\n        {\n          // TODO (Offscreen) Check: flags & RefStatic\n          safelyDetachRef(fiber, fiber.return);\n          var instance = fiber.stateNode;\n\n          if (typeof instance.componentWillUnmount === 'function') {\n            safelyCallComponentWillUnmount(fiber, fiber.return, instance);\n          }\n\n          break;\n        }\n\n      case HostComponent:\n        {\n          safelyDetachRef(fiber, fiber.return);\n          break;\n        }\n\n      case OffscreenComponent:\n        {\n          // Check if this is a\n          var isHidden = fiber.memoizedState !== null;\n\n          if (isHidden) {\n            // Nested Offscreen tree is already hidden. Don't disappear\n            // its effects.\n            disappearLayoutEffects_complete(subtreeRoot);\n            continue;\n          }\n\n          break;\n        }\n    } // TODO (Offscreen) Check: subtreeFlags & LayoutStatic\n\n\n    if (firstChild !== null) {\n      firstChild.return = fiber;\n      nextEffect = firstChild;\n    } else {\n      disappearLayoutEffects_complete(subtreeRoot);\n    }\n  }\n}\n\nfunction disappearLayoutEffects_complete(subtreeRoot) {\n  while (nextEffect !== null) {\n    var fiber = nextEffect;\n\n    if (fiber === subtreeRoot) {\n      nextEffect = null;\n      return;\n    }\n\n    var sibling = fiber.sibling;\n\n    if (sibling !== null) {\n      sibling.return = fiber.return;\n      nextEffect = sibling;\n      return;\n    }\n\n    nextEffect = fiber.return;\n  }\n}\n\nfunction reappearLayoutEffects_begin(subtreeRoot) {\n  while (nextEffect !== null) {\n    var fiber = nextEffect;\n    var firstChild = fiber.child;\n\n    if (fiber.tag === OffscreenComponent) {\n      var isHidden = fiber.memoizedState !== null;\n\n      if (isHidden) {\n        // Nested Offscreen tree is still hidden. Don't re-appear its effects.\n        reappearLayoutEffects_complete(subtreeRoot);\n        continue;\n      }\n    } // TODO (Offscreen) Check: subtreeFlags & LayoutStatic\n\n\n    if (firstChild !== null) {\n      // This node may have been reused from a previous render, so we can't\n      // assume its return pointer is correct.\n      firstChild.return = fiber;\n      nextEffect = firstChild;\n    } else {\n      reappearLayoutEffects_complete(subtreeRoot);\n    }\n  }\n}\n\nfunction reappearLayoutEffects_complete(subtreeRoot) {\n  while (nextEffect !== null) {\n    var fiber = nextEffect; // TODO (Offscreen) Check: flags & LayoutStatic\n\n    setCurrentFiber(fiber);\n\n    try {\n      reappearLayoutEffectsOnFiber(fiber);\n    } catch (error) {\n      captureCommitPhaseError(fiber, fiber.return, error);\n    }\n\n    resetCurrentFiber();\n\n    if (fiber === subtreeRoot) {\n      nextEffect = null;\n      return;\n    }\n\n    var sibling = fiber.sibling;\n\n    if (sibling !== null) {\n      // This node may have been reused from a previous render, so we can't\n      // assume its return pointer is correct.\n      sibling.return = fiber.return;\n      nextEffect = sibling;\n      return;\n    }\n\n    nextEffect = fiber.return;\n  }\n}\n\nfunction commitPassiveMountEffects(root, finishedWork, committedLanes, committedTransitions) {\n  nextEffect = finishedWork;\n  commitPassiveMountEffects_begin(finishedWork, root, committedLanes, committedTransitions);\n}\n\nfunction commitPassiveMountEffects_begin(subtreeRoot, root, committedLanes, committedTransitions) {\n  while (nextEffect !== null) {\n    var fiber = nextEffect;\n    var firstChild = fiber.child;\n\n    if ((fiber.subtreeFlags & PassiveMask) !== NoFlags && firstChild !== null) {\n      firstChild.return = fiber;\n      nextEffect = firstChild;\n    } else {\n      commitPassiveMountEffects_complete(subtreeRoot, root, committedLanes, committedTransitions);\n    }\n  }\n}\n\nfunction commitPassiveMountEffects_complete(subtreeRoot, root, committedLanes, committedTransitions) {\n  while (nextEffect !== null) {\n    var fiber = nextEffect;\n\n    if ((fiber.flags & Passive) !== NoFlags) {\n      setCurrentFiber(fiber);\n\n      try {\n        commitPassiveMountOnFiber(root, fiber, committedLanes, committedTransitions);\n      } catch (error) {\n        captureCommitPhaseError(fiber, fiber.return, error);\n      }\n\n      resetCurrentFiber();\n    }\n\n    if (fiber === subtreeRoot) {\n      nextEffect = null;\n      return;\n    }\n\n    var sibling = fiber.sibling;\n\n    if (sibling !== null) {\n      sibling.return = fiber.return;\n      nextEffect = sibling;\n      return;\n    }\n\n    nextEffect = fiber.return;\n  }\n}\n\nfunction commitPassiveMountOnFiber(finishedRoot, finishedWork, committedLanes, committedTransitions) {\n  switch (finishedWork.tag) {\n    case FunctionComponent:\n    case ForwardRef:\n    case SimpleMemoComponent:\n      {\n        if ( finishedWork.mode & ProfileMode) {\n          startPassiveEffectTimer();\n\n          try {\n            commitHookEffectListMount(Passive$1 | HasEffect, finishedWork);\n          } finally {\n            recordPassiveEffectDuration(finishedWork);\n          }\n        } else {\n          commitHookEffectListMount(Passive$1 | HasEffect, finishedWork);\n        }\n\n        break;\n      }\n  }\n}\n\nfunction commitPassiveUnmountEffects(firstChild) {\n  nextEffect = firstChild;\n  commitPassiveUnmountEffects_begin();\n}\n\nfunction commitPassiveUnmountEffects_begin() {\n  while (nextEffect !== null) {\n    var fiber = nextEffect;\n    var child = fiber.child;\n\n    if ((nextEffect.flags & ChildDeletion) !== NoFlags) {\n      var deletions = fiber.deletions;\n\n      if (deletions !== null) {\n        for (var i = 0; i < deletions.length; i++) {\n          var fiberToDelete = deletions[i];\n          nextEffect = fiberToDelete;\n          commitPassiveUnmountEffectsInsideOfDeletedTree_begin(fiberToDelete, fiber);\n        }\n\n        {\n          // A fiber was deleted from this parent fiber, but it's still part of\n          // the previous (alternate) parent fiber's list of children. Because\n          // children are a linked list, an earlier sibling that's still alive\n          // will be connected to the deleted fiber via its `alternate`:\n          //\n          //   live fiber\n          //   --alternate--> previous live fiber\n          //   --sibling--> deleted fiber\n          //\n          // We can't disconnect `alternate` on nodes that haven't been deleted\n          // yet, but we can disconnect the `sibling` and `child` pointers.\n          var previousFiber = fiber.alternate;\n\n          if (previousFiber !== null) {\n            var detachedChild = previousFiber.child;\n\n            if (detachedChild !== null) {\n              previousFiber.child = null;\n\n              do {\n                var detachedSibling = detachedChild.sibling;\n                detachedChild.sibling = null;\n                detachedChild = detachedSibling;\n              } while (detachedChild !== null);\n            }\n          }\n        }\n\n        nextEffect = fiber;\n      }\n    }\n\n    if ((fiber.subtreeFlags & PassiveMask) !== NoFlags && child !== null) {\n      child.return = fiber;\n      nextEffect = child;\n    } else {\n      commitPassiveUnmountEffects_complete();\n    }\n  }\n}\n\nfunction commitPassiveUnmountEffects_complete() {\n  while (nextEffect !== null) {\n    var fiber = nextEffect;\n\n    if ((fiber.flags & Passive) !== NoFlags) {\n      setCurrentFiber(fiber);\n      commitPassiveUnmountOnFiber(fiber);\n      resetCurrentFiber();\n    }\n\n    var sibling = fiber.sibling;\n\n    if (sibling !== null) {\n      sibling.return = fiber.return;\n      nextEffect = sibling;\n      return;\n    }\n\n    nextEffect = fiber.return;\n  }\n}\n\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n  switch (finishedWork.tag) {\n    case FunctionComponent:\n    case ForwardRef:\n    case SimpleMemoComponent:\n      {\n        if ( finishedWork.mode & ProfileMode) {\n          startPassiveEffectTimer();\n          commitHookEffectListUnmount(Passive$1 | HasEffect, finishedWork, finishedWork.return);\n          recordPassiveEffectDuration(finishedWork);\n        } else {\n          commitHookEffectListUnmount(Passive$1 | HasEffect, finishedWork, finishedWork.return);\n        }\n\n        break;\n      }\n  }\n}\n\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(deletedSubtreeRoot, nearestMountedAncestor) {\n  while (nextEffect !== null) {\n    var fiber = nextEffect; // Deletion effects fire in parent -> child order\n    // TODO: Check if fiber has a PassiveStatic flag\n\n    setCurrentFiber(fiber);\n    commitPassiveUnmountInsideDeletedTreeOnFiber(fiber, nearestMountedAncestor);\n    resetCurrentFiber();\n    var child = fiber.child; // TODO: Only traverse subtree if it has a PassiveStatic flag. (But, if we\n    // do this, still need to handle `deletedTreeCleanUpLevel` correctly.)\n\n    if (child !== null) {\n      child.return = fiber;\n      nextEffect = child;\n    } else {\n      commitPassiveUnmountEffectsInsideOfDeletedTree_complete(deletedSubtreeRoot);\n    }\n  }\n}\n\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_complete(deletedSubtreeRoot) {\n  while (nextEffect !== null) {\n    var fiber = nextEffect;\n    var sibling = fiber.sibling;\n    var returnFiber = fiber.return;\n\n    {\n      // Recursively traverse the entire deleted tree and clean up fiber fields.\n      // This is more aggressive than ideal, and the long term goal is to only\n      // have to detach the deleted tree at the root.\n      detachFiberAfterEffects(fiber);\n\n      if (fiber === deletedSubtreeRoot) {\n        nextEffect = null;\n        return;\n      }\n    }\n\n    if (sibling !== null) {\n      sibling.return = returnFiber;\n      nextEffect = sibling;\n      return;\n    }\n\n    nextEffect = returnFiber;\n  }\n}\n\nfunction commitPassiveUnmountInsideDeletedTreeOnFiber(current, nearestMountedAncestor) {\n  switch (current.tag) {\n    case FunctionComponent:\n    case ForwardRef:\n    case SimpleMemoComponent:\n      {\n        if ( current.mode & ProfileMode) {\n          startPassiveEffectTimer();\n          commitHookEffectListUnmount(Passive$1, current, nearestMountedAncestor);\n          recordPassiveEffectDuration(current);\n        } else {\n          commitHookEffectListUnmount(Passive$1, current, nearestMountedAncestor);\n        }\n\n        break;\n      }\n  }\n} // TODO: Reuse reappearLayoutEffects traversal here?\n\n\nfunction invokeLayoutEffectMountInDEV(fiber) {\n  {\n    // We don't need to re-check StrictEffectsMode here.\n    // This function is only called if that check has already passed.\n    switch (fiber.tag) {\n      case FunctionComponent:\n      case ForwardRef:\n      case SimpleMemoComponent:\n        {\n          try {\n            commitHookEffectListMount(Layout | HasEffect, fiber);\n          } catch (error) {\n            captureCommitPhaseError(fiber, fiber.return, error);\n          }\n\n          break;\n        }\n\n      case ClassComponent:\n        {\n          var instance = fiber.stateNode;\n\n          try {\n            instance.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(fiber, fiber.return, error);\n          }\n\n          break;\n        }\n    }\n  }\n}\n\nfunction invokePassiveEffectMountInDEV(fiber) {\n  {\n    // We don't need to re-check StrictEffectsMode here.\n    // This function is only called if that check has already passed.\n    switch (fiber.tag) {\n      case FunctionComponent:\n      case ForwardRef:\n      case SimpleMemoComponent:\n        {\n          try {\n            commitHookEffectListMount(Passive$1 | HasEffect, fiber);\n          } catch (error) {\n            captureCommitPhaseError(fiber, fiber.return, error);\n          }\n\n          break;\n        }\n    }\n  }\n}\n\nfunction invokeLayoutEffectUnmountInDEV(fiber) {\n  {\n    // We don't need to re-check StrictEffectsMode here.\n    // This function is only called if that check has already passed.\n    switch (fiber.tag) {\n      case FunctionComponent:\n      case ForwardRef:\n      case SimpleMemoComponent:\n        {\n          try {\n            commitHookEffectListUnmount(Layout | HasEffect, fiber, fiber.return);\n          } catch (error) {\n            captureCommitPhaseError(fiber, fiber.return, error);\n          }\n\n          break;\n        }\n\n      case ClassComponent:\n        {\n          var instance = fiber.stateNode;\n\n          if (typeof instance.componentWillUnmount === 'function') {\n            safelyCallComponentWillUnmount(fiber, fiber.return, instance);\n          }\n\n          break;\n        }\n    }\n  }\n}\n\nfunction invokePassiveEffectUnmountInDEV(fiber) {\n  {\n    // We don't need to re-check StrictEffectsMode here.\n    // This function is only called if that check has already passed.\n    switch (fiber.tag) {\n      case FunctionComponent:\n      case ForwardRef:\n      case SimpleMemoComponent:\n        {\n          try {\n            commitHookEffectListUnmount(Passive$1 | HasEffect, fiber, fiber.return);\n          } catch (error) {\n            captureCommitPhaseError(fiber, fiber.return, error);\n          }\n        }\n    }\n  }\n}\n\nvar COMPONENT_TYPE = 0;\nvar HAS_PSEUDO_CLASS_TYPE = 1;\nvar ROLE_TYPE = 2;\nvar TEST_NAME_TYPE = 3;\nvar TEXT_TYPE = 4;\n\nif (typeof Symbol === 'function' && Symbol.for) {\n  var symbolFor = Symbol.for;\n  COMPONENT_TYPE = symbolFor('selector.component');\n  HAS_PSEUDO_CLASS_TYPE = symbolFor('selector.has_pseudo_class');\n  ROLE_TYPE = symbolFor('selector.role');\n  TEST_NAME_TYPE = symbolFor('selector.test_id');\n  TEXT_TYPE = symbolFor('selector.text');\n}\nvar commitHooks = [];\nfunction onCommitRoot$1() {\n  {\n    commitHooks.forEach(function (commitHook) {\n      return commitHook();\n    });\n  }\n}\n\nvar ReactCurrentActQueue = ReactSharedInternals.ReactCurrentActQueue;\nfunction isLegacyActEnvironment(fiber) {\n  {\n    // Legacy mode. We preserve the behavior of React 17's act. It assumes an\n    // act environment whenever `jest` is defined, but you can still turn off\n    // spurious warnings by setting IS_REACT_ACT_ENVIRONMENT explicitly\n    // to false.\n    var isReactActEnvironmentGlobal = // $FlowExpectedError – Flow doesn't know about IS_REACT_ACT_ENVIRONMENT global\n    typeof IS_REACT_ACT_ENVIRONMENT !== 'undefined' ? IS_REACT_ACT_ENVIRONMENT : undefined; // $FlowExpectedError - Flow doesn't know about jest\n\n    var jestIsDefined = typeof jest !== 'undefined';\n    return  jestIsDefined && isReactActEnvironmentGlobal !== false;\n  }\n}\nfunction isConcurrentActEnvironment() {\n  {\n    var isReactActEnvironmentGlobal = // $FlowExpectedError – Flow doesn't know about IS_REACT_ACT_ENVIRONMENT global\n    typeof IS_REACT_ACT_ENVIRONMENT !== 'undefined' ? IS_REACT_ACT_ENVIRONMENT : undefined;\n\n    if (!isReactActEnvironmentGlobal && ReactCurrentActQueue.current !== null) {\n      // TODO: Include link to relevant documentation page.\n      error('The current testing environment is not configured to support ' + 'act(...)');\n    }\n\n    return isReactActEnvironmentGlobal;\n  }\n}\n\nvar ceil = Math.ceil;\nvar ReactCurrentDispatcher$2 = ReactSharedInternals.ReactCurrentDispatcher,\n    ReactCurrentOwner$2 = ReactSharedInternals.ReactCurrentOwner,\n    ReactCurrentBatchConfig$3 = ReactSharedInternals.ReactCurrentBatchConfig,\n    ReactCurrentActQueue$1 = ReactSharedInternals.ReactCurrentActQueue;\nvar NoContext =\n/*             */\n0;\nvar BatchedContext =\n/*               */\n1;\nvar RenderContext =\n/*                */\n2;\nvar CommitContext =\n/*                */\n4;\nvar RootInProgress = 0;\nvar RootFatalErrored = 1;\nvar RootErrored = 2;\nvar RootSuspended = 3;\nvar RootSuspendedWithDelay = 4;\nvar RootCompleted = 5;\nvar RootDidNotComplete = 6; // Describes where we are in the React execution stack\n\nvar executionContext = NoContext; // The root we're working on\n\nvar workInProgressRoot = null; // The fiber we're working on\n\nvar workInProgress = null; // The lanes we're rendering\n\nvar workInProgressRootRenderLanes = NoLanes; // Stack that allows components to change the render lanes for its subtree\n// This is a superset of the lanes we started working on at the root. The only\n// case where it's different from `workInProgressRootRenderLanes` is when we\n// enter a subtree that is hidden and needs to be unhidden: Suspense and\n// Offscreen component.\n//\n// Most things in the work loop should deal with workInProgressRootRenderLanes.\n// Most things in begin/complete phases should deal with subtreeRenderLanes.\n\nvar subtreeRenderLanes = NoLanes;\nvar subtreeRenderLanesCursor = createCursor(NoLanes); // Whether to root completed, errored, suspended, etc.\n\nvar workInProgressRootExitStatus = RootInProgress; // A fatal error, if one is thrown\n\nvar workInProgressRootFatalError = null; // \"Included\" lanes refer to lanes that were worked on during this render. It's\n// slightly different than `renderLanes` because `renderLanes` can change as you\n// enter and exit an Offscreen tree. This value is the combination of all render\n// lanes for the entire render phase.\n\nvar workInProgressRootIncludedLanes = NoLanes; // The work left over by components that were visited during this render. Only\n// includes unprocessed updates, not work in bailed out children.\n\nvar workInProgressRootSkippedLanes = NoLanes; // Lanes that were updated (in an interleaved event) during this render.\n\nvar workInProgressRootInterleavedUpdatedLanes = NoLanes; // Lanes that were updated during the render phase (*not* an interleaved event).\n\nvar workInProgressRootPingedLanes = NoLanes; // Errors that are thrown during the render phase.\n\nvar workInProgressRootConcurrentErrors = null; // These are errors that we recovered from without surfacing them to the UI.\n// We will log them once the tree commits.\n\nvar workInProgressRootRecoverableErrors = null; // The most recent time we committed a fallback. This lets us ensure a train\n// model where we don't commit new loading states in too quick succession.\n\nvar globalMostRecentFallbackTime = 0;\nvar FALLBACK_THROTTLE_MS = 500; // The absolute time for when we should start giving up on rendering\n// more and prefer CPU suspense heuristics instead.\n\nvar workInProgressRootRenderTargetTime = Infinity; // How long a render is supposed to take before we start following CPU\n// suspense heuristics and opt out of rendering more content.\n\nvar RENDER_TIMEOUT_MS = 500;\nvar workInProgressTransitions = null;\n\nfunction resetRenderTimer() {\n  workInProgressRootRenderTargetTime = now() + RENDER_TIMEOUT_MS;\n}\n\nfunction getRenderTargetTime() {\n  return workInProgressRootRenderTargetTime;\n}\nvar hasUncaughtError = false;\nvar firstUncaughtError = null;\nvar legacyErrorBoundariesThatAlreadyFailed = null; // Only used when enableProfilerNestedUpdateScheduledHook is true;\nvar rootDoesHavePassiveEffects = false;\nvar rootWithPendingPassiveEffects = null;\nvar pendingPassiveEffectsLanes = NoLanes;\nvar pendingPassiveProfilerEffects = [];\nvar pendingPassiveTransitions = null; // Use these to prevent an infinite loop of nested updates\n\nvar NESTED_UPDATE_LIMIT = 50;\nvar nestedUpdateCount = 0;\nvar rootWithNestedUpdates = null;\nvar isFlushingPassiveEffects = false;\nvar didScheduleUpdateDuringPassiveEffects = false;\nvar NESTED_PASSIVE_UPDATE_LIMIT = 50;\nvar nestedPassiveUpdateCount = 0;\nvar rootWithPassiveNestedUpdates = null; // If two updates are scheduled within the same event, we should treat their\n// event times as simultaneous, even if the actual clock time has advanced\n// between the first and second call.\n\nvar currentEventTime = NoTimestamp;\nvar currentEventTransitionLane = NoLanes;\nvar isRunningInsertionEffect = false;\nfunction getWorkInProgressRoot() {\n  return workInProgressRoot;\n}\nfunction requestEventTime() {\n  if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n    // We're inside React, so it's fine to read the actual time.\n    return now();\n  } // We're not inside React, so we may be in the middle of a browser event.\n\n\n  if (currentEventTime !== NoTimestamp) {\n    // Use the same start time for all updates until we enter React again.\n    return currentEventTime;\n  } // This is the first update since React yielded. Compute a new start time.\n\n\n  currentEventTime = now();\n  return currentEventTime;\n}\nfunction requestUpdateLane(fiber) {\n  // Special cases\n  var mode = fiber.mode;\n\n  if ((mode & ConcurrentMode) === NoMode) {\n    return SyncLane;\n  } else if ( (executionContext & RenderContext) !== NoContext && workInProgressRootRenderLanes !== NoLanes) {\n    // This is a render phase update. These are not officially supported. The\n    // old behavior is to give this the same \"thread\" (lanes) as\n    // whatever is currently rendering. So if you call `setState` on a component\n    // that happens later in the same render, it will flush. Ideally, we want to\n    // remove the special case and treat them as if they came from an\n    // interleaved event. Regardless, this pattern is not officially supported.\n    // This behavior is only a fallback. The flag only exists until we can roll\n    // out the setState warning, since existing code might accidentally rely on\n    // the current behavior.\n    return pickArbitraryLane(workInProgressRootRenderLanes);\n  }\n\n  var isTransition = requestCurrentTransition() !== NoTransition;\n\n  if (isTransition) {\n    if ( ReactCurrentBatchConfig$3.transition !== null) {\n      var transition = ReactCurrentBatchConfig$3.transition;\n\n      if (!transition._updatedFibers) {\n        transition._updatedFibers = new Set();\n      }\n\n      transition._updatedFibers.add(fiber);\n    } // The algorithm for assigning an update to a lane should be stable for all\n    // updates at the same priority within the same event. To do this, the\n    // inputs to the algorithm must be the same.\n    //\n    // The trick we use is to cache the first of each of these inputs within an\n    // event. Then reset the cached values once we can be sure the event is\n    // over. Our heuristic for that is whenever we enter a concurrent work loop.\n\n\n    if (currentEventTransitionLane === NoLane) {\n      // All transitions within the same event are assigned the same lane.\n      currentEventTransitionLane = claimNextTransitionLane();\n    }\n\n    return currentEventTransitionLane;\n  } // Updates originating inside certain React methods, like flushSync, have\n  // their priority set by tracking it with a context variable.\n  //\n  // The opaque type returned by the host config is internally a lane, so we can\n  // use that directly.\n  // TODO: Move this type conversion to the event priority module.\n\n\n  var updateLane = getCurrentUpdatePriority();\n\n  if (updateLane !== NoLane) {\n    return updateLane;\n  } // This update originated outside React. Ask the host environment for an\n  // appropriate priority, based on the type of event.\n  //\n  // The opaque type returned by the host config is internally a lane, so we can\n  // use that directly.\n  // TODO: Move this type conversion to the event priority module.\n\n\n  var eventLane = getCurrentEventPriority();\n  return eventLane;\n}\n\nfunction requestRetryLane(fiber) {\n  // This is a fork of `requestUpdateLane` designed specifically for Suspense\n  // \"retries\" — a special update that attempts to flip a Suspense boundary\n  // from its placeholder state to its primary/resolved state.\n  // Special cases\n  var mode = fiber.mode;\n\n  if ((mode & ConcurrentMode) === NoMode) {\n    return SyncLane;\n  }\n\n  return claimNextRetryLane();\n}\n\nfunction scheduleUpdateOnFiber(root, fiber, lane, eventTime) {\n  checkForNestedUpdates();\n\n  {\n    if (isRunningInsertionEffect) {\n      error('useInsertionEffect must not schedule updates.');\n    }\n  }\n\n  {\n    if (isFlushingPassiveEffects) {\n      didScheduleUpdateDuringPassiveEffects = true;\n    }\n  } // Mark that the root has a pending update.\n\n\n  markRootUpdated(root, lane, eventTime);\n\n  if ((executionContext & RenderContext) !== NoLanes && root === workInProgressRoot) {\n    // This update was dispatched during the render phase. This is a mistake\n    // if the update originates from user space (with the exception of local\n    // hook updates, which are handled differently and don't reach this\n    // function), but there are some internal React features that use this as\n    // an implementation detail, like selective hydration.\n    warnAboutRenderPhaseUpdatesInDEV(fiber); // Track lanes that were updated during the render phase\n  } else {\n    // This is a normal update, scheduled from outside the render phase. For\n    // example, during an input event.\n    {\n      if (isDevToolsPresent) {\n        addFiberToLanesMap(root, fiber, lane);\n      }\n    }\n\n    warnIfUpdatesNotWrappedWithActDEV(fiber);\n\n    if (root === workInProgressRoot) {\n      // Received an update to a tree that's in the middle of rendering. Mark\n      // that there was an interleaved update work on this root. Unless the\n      // `deferRenderPhaseUpdateToNextBatch` flag is off and this is a render\n      // phase update. In that case, we don't treat render phase updates as if\n      // they were interleaved, for backwards compat reasons.\n      if ( (executionContext & RenderContext) === NoContext) {\n        workInProgressRootInterleavedUpdatedLanes = mergeLanes(workInProgressRootInterleavedUpdatedLanes, lane);\n      }\n\n      if (workInProgressRootExitStatus === RootSuspendedWithDelay) {\n        // The root already suspended with a delay, which means this render\n        // definitely won't finish. Since we have a new update, let's mark it as\n        // suspended now, right before marking the incoming update. This has the\n        // effect of interrupting the current render and switching to the update.\n        // TODO: Make sure this doesn't override pings that happen while we've\n        // already started rendering.\n        markRootSuspended$1(root, workInProgressRootRenderLanes);\n      }\n    }\n\n    ensureRootIsScheduled(root, eventTime);\n\n    if (lane === SyncLane && executionContext === NoContext && (fiber.mode & ConcurrentMode) === NoMode && // Treat `act` as if it's inside `batchedUpdates`, even in legacy mode.\n    !( ReactCurrentActQueue$1.isBatchingLegacy)) {\n      // Flush the synchronous work now, unless we're already working or inside\n      // a batch. This is intentionally inside scheduleUpdateOnFiber instead of\n      // scheduleCallbackForFiber to preserve the ability to schedule a callback\n      // without immediately flushing it. We only do this for user-initiated\n      // updates, to preserve historical behavior of legacy mode.\n      resetRenderTimer();\n      flushSyncCallbacksOnlyInLegacyMode();\n    }\n  }\n}\nfunction scheduleInitialHydrationOnRoot(root, lane, eventTime) {\n  // This is a special fork of scheduleUpdateOnFiber that is only used to\n  // schedule the initial hydration of a root that has just been created. Most\n  // of the stuff in scheduleUpdateOnFiber can be skipped.\n  //\n  // The main reason for this separate path, though, is to distinguish the\n  // initial children from subsequent updates. In fully client-rendered roots\n  // (createRoot instead of hydrateRoot), all top-level renders are modeled as\n  // updates, but hydration roots are special because the initial render must\n  // match what was rendered on the server.\n  var current = root.current;\n  current.lanes = lane;\n  markRootUpdated(root, lane, eventTime);\n  ensureRootIsScheduled(root, eventTime);\n}\nfunction isUnsafeClassRenderPhaseUpdate(fiber) {\n  // Check if this is a render phase update. Only called by class components,\n  // which special (deprecated) behavior for UNSAFE_componentWillReceive props.\n  return (// TODO: Remove outdated deferRenderPhaseUpdateToNextBatch experiment. We\n    // decided not to enable it.\n     (executionContext & RenderContext) !== NoContext\n  );\n} // Use this function to schedule a task for a root. There's only one task per\n// root; if a task was already scheduled, we'll check to make sure the priority\n// of the existing task is the same as the priority of the next level that the\n// root has work on. This function is called on every update, and right before\n// exiting a task.\n\nfunction ensureRootIsScheduled(root, currentTime) {\n  var existingCallbackNode = root.callbackNode; // Check if any lanes are being starved by other work. If so, mark them as\n  // expired so we know to work on those next.\n\n  markStarvedLanesAsExpired(root, currentTime); // Determine the next lanes to work on, and their priority.\n\n  var nextLanes = getNextLanes(root, root === workInProgressRoot ? workInProgressRootRenderLanes : NoLanes);\n\n  if (nextLanes === NoLanes) {\n    // Special case: There's nothing to work on.\n    if (existingCallbackNode !== null) {\n      cancelCallback$1(existingCallbackNode);\n    }\n\n    root.callbackNode = null;\n    root.callbackPriority = NoLane;\n    return;\n  } // We use the highest priority lane to represent the priority of the callback.\n\n\n  var newCallbackPriority = getHighestPriorityLane(nextLanes); // Check if there's an existing task. We may be able to reuse it.\n\n  var existingCallbackPriority = root.callbackPriority;\n\n  if (existingCallbackPriority === newCallbackPriority && // Special case related to `act`. If the currently scheduled task is a\n  // Scheduler task, rather than an `act` task, cancel it and re-scheduled\n  // on the `act` queue.\n  !( ReactCurrentActQueue$1.current !== null && existingCallbackNode !== fakeActCallbackNode)) {\n    {\n      // If we're going to re-use an existing task, it needs to exist.\n      // Assume that discrete update microtasks are non-cancellable and null.\n      // TODO: Temporary until we confirm this warning is not fired.\n      if (existingCallbackNode == null && existingCallbackPriority !== SyncLane) {\n        error('Expected scheduled callback to exist. This error is likely caused by a bug in React. Please file an issue.');\n      }\n    } // The priority hasn't changed. We can reuse the existing task. Exit.\n\n\n    return;\n  }\n\n  if (existingCallbackNode != null) {\n    // Cancel the existing callback. We'll schedule a new one below.\n    cancelCallback$1(existingCallbackNode);\n  } // Schedule a new callback.\n\n\n  var newCallbackNode;\n\n  if (newCallbackPriority === SyncLane) {\n    // Special case: Sync React callbacks are scheduled on a special\n    // internal queue\n    if (root.tag === LegacyRoot) {\n      if ( ReactCurrentActQueue$1.isBatchingLegacy !== null) {\n        ReactCurrentActQueue$1.didScheduleLegacyUpdate = true;\n      }\n\n      scheduleLegacySyncCallback(performSyncWorkOnRoot.bind(null, root));\n    } else {\n      scheduleSyncCallback(performSyncWorkOnRoot.bind(null, root));\n    }\n\n    {\n      // Flush the queue in a microtask.\n      if ( ReactCurrentActQueue$1.current !== null) {\n        // Inside `act`, use our internal `act` queue so that these get flushed\n        // at the end of the current scope even when using the sync version\n        // of `act`.\n        ReactCurrentActQueue$1.current.push(flushSyncCallbacks);\n      } else {\n        scheduleMicrotask(function () {\n          // In Safari, appending an iframe forces microtasks to run.\n          // https://github.com/facebook/react/issues/22459\n          // We don't support running callbacks in the middle of render\n          // or commit so we need to check against that.\n          if ((executionContext & (RenderContext | CommitContext)) === NoContext) {\n            // Note that this would still prematurely flush the callbacks\n            // if this happens outside render or commit phase (e.g. in an event).\n            flushSyncCallbacks();\n          }\n        });\n      }\n    }\n\n    newCallbackNode = null;\n  } else {\n    var schedulerPriorityLevel;\n\n    switch (lanesToEventPriority(nextLanes)) {\n      case DiscreteEventPriority:\n        schedulerPriorityLevel = ImmediatePriority;\n        break;\n\n      case ContinuousEventPriority:\n        schedulerPriorityLevel = UserBlockingPriority;\n        break;\n\n      case DefaultEventPriority:\n        schedulerPriorityLevel = NormalPriority;\n        break;\n\n      case IdleEventPriority:\n        schedulerPriorityLevel = IdlePriority;\n        break;\n\n      default:\n        schedulerPriorityLevel = NormalPriority;\n        break;\n    }\n\n    newCallbackNode = scheduleCallback$1(schedulerPriorityLevel, performConcurrentWorkOnRoot.bind(null, root));\n  }\n\n  root.callbackPriority = newCallbackPriority;\n  root.callbackNode = newCallbackNode;\n} // This is the entry point for every concurrent task, i.e. anything that\n// goes through Scheduler.\n\n\nfunction performConcurrentWorkOnRoot(root, didTimeout) {\n  {\n    resetNestedUpdateFlag();\n  } // Since we know we're in a React event, we can clear the current\n  // event time. The next update will compute a new event time.\n\n\n  currentEventTime = NoTimestamp;\n  currentEventTransitionLane = NoLanes;\n\n  if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n    throw new Error('Should not already be working.');\n  } // Flush any pending passive effects before deciding which lanes to work on,\n  // in case they schedule additional work.\n\n\n  var originalCallbackNode = root.callbackNode;\n  var didFlushPassiveEffects = flushPassiveEffects();\n\n  if (didFlushPassiveEffects) {\n    // Something in the passive effect phase may have canceled the current task.\n    // Check if the task node for this root was changed.\n    if (root.callbackNode !== originalCallbackNode) {\n      // The current task was canceled. Exit. We don't need to call\n      // `ensureRootIsScheduled` because the check above implies either that\n      // there's a new task, or that there's no remaining work on this root.\n      return null;\n    }\n  } // Determine the next lanes to work on, using the fields stored\n  // on the root.\n\n\n  var lanes = getNextLanes(root, root === workInProgressRoot ? workInProgressRootRenderLanes : NoLanes);\n\n  if (lanes === NoLanes) {\n    // Defensive coding. This is never expected to happen.\n    return null;\n  } // We disable time-slicing in some cases: if the work has been CPU-bound\n  // for too long (\"expired\" work, to prevent starvation), or we're in\n  // sync-updates-by-default mode.\n  // TODO: We only check `didTimeout` defensively, to account for a Scheduler\n  // bug we're still investigating. Once the bug in Scheduler is fixed,\n  // we can remove this, since we track expiration ourselves.\n\n\n  var shouldTimeSlice = !includesBlockingLane(root, lanes) && !includesExpiredLane(root, lanes) && ( !didTimeout);\n  var exitStatus = shouldTimeSlice ? renderRootConcurrent(root, lanes) : renderRootSync(root, lanes);\n\n  if (exitStatus !== RootInProgress) {\n    if (exitStatus === RootErrored) {\n      // If something threw an error, try rendering one more time. We'll\n      // render synchronously to block concurrent data mutations, and we'll\n      // includes all pending updates are included. If it still fails after\n      // the second attempt, we'll give up and commit the resulting tree.\n      var errorRetryLanes = getLanesToRetrySynchronouslyOnError(root);\n\n      if (errorRetryLanes !== NoLanes) {\n        lanes = errorRetryLanes;\n        exitStatus = recoverFromConcurrentError(root, errorRetryLanes);\n      }\n    }\n\n    if (exitStatus === RootFatalErrored) {\n      var fatalError = workInProgressRootFatalError;\n      prepareFreshStack(root, NoLanes);\n      markRootSuspended$1(root, lanes);\n      ensureRootIsScheduled(root, now());\n      throw fatalError;\n    }\n\n    if (exitStatus === RootDidNotComplete) {\n      // The render unwound without completing the tree. This happens in special\n      // cases where need to exit the current render without producing a\n      // consistent tree or committing.\n      //\n      // This should only happen during a concurrent render, not a discrete or\n      // synchronous update. We should have already checked for this when we\n      // unwound the stack.\n      markRootSuspended$1(root, lanes);\n    } else {\n      // The render completed.\n      // Check if this render may have yielded to a concurrent event, and if so,\n      // confirm that any newly rendered stores are consistent.\n      // TODO: It's possible that even a concurrent render may never have yielded\n      // to the main thread, if it was fast enough, or if it expired. We could\n      // skip the consistency check in that case, too.\n      var renderWasConcurrent = !includesBlockingLane(root, lanes);\n      var finishedWork = root.current.alternate;\n\n      if (renderWasConcurrent && !isRenderConsistentWithExternalStores(finishedWork)) {\n        // A store was mutated in an interleaved event. Render again,\n        // synchronously, to block further mutations.\n        exitStatus = renderRootSync(root, lanes); // We need to check again if something threw\n\n        if (exitStatus === RootErrored) {\n          var _errorRetryLanes = getLanesToRetrySynchronouslyOnError(root);\n\n          if (_errorRetryLanes !== NoLanes) {\n            lanes = _errorRetryLanes;\n            exitStatus = recoverFromConcurrentError(root, _errorRetryLanes); // We assume the tree is now consistent because we didn't yield to any\n            // concurrent events.\n          }\n        }\n\n        if (exitStatus === RootFatalErrored) {\n          var _fatalError = workInProgressRootFatalError;\n          prepareFreshStack(root, NoLanes);\n          markRootSuspended$1(root, lanes);\n          ensureRootIsScheduled(root, now());\n          throw _fatalError;\n        }\n      } // We now have a consistent tree. The next step is either to commit it,\n      // or, if something suspended, wait to commit it after a timeout.\n\n\n      root.finishedWork = finishedWork;\n      root.finishedLanes = lanes;\n      finishConcurrentRender(root, exitStatus, lanes);\n    }\n  }\n\n  ensureRootIsScheduled(root, now());\n\n  if (root.callbackNode === originalCallbackNode) {\n    // The task node scheduled for this root is the same one that's\n    // currently executed. Need to return a continuation.\n    return performConcurrentWorkOnRoot.bind(null, root);\n  }\n\n  return null;\n}\n\nfunction recoverFromConcurrentError(root, errorRetryLanes) {\n  // If an error occurred during hydration, discard server response and fall\n  // back to client side render.\n  // Before rendering again, save the errors from the previous attempt.\n  var errorsFromFirstAttempt = workInProgressRootConcurrentErrors;\n\n  if (isRootDehydrated(root)) {\n    // The shell failed to hydrate. Set a flag to force a client rendering\n    // during the next attempt. To do this, we call prepareFreshStack now\n    // to create the root work-in-progress fiber. This is a bit weird in terms\n    // of factoring, because it relies on renderRootSync not calling\n    // prepareFreshStack again in the call below, which happens because the\n    // root and lanes haven't changed.\n    //\n    // TODO: I think what we should do is set ForceClientRender inside\n    // throwException, like we do for nested Suspense boundaries. The reason\n    // it's here instead is so we can switch to the synchronous work loop, too.\n    // Something to consider for a future refactor.\n    var rootWorkInProgress = prepareFreshStack(root, errorRetryLanes);\n    rootWorkInProgress.flags |= ForceClientRender;\n\n    {\n      errorHydratingContainer(root.containerInfo);\n    }\n  }\n\n  var exitStatus = renderRootSync(root, errorRetryLanes);\n\n  if (exitStatus !== RootErrored) {\n    // Successfully finished rendering on retry\n    // The errors from the failed first attempt have been recovered. Add\n    // them to the collection of recoverable errors. We'll log them in the\n    // commit phase.\n    var errorsFromSecondAttempt = workInProgressRootRecoverableErrors;\n    workInProgressRootRecoverableErrors = errorsFromFirstAttempt; // The errors from the second attempt should be queued after the errors\n    // from the first attempt, to preserve the causal sequence.\n\n    if (errorsFromSecondAttempt !== null) {\n      queueRecoverableErrors(errorsFromSecondAttempt);\n    }\n  }\n\n  return exitStatus;\n}\n\nfunction queueRecoverableErrors(errors) {\n  if (workInProgressRootRecoverableErrors === null) {\n    workInProgressRootRecoverableErrors = errors;\n  } else {\n    workInProgressRootRecoverableErrors.push.apply(workInProgressRootRecoverableErrors, errors);\n  }\n}\n\nfunction finishConcurrentRender(root, exitStatus, lanes) {\n  switch (exitStatus) {\n    case RootInProgress:\n    case RootFatalErrored:\n      {\n        throw new Error('Root did not complete. This is a bug in React.');\n      }\n    // Flow knows about invariant, so it complains if I add a break\n    // statement, but eslint doesn't know about invariant, so it complains\n    // if I do. eslint-disable-next-line no-fallthrough\n\n    case RootErrored:\n      {\n        // We should have already attempted to retry this tree. If we reached\n        // this point, it errored again. Commit it.\n        commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions);\n        break;\n      }\n\n    case RootSuspended:\n      {\n        markRootSuspended$1(root, lanes); // We have an acceptable loading state. We need to figure out if we\n        // should immediately commit it or wait a bit.\n\n        if (includesOnlyRetries(lanes) && // do not delay if we're inside an act() scope\n        !shouldForceFlushFallbacksInDEV()) {\n          // This render only included retries, no updates. Throttle committing\n          // retries so that we don't show too many loading states too quickly.\n          var msUntilTimeout = globalMostRecentFallbackTime + FALLBACK_THROTTLE_MS - now(); // Don't bother with a very short suspense time.\n\n          if (msUntilTimeout > 10) {\n            var nextLanes = getNextLanes(root, NoLanes);\n\n            if (nextLanes !== NoLanes) {\n              // There's additional work on this root.\n              break;\n            }\n\n            var suspendedLanes = root.suspendedLanes;\n\n            if (!isSubsetOfLanes(suspendedLanes, lanes)) {\n              // We should prefer to render the fallback of at the last\n              // suspended level. Ping the last suspended level to try\n              // rendering it again.\n              // FIXME: What if the suspended lanes are Idle? Should not restart.\n              var eventTime = requestEventTime();\n              markRootPinged(root, suspendedLanes);\n              break;\n            } // The render is suspended, it hasn't timed out, and there's no\n            // lower priority work to do. Instead of committing the fallback\n            // immediately, wait for more data to arrive.\n\n\n            root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root, workInProgressRootRecoverableErrors, workInProgressTransitions), msUntilTimeout);\n            break;\n          }\n        } // The work expired. Commit immediately.\n\n\n        commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions);\n        break;\n      }\n\n    case RootSuspendedWithDelay:\n      {\n        markRootSuspended$1(root, lanes);\n\n        if (includesOnlyTransitions(lanes)) {\n          // This is a transition, so we should exit without committing a\n          // placeholder and without scheduling a timeout. Delay indefinitely\n          // until we receive more data.\n          break;\n        }\n\n        if (!shouldForceFlushFallbacksInDEV()) {\n          // This is not a transition, but we did trigger an avoided state.\n          // Schedule a placeholder to display after a short delay, using the Just\n          // Noticeable Difference.\n          // TODO: Is the JND optimization worth the added complexity? If this is\n          // the only reason we track the event time, then probably not.\n          // Consider removing.\n          var mostRecentEventTime = getMostRecentEventTime(root, lanes);\n          var eventTimeMs = mostRecentEventTime;\n          var timeElapsedMs = now() - eventTimeMs;\n\n          var _msUntilTimeout = jnd(timeElapsedMs) - timeElapsedMs; // Don't bother with a very short suspense time.\n\n\n          if (_msUntilTimeout > 10) {\n            // Instead of committing the fallback immediately, wait for more data\n            // to arrive.\n            root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root, workInProgressRootRecoverableErrors, workInProgressTransitions), _msUntilTimeout);\n            break;\n          }\n        } // Commit the placeholder.\n\n\n        commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions);\n        break;\n      }\n\n    case RootCompleted:\n      {\n        // The work completed. Ready to commit.\n        commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions);\n        break;\n      }\n\n    default:\n      {\n        throw new Error('Unknown root exit status.');\n      }\n  }\n}\n\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n  // Search the rendered tree for external store reads, and check whether the\n  // stores were mutated in a concurrent event. Intentionally using an iterative\n  // loop instead of recursion so we can exit early.\n  var node = finishedWork;\n\n  while (true) {\n    if (node.flags & StoreConsistency) {\n      var updateQueue = node.updateQueue;\n\n      if (updateQueue !== null) {\n        var checks = updateQueue.stores;\n\n        if (checks !== null) {\n          for (var i = 0; i < checks.length; i++) {\n            var check = checks[i];\n            var getSnapshot = check.getSnapshot;\n            var renderedValue = check.value;\n\n            try {\n              if (!objectIs(getSnapshot(), renderedValue)) {\n                // Found an inconsistent store.\n                return false;\n              }\n            } catch (error) {\n              // If `getSnapshot` throws, return `false`. This will schedule\n              // a re-render, and the error will be rethrown during render.\n              return false;\n            }\n          }\n        }\n      }\n    }\n\n    var child = node.child;\n\n    if (node.subtreeFlags & StoreConsistency && child !== null) {\n      child.return = node;\n      node = child;\n      continue;\n    }\n\n    if (node === finishedWork) {\n      return true;\n    }\n\n    while (node.sibling === null) {\n      if (node.return === null || node.return === finishedWork) {\n        return true;\n      }\n\n      node = node.return;\n    }\n\n    node.sibling.return = node.return;\n    node = node.sibling;\n  } // Flow doesn't know this is unreachable, but eslint does\n  // eslint-disable-next-line no-unreachable\n\n\n  return true;\n}\n\nfunction markRootSuspended$1(root, suspendedLanes) {\n  // When suspending, we should always exclude lanes that were pinged or (more\n  // rarely, since we try to avoid it) updated during the render phase.\n  // TODO: Lol maybe there's a better way to factor this besides this\n  // obnoxiously named function :)\n  suspendedLanes = removeLanes(suspendedLanes, workInProgressRootPingedLanes);\n  suspendedLanes = removeLanes(suspendedLanes, workInProgressRootInterleavedUpdatedLanes);\n  markRootSuspended(root, suspendedLanes);\n} // This is the entry point for synchronous tasks that don't go\n// through Scheduler\n\n\nfunction performSyncWorkOnRoot(root) {\n  {\n    syncNestedUpdateFlag();\n  }\n\n  if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n    throw new Error('Should not already be working.');\n  }\n\n  flushPassiveEffects();\n  var lanes = getNextLanes(root, NoLanes);\n\n  if (!includesSomeLane(lanes, SyncLane)) {\n    // There's no remaining sync work left.\n    ensureRootIsScheduled(root, now());\n    return null;\n  }\n\n  var exitStatus = renderRootSync(root, lanes);\n\n  if (root.tag !== LegacyRoot && exitStatus === RootErrored) {\n    // If something threw an error, try rendering one more time. We'll render\n    // synchronously to block concurrent data mutations, and we'll includes\n    // all pending updates are included. If it still fails after the second\n    // attempt, we'll give up and commit the resulting tree.\n    var errorRetryLanes = getLanesToRetrySynchronouslyOnError(root);\n\n    if (errorRetryLanes !== NoLanes) {\n      lanes = errorRetryLanes;\n      exitStatus = recoverFromConcurrentError(root, errorRetryLanes);\n    }\n  }\n\n  if (exitStatus === RootFatalErrored) {\n    var fatalError = workInProgressRootFatalError;\n    prepareFreshStack(root, NoLanes);\n    markRootSuspended$1(root, lanes);\n    ensureRootIsScheduled(root, now());\n    throw fatalError;\n  }\n\n  if (exitStatus === RootDidNotComplete) {\n    throw new Error('Root did not complete. This is a bug in React.');\n  } // We now have a consistent tree. Because this is a sync render, we\n  // will commit it even if something suspended.\n\n\n  var finishedWork = root.current.alternate;\n  root.finishedWork = finishedWork;\n  root.finishedLanes = lanes;\n  commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions); // Before exiting, make sure there's a callback scheduled for the next\n  // pending level.\n\n  ensureRootIsScheduled(root, now());\n  return null;\n}\n\nfunction flushRoot(root, lanes) {\n  if (lanes !== NoLanes) {\n    markRootEntangled(root, mergeLanes(lanes, SyncLane));\n    ensureRootIsScheduled(root, now());\n\n    if ((executionContext & (RenderContext | CommitContext)) === NoContext) {\n      resetRenderTimer();\n      flushSyncCallbacks();\n    }\n  }\n}\nfunction batchedUpdates$1(fn, a) {\n  var prevExecutionContext = executionContext;\n  executionContext |= BatchedContext;\n\n  try {\n    return fn(a);\n  } finally {\n    executionContext = prevExecutionContext; // If there were legacy sync updates, flush them at the end of the outer\n    // most batchedUpdates-like method.\n\n    if (executionContext === NoContext && // Treat `act` as if it's inside `batchedUpdates`, even in legacy mode.\n    !( ReactCurrentActQueue$1.isBatchingLegacy)) {\n      resetRenderTimer();\n      flushSyncCallbacksOnlyInLegacyMode();\n    }\n  }\n}\nfunction discreteUpdates(fn, a, b, c, d) {\n  var previousPriority = getCurrentUpdatePriority();\n  var prevTransition = ReactCurrentBatchConfig$3.transition;\n\n  try {\n    ReactCurrentBatchConfig$3.transition = null;\n    setCurrentUpdatePriority(DiscreteEventPriority);\n    return fn(a, b, c, d);\n  } finally {\n    setCurrentUpdatePriority(previousPriority);\n    ReactCurrentBatchConfig$3.transition = prevTransition;\n\n    if (executionContext === NoContext) {\n      resetRenderTimer();\n    }\n  }\n} // Overload the definition to the two valid signatures.\n// Warning, this opts-out of checking the function body.\n\n// eslint-disable-next-line no-redeclare\nfunction flushSync(fn) {\n  // In legacy mode, we flush pending passive effects at the beginning of the\n  // next event, not at the end of the previous one.\n  if (rootWithPendingPassiveEffects !== null && rootWithPendingPassiveEffects.tag === LegacyRoot && (executionContext & (RenderContext | CommitContext)) === NoContext) {\n    flushPassiveEffects();\n  }\n\n  var prevExecutionContext = executionContext;\n  executionContext |= BatchedContext;\n  var prevTransition = ReactCurrentBatchConfig$3.transition;\n  var previousPriority = getCurrentUpdatePriority();\n\n  try {\n    ReactCurrentBatchConfig$3.transition = null;\n    setCurrentUpdatePriority(DiscreteEventPriority);\n\n    if (fn) {\n      return fn();\n    } else {\n      return undefined;\n    }\n  } finally {\n    setCurrentUpdatePriority(previousPriority);\n    ReactCurrentBatchConfig$3.transition = prevTransition;\n    executionContext = prevExecutionContext; // Flush the immediate callbacks that were scheduled during this batch.\n    // Note that this will happen even if batchedUpdates is higher up\n    // the stack.\n\n    if ((executionContext & (RenderContext | CommitContext)) === NoContext) {\n      flushSyncCallbacks();\n    }\n  }\n}\nfunction isAlreadyRendering() {\n  // Used by the renderer to print a warning if certain APIs are called from\n  // the wrong context.\n  return  (executionContext & (RenderContext | CommitContext)) !== NoContext;\n}\nfunction pushRenderLanes(fiber, lanes) {\n  push(subtreeRenderLanesCursor, subtreeRenderLanes, fiber);\n  subtreeRenderLanes = mergeLanes(subtreeRenderLanes, lanes);\n  workInProgressRootIncludedLanes = mergeLanes(workInProgressRootIncludedLanes, lanes);\n}\nfunction popRenderLanes(fiber) {\n  subtreeRenderLanes = subtreeRenderLanesCursor.current;\n  pop(subtreeRenderLanesCursor, fiber);\n}\n\nfunction prepareFreshStack(root, lanes) {\n  root.finishedWork = null;\n  root.finishedLanes = NoLanes;\n  var timeoutHandle = root.timeoutHandle;\n\n  if (timeoutHandle !== noTimeout) {\n    // The root previous suspended and scheduled a timeout to commit a fallback\n    // state. Now that we have additional work, cancel the timeout.\n    root.timeoutHandle = noTimeout; // $FlowFixMe Complains noTimeout is not a TimeoutID, despite the check above\n\n    cancelTimeout(timeoutHandle);\n  }\n\n  if (workInProgress !== null) {\n    var interruptedWork = workInProgress.return;\n\n    while (interruptedWork !== null) {\n      var current = interruptedWork.alternate;\n      unwindInterruptedWork(current, interruptedWork);\n      interruptedWork = interruptedWork.return;\n    }\n  }\n\n  workInProgressRoot = root;\n  var rootWorkInProgress = createWorkInProgress(root.current, null);\n  workInProgress = rootWorkInProgress;\n  workInProgressRootRenderLanes = subtreeRenderLanes = workInProgressRootIncludedLanes = lanes;\n  workInProgressRootExitStatus = RootInProgress;\n  workInProgressRootFatalError = null;\n  workInProgressRootSkippedLanes = NoLanes;\n  workInProgressRootInterleavedUpdatedLanes = NoLanes;\n  workInProgressRootPingedLanes = NoLanes;\n  workInProgressRootConcurrentErrors = null;\n  workInProgressRootRecoverableErrors = null;\n  finishQueueingConcurrentUpdates();\n\n  {\n    ReactStrictModeWarnings.discardPendingWarnings();\n  }\n\n  return rootWorkInProgress;\n}\n\nfunction handleError(root, thrownValue) {\n  do {\n    var erroredWork = workInProgress;\n\n    try {\n      // Reset module-level state that was set during the render phase.\n      resetContextDependencies();\n      resetHooksAfterThrow();\n      resetCurrentFiber(); // TODO: I found and added this missing line while investigating a\n      // separate issue. Write a regression test using string refs.\n\n      ReactCurrentOwner$2.current = null;\n\n      if (erroredWork === null || erroredWork.return === null) {\n        // Expected to be working on a non-root fiber. This is a fatal error\n        // because there's no ancestor that can handle it; the root is\n        // supposed to capture all errors that weren't caught by an error\n        // boundary.\n        workInProgressRootExitStatus = RootFatalErrored;\n        workInProgressRootFatalError = thrownValue; // Set `workInProgress` to null. This represents advancing to the next\n        // sibling, or the parent if there are no siblings. But since the root\n        // has no siblings nor a parent, we set it to null. Usually this is\n        // handled by `completeUnitOfWork` or `unwindWork`, but since we're\n        // intentionally not calling those, we need set it here.\n        // TODO: Consider calling `unwindWork` to pop the contexts.\n\n        workInProgress = null;\n        return;\n      }\n\n      if (enableProfilerTimer && erroredWork.mode & ProfileMode) {\n        // Record the time spent rendering before an error was thrown. This\n        // avoids inaccurate Profiler durations in the case of a\n        // suspended render.\n        stopProfilerTimerIfRunningAndRecordDelta(erroredWork, true);\n      }\n\n      if (enableSchedulingProfiler) {\n        markComponentRenderStopped();\n\n        if (thrownValue !== null && typeof thrownValue === 'object' && typeof thrownValue.then === 'function') {\n          var wakeable = thrownValue;\n          markComponentSuspended(erroredWork, wakeable, workInProgressRootRenderLanes);\n        } else {\n          markComponentErrored(erroredWork, thrownValue, workInProgressRootRenderLanes);\n        }\n      }\n\n      throwException(root, erroredWork.return, erroredWork, thrownValue, workInProgressRootRenderLanes);\n      completeUnitOfWork(erroredWork);\n    } catch (yetAnotherThrownValue) {\n      // Something in the return path also threw.\n      thrownValue = yetAnotherThrownValue;\n\n      if (workInProgress === erroredWork && erroredWork !== null) {\n        // If this boundary has already errored, then we had trouble processing\n        // the error. Bubble it to the next boundary.\n        erroredWork = erroredWork.return;\n        workInProgress = erroredWork;\n      } else {\n        erroredWork = workInProgress;\n      }\n\n      continue;\n    } // Return to the normal work loop.\n\n\n    return;\n  } while (true);\n}\n\nfunction pushDispatcher() {\n  var prevDispatcher = ReactCurrentDispatcher$2.current;\n  ReactCurrentDispatcher$2.current = ContextOnlyDispatcher;\n\n  if (prevDispatcher === null) {\n    // The React isomorphic package does not include a default dispatcher.\n    // Instead the first renderer will lazily attach one, in order to give\n    // nicer error messages.\n    return ContextOnlyDispatcher;\n  } else {\n    return prevDispatcher;\n  }\n}\n\nfunction popDispatcher(prevDispatcher) {\n  ReactCurrentDispatcher$2.current = prevDispatcher;\n}\n\nfunction markCommitTimeOfFallback() {\n  globalMostRecentFallbackTime = now();\n}\nfunction markSkippedUpdateLanes(lane) {\n  workInProgressRootSkippedLanes = mergeLanes(lane, workInProgressRootSkippedLanes);\n}\nfunction renderDidSuspend() {\n  if (workInProgressRootExitStatus === RootInProgress) {\n    workInProgressRootExitStatus = RootSuspended;\n  }\n}\nfunction renderDidSuspendDelayIfPossible() {\n  if (workInProgressRootExitStatus === RootInProgress || workInProgressRootExitStatus === RootSuspended || workInProgressRootExitStatus === RootErrored) {\n    workInProgressRootExitStatus = RootSuspendedWithDelay;\n  } // Check if there are updates that we skipped tree that might have unblocked\n  // this render.\n\n\n  if (workInProgressRoot !== null && (includesNonIdleWork(workInProgressRootSkippedLanes) || includesNonIdleWork(workInProgressRootInterleavedUpdatedLanes))) {\n    // Mark the current render as suspended so that we switch to working on\n    // the updates that were skipped. Usually we only suspend at the end of\n    // the render phase.\n    // TODO: We should probably always mark the root as suspended immediately\n    // (inside this function), since by suspending at the end of the render\n    // phase introduces a potential mistake where we suspend lanes that were\n    // pinged or updated while we were rendering.\n    markRootSuspended$1(workInProgressRoot, workInProgressRootRenderLanes);\n  }\n}\nfunction renderDidError(error) {\n  if (workInProgressRootExitStatus !== RootSuspendedWithDelay) {\n    workInProgressRootExitStatus = RootErrored;\n  }\n\n  if (workInProgressRootConcurrentErrors === null) {\n    workInProgressRootConcurrentErrors = [error];\n  } else {\n    workInProgressRootConcurrentErrors.push(error);\n  }\n} // Called during render to determine if anything has suspended.\n// Returns false if we're not sure.\n\nfunction renderHasNotSuspendedYet() {\n  // If something errored or completed, we can't really be sure,\n  // so those are false.\n  return workInProgressRootExitStatus === RootInProgress;\n}\n\nfunction renderRootSync(root, lanes) {\n  var prevExecutionContext = executionContext;\n  executionContext |= RenderContext;\n  var prevDispatcher = pushDispatcher(); // If the root or lanes have changed, throw out the existing stack\n  // and prepare a fresh one. Otherwise we'll continue where we left off.\n\n  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes) {\n    {\n      if (isDevToolsPresent) {\n        var memoizedUpdaters = root.memoizedUpdaters;\n\n        if (memoizedUpdaters.size > 0) {\n          restorePendingUpdaters(root, workInProgressRootRenderLanes);\n          memoizedUpdaters.clear();\n        } // At this point, move Fibers that scheduled the upcoming work from the Map to the Set.\n        // If we bailout on this work, we'll move them back (like above).\n        // It's important to move them now in case the work spawns more work at the same priority with different updaters.\n        // That way we can keep the current update and future updates separate.\n\n\n        movePendingFibersToMemoized(root, lanes);\n      }\n    }\n\n    workInProgressTransitions = getTransitionsForLanes();\n    prepareFreshStack(root, lanes);\n  }\n\n  {\n    markRenderStarted(lanes);\n  }\n\n  do {\n    try {\n      workLoopSync();\n      break;\n    } catch (thrownValue) {\n      handleError(root, thrownValue);\n    }\n  } while (true);\n\n  resetContextDependencies();\n  executionContext = prevExecutionContext;\n  popDispatcher(prevDispatcher);\n\n  if (workInProgress !== null) {\n    // This is a sync render, so we should have finished the whole tree.\n    throw new Error('Cannot commit an incomplete root. This error is likely caused by a ' + 'bug in React. Please file an issue.');\n  }\n\n  {\n    markRenderStopped();\n  } // Set this to null to indicate there's no in-progress render.\n\n\n  workInProgressRoot = null;\n  workInProgressRootRenderLanes = NoLanes;\n  return workInProgressRootExitStatus;\n} // The work loop is an extremely hot path. Tell Closure not to inline it.\n\n/** @noinline */\n\n\nfunction workLoopSync() {\n  // Already timed out, so perform work without checking if we need to yield.\n  while (workInProgress !== null) {\n    performUnitOfWork(workInProgress);\n  }\n}\n\nfunction renderRootConcurrent(root, lanes) {\n  var prevExecutionContext = executionContext;\n  executionContext |= RenderContext;\n  var prevDispatcher = pushDispatcher(); // If the root or lanes have changed, throw out the existing stack\n  // and prepare a fresh one. Otherwise we'll continue where we left off.\n\n  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes) {\n    {\n      if (isDevToolsPresent) {\n        var memoizedUpdaters = root.memoizedUpdaters;\n\n        if (memoizedUpdaters.size > 0) {\n          restorePendingUpdaters(root, workInProgressRootRenderLanes);\n          memoizedUpdaters.clear();\n        } // At this point, move Fibers that scheduled the upcoming work from the Map to the Set.\n        // If we bailout on this work, we'll move them back (like above).\n        // It's important to move them now in case the work spawns more work at the same priority with different updaters.\n        // That way we can keep the current update and future updates separate.\n\n\n        movePendingFibersToMemoized(root, lanes);\n      }\n    }\n\n    workInProgressTransitions = getTransitionsForLanes();\n    resetRenderTimer();\n    prepareFreshStack(root, lanes);\n  }\n\n  {\n    markRenderStarted(lanes);\n  }\n\n  do {\n    try {\n      workLoopConcurrent();\n      break;\n    } catch (thrownValue) {\n      handleError(root, thrownValue);\n    }\n  } while (true);\n\n  resetContextDependencies();\n  popDispatcher(prevDispatcher);\n  executionContext = prevExecutionContext;\n\n\n  if (workInProgress !== null) {\n    // Still work remaining.\n    {\n      markRenderYielded();\n    }\n\n    return RootInProgress;\n  } else {\n    // Completed the tree.\n    {\n      markRenderStopped();\n    } // Set this to null to indicate there's no in-progress render.\n\n\n    workInProgressRoot = null;\n    workInProgressRootRenderLanes = NoLanes; // Return the final exit status.\n\n    return workInProgressRootExitStatus;\n  }\n}\n/** @noinline */\n\n\nfunction workLoopConcurrent() {\n  // Perform work until Scheduler asks us to yield\n  while (workInProgress !== null && !shouldYield()) {\n    performUnitOfWork(workInProgress);\n  }\n}\n\nfunction performUnitOfWork(unitOfWork) {\n  // The current, flushed, state of this fiber is the alternate. Ideally\n  // nothing should rely on this, but relying on it here means that we don't\n  // need an additional field on the work in progress.\n  var current = unitOfWork.alternate;\n  setCurrentFiber(unitOfWork);\n  var next;\n\n  if ( (unitOfWork.mode & ProfileMode) !== NoMode) {\n    startProfilerTimer(unitOfWork);\n    next = beginWork$1(current, unitOfWork, subtreeRenderLanes);\n    stopProfilerTimerIfRunningAndRecordDelta(unitOfWork, true);\n  } else {\n    next = beginWork$1(current, unitOfWork, subtreeRenderLanes);\n  }\n\n  resetCurrentFiber();\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n\n  if (next === null) {\n    // If this doesn't spawn new work, complete the current work.\n    completeUnitOfWork(unitOfWork);\n  } else {\n    workInProgress = next;\n  }\n\n  ReactCurrentOwner$2.current = null;\n}\n\nfunction completeUnitOfWork(unitOfWork) {\n  // Attempt to complete the current unit of work, then move to the next\n  // sibling. If there are no more siblings, return to the parent fiber.\n  var completedWork = unitOfWork;\n\n  do {\n    // The current, flushed, state of this fiber is the alternate. Ideally\n    // nothing should rely on this, but relying on it here means that we don't\n    // need an additional field on the work in progress.\n    var current = completedWork.alternate;\n    var returnFiber = completedWork.return; // Check if the work completed or if something threw.\n\n    if ((completedWork.flags & Incomplete) === NoFlags) {\n      setCurrentFiber(completedWork);\n      var next = void 0;\n\n      if ( (completedWork.mode & ProfileMode) === NoMode) {\n        next = completeWork(current, completedWork, subtreeRenderLanes);\n      } else {\n        startProfilerTimer(completedWork);\n        next = completeWork(current, completedWork, subtreeRenderLanes); // Update render duration assuming we didn't error.\n\n        stopProfilerTimerIfRunningAndRecordDelta(completedWork, false);\n      }\n\n      resetCurrentFiber();\n\n      if (next !== null) {\n        // Completing this fiber spawned new work. Work on that next.\n        workInProgress = next;\n        return;\n      }\n    } else {\n      // This fiber did not complete because something threw. Pop values off\n      // the stack without entering the complete phase. If this is a boundary,\n      // capture values if possible.\n      var _next = unwindWork(current, completedWork); // Because this fiber did not complete, don't reset its lanes.\n\n\n      if (_next !== null) {\n        // If completing this work spawned new work, do that next. We'll come\n        // back here again.\n        // Since we're restarting, remove anything that is not a host effect\n        // from the effect tag.\n        _next.flags &= HostEffectMask;\n        workInProgress = _next;\n        return;\n      }\n\n      if ( (completedWork.mode & ProfileMode) !== NoMode) {\n        // Record the render duration for the fiber that errored.\n        stopProfilerTimerIfRunningAndRecordDelta(completedWork, false); // Include the time spent working on failed children before continuing.\n\n        var actualDuration = completedWork.actualDuration;\n        var child = completedWork.child;\n\n        while (child !== null) {\n          actualDuration += child.actualDuration;\n          child = child.sibling;\n        }\n\n        completedWork.actualDuration = actualDuration;\n      }\n\n      if (returnFiber !== null) {\n        // Mark the parent fiber as incomplete and clear its subtree flags.\n        returnFiber.flags |= Incomplete;\n        returnFiber.subtreeFlags = NoFlags;\n        returnFiber.deletions = null;\n      } else {\n        // We've unwound all the way to the root.\n        workInProgressRootExitStatus = RootDidNotComplete;\n        workInProgress = null;\n        return;\n      }\n    }\n\n    var siblingFiber = completedWork.sibling;\n\n    if (siblingFiber !== null) {\n      // If there is more work to do in this returnFiber, do that next.\n      workInProgress = siblingFiber;\n      return;\n    } // Otherwise, return to the parent\n\n\n    completedWork = returnFiber; // Update the next thing we're working on in case something throws.\n\n    workInProgress = completedWork;\n  } while (completedWork !== null); // We've reached the root.\n\n\n  if (workInProgressRootExitStatus === RootInProgress) {\n    workInProgressRootExitStatus = RootCompleted;\n  }\n}\n\nfunction commitRoot(root, recoverableErrors, transitions) {\n  // TODO: This no longer makes any sense. We already wrap the mutation and\n  // layout phases. Should be able to remove.\n  var previousUpdateLanePriority = getCurrentUpdatePriority();\n  var prevTransition = ReactCurrentBatchConfig$3.transition;\n\n  try {\n    ReactCurrentBatchConfig$3.transition = null;\n    setCurrentUpdatePriority(DiscreteEventPriority);\n    commitRootImpl(root, recoverableErrors, transitions, previousUpdateLanePriority);\n  } finally {\n    ReactCurrentBatchConfig$3.transition = prevTransition;\n    setCurrentUpdatePriority(previousUpdateLanePriority);\n  }\n\n  return null;\n}\n\nfunction commitRootImpl(root, recoverableErrors, transitions, renderPriorityLevel) {\n  do {\n    // `flushPassiveEffects` will call `flushSyncUpdateQueue` at the end, which\n    // means `flushPassiveEffects` will sometimes result in additional\n    // passive effects. So we need to keep flushing in a loop until there are\n    // no more pending effects.\n    // TODO: Might be better if `flushPassiveEffects` did not automatically\n    // flush synchronous work at the end, to avoid factoring hazards like this.\n    flushPassiveEffects();\n  } while (rootWithPendingPassiveEffects !== null);\n\n  flushRenderPhaseStrictModeWarningsInDEV();\n\n  if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n    throw new Error('Should not already be working.');\n  }\n\n  var finishedWork = root.finishedWork;\n  var lanes = root.finishedLanes;\n\n  {\n    markCommitStarted(lanes);\n  }\n\n  if (finishedWork === null) {\n\n    {\n      markCommitStopped();\n    }\n\n    return null;\n  } else {\n    {\n      if (lanes === NoLanes) {\n        error('root.finishedLanes should not be empty during a commit. This is a ' + 'bug in React.');\n      }\n    }\n  }\n\n  root.finishedWork = null;\n  root.finishedLanes = NoLanes;\n\n  if (finishedWork === root.current) {\n    throw new Error('Cannot commit the same tree as before. This error is likely caused by ' + 'a bug in React. Please file an issue.');\n  } // commitRoot never returns a continuation; it always finishes synchronously.\n  // So we can clear these now to allow a new callback to be scheduled.\n\n\n  root.callbackNode = null;\n  root.callbackPriority = NoLane; // Update the first and last pending times on this root. The new first\n  // pending time is whatever is left on the root fiber.\n\n  var remainingLanes = mergeLanes(finishedWork.lanes, finishedWork.childLanes);\n  markRootFinished(root, remainingLanes);\n\n  if (root === workInProgressRoot) {\n    // We can reset these now that they are finished.\n    workInProgressRoot = null;\n    workInProgress = null;\n    workInProgressRootRenderLanes = NoLanes;\n  } // If there are pending passive effects, schedule a callback to process them.\n  // Do this as early as possible, so it is queued before anything else that\n  // might get scheduled in the commit phase. (See #16714.)\n  // TODO: Delete all other places that schedule the passive effect callback\n  // They're redundant.\n\n\n  if ((finishedWork.subtreeFlags & PassiveMask) !== NoFlags || (finishedWork.flags & PassiveMask) !== NoFlags) {\n    if (!rootDoesHavePassiveEffects) {\n      rootDoesHavePassiveEffects = true;\n      // to store it in pendingPassiveTransitions until they get processed\n      // We need to pass this through as an argument to commitRoot\n      // because workInProgressTransitions might have changed between\n      // the previous render and commit if we throttle the commit\n      // with setTimeout\n\n      pendingPassiveTransitions = transitions;\n      scheduleCallback$1(NormalPriority, function () {\n        flushPassiveEffects(); // This render triggered passive effects: release the root cache pool\n        // *after* passive effects fire to avoid freeing a cache pool that may\n        // be referenced by a node in the tree (HostRoot, Cache boundary etc)\n\n        return null;\n      });\n    }\n  } // Check if there are any effects in the whole tree.\n  // TODO: This is left over from the effect list implementation, where we had\n  // to check for the existence of `firstEffect` to satisfy Flow. I think the\n  // only other reason this optimization exists is because it affects profiling.\n  // Reconsider whether this is necessary.\n\n\n  var subtreeHasEffects = (finishedWork.subtreeFlags & (BeforeMutationMask | MutationMask | LayoutMask | PassiveMask)) !== NoFlags;\n  var rootHasEffect = (finishedWork.flags & (BeforeMutationMask | MutationMask | LayoutMask | PassiveMask)) !== NoFlags;\n\n  if (subtreeHasEffects || rootHasEffect) {\n    var prevTransition = ReactCurrentBatchConfig$3.transition;\n    ReactCurrentBatchConfig$3.transition = null;\n    var previousPriority = getCurrentUpdatePriority();\n    setCurrentUpdatePriority(DiscreteEventPriority);\n    var prevExecutionContext = executionContext;\n    executionContext |= CommitContext; // Reset this to null before calling lifecycles\n\n    ReactCurrentOwner$2.current = null; // The commit phase is broken into several sub-phases. We do a separate pass\n    // of the effect list for each phase: all mutation effects come before all\n    // layout effects, and so on.\n    // The first phase a \"before mutation\" phase. We use this phase to read the\n    // state of the host tree right before we mutate it. This is where\n    // getSnapshotBeforeUpdate is called.\n\n    var shouldFireAfterActiveInstanceBlur = commitBeforeMutationEffects(root, finishedWork);\n\n    {\n      // Mark the current commit time to be shared by all Profilers in this\n      // batch. This enables them to be grouped later.\n      recordCommitTime();\n    }\n\n\n    commitMutationEffects(root, finishedWork, lanes);\n\n    resetAfterCommit(root.containerInfo); // The work-in-progress tree is now the current tree. This must come after\n    // the mutation phase, so that the previous tree is still current during\n    // componentWillUnmount, but before the layout phase, so that the finished\n    // work is current during componentDidMount/Update.\n\n    root.current = finishedWork; // The next phase is the layout phase, where we call effects that read\n\n    {\n      markLayoutEffectsStarted(lanes);\n    }\n\n    commitLayoutEffects(finishedWork, root, lanes);\n\n    {\n      markLayoutEffectsStopped();\n    }\n    // opportunity to paint.\n\n\n    requestPaint();\n    executionContext = prevExecutionContext; // Reset the priority to the previous non-sync value.\n\n    setCurrentUpdatePriority(previousPriority);\n    ReactCurrentBatchConfig$3.transition = prevTransition;\n  } else {\n    // No effects.\n    root.current = finishedWork; // Measure these anyway so the flamegraph explicitly shows that there were\n    // no effects.\n    // TODO: Maybe there's a better way to report this.\n\n    {\n      recordCommitTime();\n    }\n  }\n\n  var rootDidHavePassiveEffects = rootDoesHavePassiveEffects;\n\n  if (rootDoesHavePassiveEffects) {\n    // This commit has passive effects. Stash a reference to them. But don't\n    // schedule a callback until after flushing layout work.\n    rootDoesHavePassiveEffects = false;\n    rootWithPendingPassiveEffects = root;\n    pendingPassiveEffectsLanes = lanes;\n  } else {\n\n    {\n      nestedPassiveUpdateCount = 0;\n      rootWithPassiveNestedUpdates = null;\n    }\n  } // Read this again, since an effect might have updated it\n\n\n  remainingLanes = root.pendingLanes; // Check if there's remaining work on this root\n  // TODO: This is part of the `componentDidCatch` implementation. Its purpose\n  // is to detect whether something might have called setState inside\n  // `componentDidCatch`. The mechanism is known to be flawed because `setState`\n  // inside `componentDidCatch` is itself flawed — that's why we recommend\n  // `getDerivedStateFromError` instead. However, it could be improved by\n  // checking if remainingLanes includes Sync work, instead of whether there's\n  // any work remaining at all (which would also include stuff like Suspense\n  // retries or transitions). It's been like this for a while, though, so fixing\n  // it probably isn't that urgent.\n\n  if (remainingLanes === NoLanes) {\n    // If there's no remaining work, we can clear the set of already failed\n    // error boundaries.\n    legacyErrorBoundariesThatAlreadyFailed = null;\n  }\n\n  {\n    if (!rootDidHavePassiveEffects) {\n      commitDoubleInvokeEffectsInDEV(root.current, false);\n    }\n  }\n\n  onCommitRoot(finishedWork.stateNode, renderPriorityLevel);\n\n  {\n    if (isDevToolsPresent) {\n      root.memoizedUpdaters.clear();\n    }\n  }\n\n  {\n    onCommitRoot$1();\n  } // Always call this before exiting `commitRoot`, to ensure that any\n  // additional work on this root is scheduled.\n\n\n  ensureRootIsScheduled(root, now());\n\n  if (recoverableErrors !== null) {\n    // There were errors during this render, but recovered from them without\n    // needing to surface it to the UI. We log them here.\n    var onRecoverableError = root.onRecoverableError;\n\n    for (var i = 0; i < recoverableErrors.length; i++) {\n      var recoverableError = recoverableErrors[i];\n      var componentStack = recoverableError.stack;\n      var digest = recoverableError.digest;\n      onRecoverableError(recoverableError.value, {\n        componentStack: componentStack,\n        digest: digest\n      });\n    }\n  }\n\n  if (hasUncaughtError) {\n    hasUncaughtError = false;\n    var error$1 = firstUncaughtError;\n    firstUncaughtError = null;\n    throw error$1;\n  } // If the passive effects are the result of a discrete render, flush them\n  // synchronously at the end of the current task so that the result is\n  // immediately observable. Otherwise, we assume that they are not\n  // order-dependent and do not need to be observed by external systems, so we\n  // can wait until after paint.\n  // TODO: We can optimize this by not scheduling the callback earlier. Since we\n  // currently schedule the callback in multiple places, will wait until those\n  // are consolidated.\n\n\n  if (includesSomeLane(pendingPassiveEffectsLanes, SyncLane) && root.tag !== LegacyRoot) {\n    flushPassiveEffects();\n  } // Read this again, since a passive effect might have updated it\n\n\n  remainingLanes = root.pendingLanes;\n\n  if (includesSomeLane(remainingLanes, SyncLane)) {\n    {\n      markNestedUpdateScheduled();\n    } // Count the number of times the root synchronously re-renders without\n    // finishing. If there are too many, it indicates an infinite update loop.\n\n\n    if (root === rootWithNestedUpdates) {\n      nestedUpdateCount++;\n    } else {\n      nestedUpdateCount = 0;\n      rootWithNestedUpdates = root;\n    }\n  } else {\n    nestedUpdateCount = 0;\n  } // If layout work was scheduled, flush it now.\n\n\n  flushSyncCallbacks();\n\n  {\n    markCommitStopped();\n  }\n\n  return null;\n}\n\nfunction flushPassiveEffects() {\n  // Returns whether passive effects were flushed.\n  // TODO: Combine this check with the one in flushPassiveEFfectsImpl. We should\n  // probably just combine the two functions. I believe they were only separate\n  // in the first place because we used to wrap it with\n  // `Scheduler.runWithPriority`, which accepts a function. But now we track the\n  // priority within React itself, so we can mutate the variable directly.\n  if (rootWithPendingPassiveEffects !== null) {\n    var renderPriority = lanesToEventPriority(pendingPassiveEffectsLanes);\n    var priority = lowerEventPriority(DefaultEventPriority, renderPriority);\n    var prevTransition = ReactCurrentBatchConfig$3.transition;\n    var previousPriority = getCurrentUpdatePriority();\n\n    try {\n      ReactCurrentBatchConfig$3.transition = null;\n      setCurrentUpdatePriority(priority);\n      return flushPassiveEffectsImpl();\n    } finally {\n      setCurrentUpdatePriority(previousPriority);\n      ReactCurrentBatchConfig$3.transition = prevTransition; // Once passive effects have run for the tree - giving components a\n    }\n  }\n\n  return false;\n}\nfunction enqueuePendingPassiveProfilerEffect(fiber) {\n  {\n    pendingPassiveProfilerEffects.push(fiber);\n\n    if (!rootDoesHavePassiveEffects) {\n      rootDoesHavePassiveEffects = true;\n      scheduleCallback$1(NormalPriority, function () {\n        flushPassiveEffects();\n        return null;\n      });\n    }\n  }\n}\n\nfunction flushPassiveEffectsImpl() {\n  if (rootWithPendingPassiveEffects === null) {\n    return false;\n  } // Cache and clear the transitions flag\n\n\n  var transitions = pendingPassiveTransitions;\n  pendingPassiveTransitions = null;\n  var root = rootWithPendingPassiveEffects;\n  var lanes = pendingPassiveEffectsLanes;\n  rootWithPendingPassiveEffects = null; // TODO: This is sometimes out of sync with rootWithPendingPassiveEffects.\n  // Figure out why and fix it. It's not causing any known issues (probably\n  // because it's only used for profiling), but it's a refactor hazard.\n\n  pendingPassiveEffectsLanes = NoLanes;\n\n  if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n    throw new Error('Cannot flush passive effects while already rendering.');\n  }\n\n  {\n    isFlushingPassiveEffects = true;\n    didScheduleUpdateDuringPassiveEffects = false;\n  }\n\n  {\n    markPassiveEffectsStarted(lanes);\n  }\n\n  var prevExecutionContext = executionContext;\n  executionContext |= CommitContext;\n  commitPassiveUnmountEffects(root.current);\n  commitPassiveMountEffects(root, root.current, lanes, transitions); // TODO: Move to commitPassiveMountEffects\n\n  {\n    var profilerEffects = pendingPassiveProfilerEffects;\n    pendingPassiveProfilerEffects = [];\n\n    for (var i = 0; i < profilerEffects.length; i++) {\n      var _fiber = profilerEffects[i];\n      commitPassiveEffectDurations(root, _fiber);\n    }\n  }\n\n  {\n    markPassiveEffectsStopped();\n  }\n\n  {\n    commitDoubleInvokeEffectsInDEV(root.current, true);\n  }\n\n  executionContext = prevExecutionContext;\n  flushSyncCallbacks();\n\n  {\n    // If additional passive effects were scheduled, increment a counter. If this\n    // exceeds the limit, we'll fire a warning.\n    if (didScheduleUpdateDuringPassiveEffects) {\n      if (root === rootWithPassiveNestedUpdates) {\n        nestedPassiveUpdateCount++;\n      } else {\n        nestedPassiveUpdateCount = 0;\n        rootWithPassiveNestedUpdates = root;\n      }\n    } else {\n      nestedPassiveUpdateCount = 0;\n    }\n\n    isFlushingPassiveEffects = false;\n    didScheduleUpdateDuringPassiveEffects = false;\n  } // TODO: Move to commitPassiveMountEffects\n\n\n  onPostCommitRoot(root);\n\n  {\n    var stateNode = root.current.stateNode;\n    stateNode.effectDuration = 0;\n    stateNode.passiveEffectDuration = 0;\n  }\n\n  return true;\n}\n\nfunction isAlreadyFailedLegacyErrorBoundary(instance) {\n  return legacyErrorBoundariesThatAlreadyFailed !== null && legacyErrorBoundariesThatAlreadyFailed.has(instance);\n}\nfunction markLegacyErrorBoundaryAsFailed(instance) {\n  if (legacyErrorBoundariesThatAlreadyFailed === null) {\n    legacyErrorBoundariesThatAlreadyFailed = new Set([instance]);\n  } else {\n    legacyErrorBoundariesThatAlreadyFailed.add(instance);\n  }\n}\n\nfunction prepareToThrowUncaughtError(error) {\n  if (!hasUncaughtError) {\n    hasUncaughtError = true;\n    firstUncaughtError = error;\n  }\n}\n\nvar onUncaughtError = prepareToThrowUncaughtError;\n\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n  var errorInfo = createCapturedValueAtFiber(error, sourceFiber);\n  var update = createRootErrorUpdate(rootFiber, errorInfo, SyncLane);\n  var root = enqueueUpdate(rootFiber, update, SyncLane);\n  var eventTime = requestEventTime();\n\n  if (root !== null) {\n    markRootUpdated(root, SyncLane, eventTime);\n    ensureRootIsScheduled(root, eventTime);\n  }\n}\n\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error$1) {\n  {\n    reportUncaughtErrorInDEV(error$1);\n    setIsRunningInsertionEffect(false);\n  }\n\n  if (sourceFiber.tag === HostRoot) {\n    // Error was thrown at the root. There is no parent, so the root\n    // itself should capture it.\n    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error$1);\n    return;\n  }\n\n  var fiber = null;\n\n  {\n    fiber = nearestMountedAncestor;\n  }\n\n  while (fiber !== null) {\n    if (fiber.tag === HostRoot) {\n      captureCommitPhaseErrorOnRoot(fiber, sourceFiber, error$1);\n      return;\n    } else if (fiber.tag === ClassComponent) {\n      var ctor = fiber.type;\n      var instance = fiber.stateNode;\n\n      if (typeof ctor.getDerivedStateFromError === 'function' || typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance)) {\n        var errorInfo = createCapturedValueAtFiber(error$1, sourceFiber);\n        var update = createClassErrorUpdate(fiber, errorInfo, SyncLane);\n        var root = enqueueUpdate(fiber, update, SyncLane);\n        var eventTime = requestEventTime();\n\n        if (root !== null) {\n          markRootUpdated(root, SyncLane, eventTime);\n          ensureRootIsScheduled(root, eventTime);\n        }\n\n        return;\n      }\n    }\n\n    fiber = fiber.return;\n  }\n\n  {\n    // TODO: Until we re-land skipUnmountedBoundaries (see #20147), this warning\n    // will fire for errors that are thrown by destroy functions inside deleted\n    // trees. What it should instead do is propagate the error to the parent of\n    // the deleted tree. In the meantime, do not add this warning to the\n    // allowlist; this is only for our internal use.\n    error('Internal React error: Attempted to capture a commit phase error ' + 'inside a detached tree. This indicates a bug in React. Likely ' + 'causes include deleting the same fiber more than once, committing an ' + 'already-finished tree, or an inconsistent return pointer.\\n\\n' + 'Error message:\\n\\n%s', error$1);\n  }\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n  var pingCache = root.pingCache;\n\n  if (pingCache !== null) {\n    // The wakeable resolved, so we no longer need to memoize, because it will\n    // never be thrown again.\n    pingCache.delete(wakeable);\n  }\n\n  var eventTime = requestEventTime();\n  markRootPinged(root, pingedLanes);\n  warnIfSuspenseResolutionNotWrappedWithActDEV(root);\n\n  if (workInProgressRoot === root && isSubsetOfLanes(workInProgressRootRenderLanes, pingedLanes)) {\n    // Received a ping at the same priority level at which we're currently\n    // rendering. We might want to restart this render. This should mirror\n    // the logic of whether or not a root suspends once it completes.\n    // TODO: If we're rendering sync either due to Sync, Batched or expired,\n    // we should probably never restart.\n    // If we're suspended with delay, or if it's a retry, we'll always suspend\n    // so we can always restart.\n    if (workInProgressRootExitStatus === RootSuspendedWithDelay || workInProgressRootExitStatus === RootSuspended && includesOnlyRetries(workInProgressRootRenderLanes) && now() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS) {\n      // Restart from the root.\n      prepareFreshStack(root, NoLanes);\n    } else {\n      // Even though we can't restart right now, we might get an\n      // opportunity later. So we mark this render as having a ping.\n      workInProgressRootPingedLanes = mergeLanes(workInProgressRootPingedLanes, pingedLanes);\n    }\n  }\n\n  ensureRootIsScheduled(root, eventTime);\n}\n\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n  // The boundary fiber (a Suspense component or SuspenseList component)\n  // previously was rendered in its fallback state. One of the promises that\n  // suspended it has resolved, which means at least part of the tree was\n  // likely unblocked. Try rendering again, at a new lanes.\n  if (retryLane === NoLane) {\n    // TODO: Assign this to `suspenseState.retryLane`? to avoid\n    // unnecessary entanglement?\n    retryLane = requestRetryLane(boundaryFiber);\n  } // TODO: Special case idle priority?\n\n\n  var eventTime = requestEventTime();\n  var root = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n\n  if (root !== null) {\n    markRootUpdated(root, retryLane, eventTime);\n    ensureRootIsScheduled(root, eventTime);\n  }\n}\n\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n  var suspenseState = boundaryFiber.memoizedState;\n  var retryLane = NoLane;\n\n  if (suspenseState !== null) {\n    retryLane = suspenseState.retryLane;\n  }\n\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n  var retryLane = NoLane; // Default\n\n  var retryCache;\n\n  switch (boundaryFiber.tag) {\n    case SuspenseComponent:\n      retryCache = boundaryFiber.stateNode;\n      var suspenseState = boundaryFiber.memoizedState;\n\n      if (suspenseState !== null) {\n        retryLane = suspenseState.retryLane;\n      }\n\n      break;\n\n    case SuspenseListComponent:\n      retryCache = boundaryFiber.stateNode;\n      break;\n\n    default:\n      throw new Error('Pinged unknown suspense boundary type. ' + 'This is probably a bug in React.');\n  }\n\n  if (retryCache !== null) {\n    // The wakeable resolved, so we no longer need to memoize, because it will\n    // never be thrown again.\n    retryCache.delete(wakeable);\n  }\n\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n} // Computes the next Just Noticeable Difference (JND) boundary.\n// The theory is that a person can't tell the difference between small differences in time.\n// Therefore, if we wait a bit longer than necessary that won't translate to a noticeable\n// difference in the experience. However, waiting for longer might mean that we can avoid\n// showing an intermediate loading state. The longer we have already waited, the harder it\n// is to tell small differences in time. Therefore, the longer we've already waited,\n// the longer we can wait additionally. At some point we have to give up though.\n// We pick a train model where the next boundary commits at a consistent schedule.\n// These particular numbers are vague estimates. We expect to adjust them based on research.\n\nfunction jnd(timeElapsed) {\n  return timeElapsed < 120 ? 120 : timeElapsed < 480 ? 480 : timeElapsed < 1080 ? 1080 : timeElapsed < 1920 ? 1920 : timeElapsed < 3000 ? 3000 : timeElapsed < 4320 ? 4320 : ceil(timeElapsed / 1960) * 1960;\n}\n\nfunction checkForNestedUpdates() {\n  if (nestedUpdateCount > NESTED_UPDATE_LIMIT) {\n    nestedUpdateCount = 0;\n    rootWithNestedUpdates = null;\n    throw new Error('Maximum update depth exceeded. This can happen when a component ' + 'repeatedly calls setState inside componentWillUpdate or ' + 'componentDidUpdate. React limits the number of nested updates to ' + 'prevent infinite loops.');\n  }\n\n  {\n    if (nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT) {\n      nestedPassiveUpdateCount = 0;\n      rootWithPassiveNestedUpdates = null;\n\n      error('Maximum update depth exceeded. This can happen when a component ' + \"calls setState inside useEffect, but useEffect either doesn't \" + 'have a dependency array, or one of the dependencies changes on ' + 'every render.');\n    }\n  }\n}\n\nfunction flushRenderPhaseStrictModeWarningsInDEV() {\n  {\n    ReactStrictModeWarnings.flushLegacyContextWarning();\n\n    {\n      ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();\n    }\n  }\n}\n\nfunction commitDoubleInvokeEffectsInDEV(fiber, hasPassiveEffects) {\n  {\n    // TODO (StrictEffects) Should we set a marker on the root if it contains strict effects\n    // so we don't traverse unnecessarily? similar to subtreeFlags but just at the root level.\n    // Maybe not a big deal since this is DEV only behavior.\n    setCurrentFiber(fiber);\n    invokeEffectsInDev(fiber, MountLayoutDev, invokeLayoutEffectUnmountInDEV);\n\n    if (hasPassiveEffects) {\n      invokeEffectsInDev(fiber, MountPassiveDev, invokePassiveEffectUnmountInDEV);\n    }\n\n    invokeEffectsInDev(fiber, MountLayoutDev, invokeLayoutEffectMountInDEV);\n\n    if (hasPassiveEffects) {\n      invokeEffectsInDev(fiber, MountPassiveDev, invokePassiveEffectMountInDEV);\n    }\n\n    resetCurrentFiber();\n  }\n}\n\nfunction invokeEffectsInDev(firstChild, fiberFlags, invokeEffectFn) {\n  {\n    // We don't need to re-check StrictEffectsMode here.\n    // This function is only called if that check has already passed.\n    var current = firstChild;\n    var subtreeRoot = null;\n\n    while (current !== null) {\n      var primarySubtreeFlag = current.subtreeFlags & fiberFlags;\n\n      if (current !== subtreeRoot && current.child !== null && primarySubtreeFlag !== NoFlags) {\n        current = current.child;\n      } else {\n        if ((current.flags & fiberFlags) !== NoFlags) {\n          invokeEffectFn(current);\n        }\n\n        if (current.sibling !== null) {\n          current = current.sibling;\n        } else {\n          current = subtreeRoot = current.return;\n        }\n      }\n    }\n  }\n}\n\nvar didWarnStateUpdateForNotYetMountedComponent = null;\nfunction warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) {\n  {\n    if ((executionContext & RenderContext) !== NoContext) {\n      // We let the other warning about render phase updates deal with this one.\n      return;\n    }\n\n    if (!(fiber.mode & ConcurrentMode)) {\n      return;\n    }\n\n    var tag = fiber.tag;\n\n    if (tag !== IndeterminateComponent && tag !== HostRoot && tag !== ClassComponent && tag !== FunctionComponent && tag !== ForwardRef && tag !== MemoComponent && tag !== SimpleMemoComponent) {\n      // Only warn for user-defined components, not internal ones like Suspense.\n      return;\n    } // We show the whole stack but dedupe on the top component's name because\n    // the problematic code almost always lies inside that component.\n\n\n    var componentName = getComponentNameFromFiber(fiber) || 'ReactComponent';\n\n    if (didWarnStateUpdateForNotYetMountedComponent !== null) {\n      if (didWarnStateUpdateForNotYetMountedComponent.has(componentName)) {\n        return;\n      }\n\n      didWarnStateUpdateForNotYetMountedComponent.add(componentName);\n    } else {\n      didWarnStateUpdateForNotYetMountedComponent = new Set([componentName]);\n    }\n\n    var previousFiber = current;\n\n    try {\n      setCurrentFiber(fiber);\n\n      error(\"Can't perform a React state update on a component that hasn't mounted yet. \" + 'This indicates that you have a side-effect in your render function that ' + 'asynchronously later calls tries to update the component. Move this work to ' + 'useEffect instead.');\n    } finally {\n      if (previousFiber) {\n        setCurrentFiber(fiber);\n      } else {\n        resetCurrentFiber();\n      }\n    }\n  }\n}\nvar beginWork$1;\n\n{\n  var dummyFiber = null;\n\n  beginWork$1 = function (current, unitOfWork, lanes) {\n    // If a component throws an error, we replay it again in a synchronously\n    // dispatched event, so that the debugger will treat it as an uncaught\n    // error See ReactErrorUtils for more information.\n    // Before entering the begin phase, copy the work-in-progress onto a dummy\n    // fiber. If beginWork throws, we'll use this to reset the state.\n    var originalWorkInProgressCopy = assignFiberPropertiesInDEV(dummyFiber, unitOfWork);\n\n    try {\n      return beginWork(current, unitOfWork, lanes);\n    } catch (originalError) {\n      if (didSuspendOrErrorWhileHydratingDEV() || originalError !== null && typeof originalError === 'object' && typeof originalError.then === 'function') {\n        // Don't replay promises.\n        // Don't replay errors if we are hydrating and have already suspended or handled an error\n        throw originalError;\n      } // Keep this code in sync with handleError; any changes here must have\n      // corresponding changes there.\n\n\n      resetContextDependencies();\n      resetHooksAfterThrow(); // Don't reset current debug fiber, since we're about to work on the\n      // same fiber again.\n      // Unwind the failed stack frame\n\n      unwindInterruptedWork(current, unitOfWork); // Restore the original properties of the fiber.\n\n      assignFiberPropertiesInDEV(unitOfWork, originalWorkInProgressCopy);\n\n      if ( unitOfWork.mode & ProfileMode) {\n        // Reset the profiler timer.\n        startProfilerTimer(unitOfWork);\n      } // Run beginWork again.\n\n\n      invokeGuardedCallback(null, beginWork, null, current, unitOfWork, lanes);\n\n      if (hasCaughtError()) {\n        var replayError = clearCaughtError();\n\n        if (typeof replayError === 'object' && replayError !== null && replayError._suppressLogging && typeof originalError === 'object' && originalError !== null && !originalError._suppressLogging) {\n          // If suppressed, let the flag carry over to the original error which is the one we'll rethrow.\n          originalError._suppressLogging = true;\n        }\n      } // We always throw the original error in case the second render pass is not idempotent.\n      // This can happen if a memoized function or CommonJS module doesn't throw after first invocation.\n\n\n      throw originalError;\n    }\n  };\n}\n\nvar didWarnAboutUpdateInRender = false;\nvar didWarnAboutUpdateInRenderForAnotherComponent;\n\n{\n  didWarnAboutUpdateInRenderForAnotherComponent = new Set();\n}\n\nfunction warnAboutRenderPhaseUpdatesInDEV(fiber) {\n  {\n    if (isRendering && !getIsUpdatingOpaqueValueInRenderPhaseInDEV()) {\n      switch (fiber.tag) {\n        case FunctionComponent:\n        case ForwardRef:\n        case SimpleMemoComponent:\n          {\n            var renderingComponentName = workInProgress && getComponentNameFromFiber(workInProgress) || 'Unknown'; // Dedupe by the rendering component because it's the one that needs to be fixed.\n\n            var dedupeKey = renderingComponentName;\n\n            if (!didWarnAboutUpdateInRenderForAnotherComponent.has(dedupeKey)) {\n              didWarnAboutUpdateInRenderForAnotherComponent.add(dedupeKey);\n              var setStateComponentName = getComponentNameFromFiber(fiber) || 'Unknown';\n\n              error('Cannot update a component (`%s`) while rendering a ' + 'different component (`%s`). To locate the bad setState() call inside `%s`, ' + 'follow the stack trace as described in https://reactjs.org/link/setstate-in-render', setStateComponentName, renderingComponentName, renderingComponentName);\n            }\n\n            break;\n          }\n\n        case ClassComponent:\n          {\n            if (!didWarnAboutUpdateInRender) {\n              error('Cannot update during an existing state transition (such as ' + 'within `render`). Render methods should be a pure ' + 'function of props and state.');\n\n              didWarnAboutUpdateInRender = true;\n            }\n\n            break;\n          }\n      }\n    }\n  }\n}\n\nfunction restorePendingUpdaters(root, lanes) {\n  {\n    if (isDevToolsPresent) {\n      var memoizedUpdaters = root.memoizedUpdaters;\n      memoizedUpdaters.forEach(function (schedulingFiber) {\n        addFiberToLanesMap(root, schedulingFiber, lanes);\n      }); // This function intentionally does not clear memoized updaters.\n      // Those may still be relevant to the current commit\n      // and a future one (e.g. Suspense).\n    }\n  }\n}\nvar fakeActCallbackNode = {};\n\nfunction scheduleCallback$1(priorityLevel, callback) {\n  {\n    // If we're currently inside an `act` scope, bypass Scheduler and push to\n    // the `act` queue instead.\n    var actQueue = ReactCurrentActQueue$1.current;\n\n    if (actQueue !== null) {\n      actQueue.push(callback);\n      return fakeActCallbackNode;\n    } else {\n      return scheduleCallback(priorityLevel, callback);\n    }\n  }\n}\n\nfunction cancelCallback$1(callbackNode) {\n  if ( callbackNode === fakeActCallbackNode) {\n    return;\n  } // In production, always call Scheduler. This function will be stripped out.\n\n\n  return cancelCallback(callbackNode);\n}\n\nfunction shouldForceFlushFallbacksInDEV() {\n  // Never force flush in production. This function should get stripped out.\n  return  ReactCurrentActQueue$1.current !== null;\n}\n\nfunction warnIfUpdatesNotWrappedWithActDEV(fiber) {\n  {\n    if (fiber.mode & ConcurrentMode) {\n      if (!isConcurrentActEnvironment()) {\n        // Not in an act environment. No need to warn.\n        return;\n      }\n    } else {\n      // Legacy mode has additional cases where we suppress a warning.\n      if (!isLegacyActEnvironment()) {\n        // Not in an act environment. No need to warn.\n        return;\n      }\n\n      if (executionContext !== NoContext) {\n        // Legacy mode doesn't warn if the update is batched, i.e.\n        // batchedUpdates or flushSync.\n        return;\n      }\n\n      if (fiber.tag !== FunctionComponent && fiber.tag !== ForwardRef && fiber.tag !== SimpleMemoComponent) {\n        // For backwards compatibility with pre-hooks code, legacy mode only\n        // warns for updates that originate from a hook.\n        return;\n      }\n    }\n\n    if (ReactCurrentActQueue$1.current === null) {\n      var previousFiber = current;\n\n      try {\n        setCurrentFiber(fiber);\n\n        error('An update to %s inside a test was not wrapped in act(...).\\n\\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\\n\\n' + 'act(() => {\\n' + '  /* fire events that update state */\\n' + '});\\n' + '/* assert on the output */\\n\\n' + \"This ensures that you're testing the behavior the user would see \" + 'in the browser.' + ' Learn more at https://reactjs.org/link/wrap-tests-with-act', getComponentNameFromFiber(fiber));\n      } finally {\n        if (previousFiber) {\n          setCurrentFiber(fiber);\n        } else {\n          resetCurrentFiber();\n        }\n      }\n    }\n  }\n}\n\nfunction warnIfSuspenseResolutionNotWrappedWithActDEV(root) {\n  {\n    if (root.tag !== LegacyRoot && isConcurrentActEnvironment() && ReactCurrentActQueue$1.current === null) {\n      error('A suspended resource finished loading inside a test, but the event ' + 'was not wrapped in act(...).\\n\\n' + 'When testing, code that resolves suspended data should be wrapped ' + 'into act(...):\\n\\n' + 'act(() => {\\n' + '  /* finish loading suspended data */\\n' + '});\\n' + '/* assert on the output */\\n\\n' + \"This ensures that you're testing the behavior the user would see \" + 'in the browser.' + ' Learn more at https://reactjs.org/link/wrap-tests-with-act');\n    }\n  }\n}\n\nfunction setIsRunningInsertionEffect(isRunning) {\n  {\n    isRunningInsertionEffect = isRunning;\n  }\n}\n\n/* eslint-disable react-internal/prod-error-codes */\nvar resolveFamily = null; // $FlowFixMe Flow gets confused by a WeakSet feature check below.\n\nvar failedBoundaries = null;\nvar setRefreshHandler = function (handler) {\n  {\n    resolveFamily = handler;\n  }\n};\nfunction resolveFunctionForHotReloading(type) {\n  {\n    if (resolveFamily === null) {\n      // Hot reloading is disabled.\n      return type;\n    }\n\n    var family = resolveFamily(type);\n\n    if (family === undefined) {\n      return type;\n    } // Use the latest known implementation.\n\n\n    return family.current;\n  }\n}\nfunction resolveClassForHotReloading(type) {\n  // No implementation differences.\n  return resolveFunctionForHotReloading(type);\n}\nfunction resolveForwardRefForHotReloading(type) {\n  {\n    if (resolveFamily === null) {\n      // Hot reloading is disabled.\n      return type;\n    }\n\n    var family = resolveFamily(type);\n\n    if (family === undefined) {\n      // Check if we're dealing with a real forwardRef. Don't want to crash early.\n      if (type !== null && type !== undefined && typeof type.render === 'function') {\n        // ForwardRef is special because its resolved .type is an object,\n        // but it's possible that we only have its inner render function in the map.\n        // If that inner render function is different, we'll build a new forwardRef type.\n        var currentRender = resolveFunctionForHotReloading(type.render);\n\n        if (type.render !== currentRender) {\n          var syntheticType = {\n            $$typeof: REACT_FORWARD_REF_TYPE,\n            render: currentRender\n          };\n\n          if (type.displayName !== undefined) {\n            syntheticType.displayName = type.displayName;\n          }\n\n          return syntheticType;\n        }\n      }\n\n      return type;\n    } // Use the latest known implementation.\n\n\n    return family.current;\n  }\n}\nfunction isCompatibleFamilyForHotReloading(fiber, element) {\n  {\n    if (resolveFamily === null) {\n      // Hot reloading is disabled.\n      return false;\n    }\n\n    var prevType = fiber.elementType;\n    var nextType = element.type; // If we got here, we know types aren't === equal.\n\n    var needsCompareFamilies = false;\n    var $$typeofNextType = typeof nextType === 'object' && nextType !== null ? nextType.$$typeof : null;\n\n    switch (fiber.tag) {\n      case ClassComponent:\n        {\n          if (typeof nextType === 'function') {\n            needsCompareFamilies = true;\n          }\n\n          break;\n        }\n\n      case FunctionComponent:\n        {\n          if (typeof nextType === 'function') {\n            needsCompareFamilies = true;\n          } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n            // We don't know the inner type yet.\n            // We're going to assume that the lazy inner type is stable,\n            // and so it is sufficient to avoid reconciling it away.\n            // We're not going to unwrap or actually use the new lazy type.\n            needsCompareFamilies = true;\n          }\n\n          break;\n        }\n\n      case ForwardRef:\n        {\n          if ($$typeofNextType === REACT_FORWARD_REF_TYPE) {\n            needsCompareFamilies = true;\n          } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n            needsCompareFamilies = true;\n          }\n\n          break;\n        }\n\n      case MemoComponent:\n      case SimpleMemoComponent:\n        {\n          if ($$typeofNextType === REACT_MEMO_TYPE) {\n            // TODO: if it was but can no longer be simple,\n            // we shouldn't set this.\n            needsCompareFamilies = true;\n          } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n            needsCompareFamilies = true;\n          }\n\n          break;\n        }\n\n      default:\n        return false;\n    } // Check if both types have a family and it's the same one.\n\n\n    if (needsCompareFamilies) {\n      // Note: memo() and forwardRef() we'll compare outer rather than inner type.\n      // This means both of them need to be registered to preserve state.\n      // If we unwrapped and compared the inner types for wrappers instead,\n      // then we would risk falsely saying two separate memo(Foo)\n      // calls are equivalent because they wrap the same Foo function.\n      var prevFamily = resolveFamily(prevType);\n\n      if (prevFamily !== undefined && prevFamily === resolveFamily(nextType)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n}\nfunction markFailedErrorBoundaryForHotReloading(fiber) {\n  {\n    if (resolveFamily === null) {\n      // Hot reloading is disabled.\n      return;\n    }\n\n    if (typeof WeakSet !== 'function') {\n      return;\n    }\n\n    if (failedBoundaries === null) {\n      failedBoundaries = new WeakSet();\n    }\n\n    failedBoundaries.add(fiber);\n  }\n}\nvar scheduleRefresh = function (root, update) {\n  {\n    if (resolveFamily === null) {\n      // Hot reloading is disabled.\n      return;\n    }\n\n    var staleFamilies = update.staleFamilies,\n        updatedFamilies = update.updatedFamilies;\n    flushPassiveEffects();\n    flushSync(function () {\n      scheduleFibersWithFamiliesRecursively(root.current, updatedFamilies, staleFamilies);\n    });\n  }\n};\nvar scheduleRoot = function (root, element) {\n  {\n    if (root.context !== emptyContextObject) {\n      // Super edge case: root has a legacy _renderSubtree context\n      // but we don't know the parentComponent so we can't pass it.\n      // Just ignore. We'll delete this with _renderSubtree code path later.\n      return;\n    }\n\n    flushPassiveEffects();\n    flushSync(function () {\n      updateContainer(element, root, null, null);\n    });\n  }\n};\n\nfunction scheduleFibersWithFamiliesRecursively(fiber, updatedFamilies, staleFamilies) {\n  {\n    var alternate = fiber.alternate,\n        child = fiber.child,\n        sibling = fiber.sibling,\n        tag = fiber.tag,\n        type = fiber.type;\n    var candidateType = null;\n\n    switch (tag) {\n      case FunctionComponent:\n      case SimpleMemoComponent:\n      case ClassComponent:\n        candidateType = type;\n        break;\n\n      case ForwardRef:\n        candidateType = type.render;\n        break;\n    }\n\n    if (resolveFamily === null) {\n      throw new Error('Expected resolveFamily to be set during hot reload.');\n    }\n\n    var needsRender = false;\n    var needsRemount = false;\n\n    if (candidateType !== null) {\n      var family = resolveFamily(candidateType);\n\n      if (family !== undefined) {\n        if (staleFamilies.has(family)) {\n          needsRemount = true;\n        } else if (updatedFamilies.has(family)) {\n          if (tag === ClassComponent) {\n            needsRemount = true;\n          } else {\n            needsRender = true;\n          }\n        }\n      }\n    }\n\n    if (failedBoundaries !== null) {\n      if (failedBoundaries.has(fiber) || alternate !== null && failedBoundaries.has(alternate)) {\n        needsRemount = true;\n      }\n    }\n\n    if (needsRemount) {\n      fiber._debugNeedsRemount = true;\n    }\n\n    if (needsRemount || needsRender) {\n      var _root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n      if (_root !== null) {\n        scheduleUpdateOnFiber(_root, fiber, SyncLane, NoTimestamp);\n      }\n    }\n\n    if (child !== null && !needsRemount) {\n      scheduleFibersWithFamiliesRecursively(child, updatedFamilies, staleFamilies);\n    }\n\n    if (sibling !== null) {\n      scheduleFibersWithFamiliesRecursively(sibling, updatedFamilies, staleFamilies);\n    }\n  }\n}\n\nvar findHostInstancesForRefresh = function (root, families) {\n  {\n    var hostInstances = new Set();\n    var types = new Set(families.map(function (family) {\n      return family.current;\n    }));\n    findHostInstancesForMatchingFibersRecursively(root.current, types, hostInstances);\n    return hostInstances;\n  }\n};\n\nfunction findHostInstancesForMatchingFibersRecursively(fiber, types, hostInstances) {\n  {\n    var child = fiber.child,\n        sibling = fiber.sibling,\n        tag = fiber.tag,\n        type = fiber.type;\n    var candidateType = null;\n\n    switch (tag) {\n      case FunctionComponent:\n      case SimpleMemoComponent:\n      case ClassComponent:\n        candidateType = type;\n        break;\n\n      case ForwardRef:\n        candidateType = type.render;\n        break;\n    }\n\n    var didMatch = false;\n\n    if (candidateType !== null) {\n      if (types.has(candidateType)) {\n        didMatch = true;\n      }\n    }\n\n    if (didMatch) {\n      // We have a match. This only drills down to the closest host components.\n      // There's no need to search deeper because for the purpose of giving\n      // visual feedback, \"flashing\" outermost parent rectangles is sufficient.\n      findHostInstancesForFiberShallowly(fiber, hostInstances);\n    } else {\n      // If there's no match, maybe there will be one further down in the child tree.\n      if (child !== null) {\n        findHostInstancesForMatchingFibersRecursively(child, types, hostInstances);\n      }\n    }\n\n    if (sibling !== null) {\n      findHostInstancesForMatchingFibersRecursively(sibling, types, hostInstances);\n    }\n  }\n}\n\nfunction findHostInstancesForFiberShallowly(fiber, hostInstances) {\n  {\n    var foundHostInstances = findChildHostInstancesForFiberShallowly(fiber, hostInstances);\n\n    if (foundHostInstances) {\n      return;\n    } // If we didn't find any host children, fallback to closest host parent.\n\n\n    var node = fiber;\n\n    while (true) {\n      switch (node.tag) {\n        case HostComponent:\n          hostInstances.add(node.stateNode);\n          return;\n\n        case HostPortal:\n          hostInstances.add(node.stateNode.containerInfo);\n          return;\n\n        case HostRoot:\n          hostInstances.add(node.stateNode.containerInfo);\n          return;\n      }\n\n      if (node.return === null) {\n        throw new Error('Expected to reach root first.');\n      }\n\n      node = node.return;\n    }\n  }\n}\n\nfunction findChildHostInstancesForFiberShallowly(fiber, hostInstances) {\n  {\n    var node = fiber;\n    var foundHostInstances = false;\n\n    while (true) {\n      if (node.tag === HostComponent) {\n        // We got a match.\n        foundHostInstances = true;\n        hostInstances.add(node.stateNode); // There may still be more, so keep searching.\n      } else if (node.child !== null) {\n        node.child.return = node;\n        node = node.child;\n        continue;\n      }\n\n      if (node === fiber) {\n        return foundHostInstances;\n      }\n\n      while (node.sibling === null) {\n        if (node.return === null || node.return === fiber) {\n          return foundHostInstances;\n        }\n\n        node = node.return;\n      }\n\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n\n  return false;\n}\n\nvar hasBadMapPolyfill;\n\n{\n  hasBadMapPolyfill = false;\n\n  try {\n    var nonExtensibleObject = Object.preventExtensions({});\n    /* eslint-disable no-new */\n\n    new Map([[nonExtensibleObject, null]]);\n    new Set([nonExtensibleObject]);\n    /* eslint-enable no-new */\n  } catch (e) {\n    // TODO: Consider warning about bad polyfills\n    hasBadMapPolyfill = true;\n  }\n}\n\nfunction FiberNode(tag, pendingProps, key, mode) {\n  // Instance\n  this.tag = tag;\n  this.key = key;\n  this.elementType = null;\n  this.type = null;\n  this.stateNode = null; // Fiber\n\n  this.return = null;\n  this.child = null;\n  this.sibling = null;\n  this.index = 0;\n  this.ref = null;\n  this.pendingProps = pendingProps;\n  this.memoizedProps = null;\n  this.updateQueue = null;\n  this.memoizedState = null;\n  this.dependencies = null;\n  this.mode = mode; // Effects\n\n  this.flags = NoFlags;\n  this.subtreeFlags = NoFlags;\n  this.deletions = null;\n  this.lanes = NoLanes;\n  this.childLanes = NoLanes;\n  this.alternate = null;\n\n  {\n    // Note: The following is done to avoid a v8 performance cliff.\n    //\n    // Initializing the fields below to smis and later updating them with\n    // double values will cause Fibers to end up having separate shapes.\n    // This behavior/bug has something to do with Object.preventExtension().\n    // Fortunately this only impacts DEV builds.\n    // Unfortunately it makes React unusably slow for some applications.\n    // To work around this, initialize the fields below with doubles.\n    //\n    // Learn more about this here:\n    // https://github.com/facebook/react/issues/14365\n    // https://bugs.chromium.org/p/v8/issues/detail?id=8538\n    this.actualDuration = Number.NaN;\n    this.actualStartTime = Number.NaN;\n    this.selfBaseDuration = Number.NaN;\n    this.treeBaseDuration = Number.NaN; // It's okay to replace the initial doubles with smis after initialization.\n    // This won't trigger the performance cliff mentioned above,\n    // and it simplifies other profiler code (including DevTools).\n\n    this.actualDuration = 0;\n    this.actualStartTime = -1;\n    this.selfBaseDuration = 0;\n    this.treeBaseDuration = 0;\n  }\n\n  {\n    // This isn't directly used but is handy for debugging internals:\n    this._debugSource = null;\n    this._debugOwner = null;\n    this._debugNeedsRemount = false;\n    this._debugHookTypes = null;\n\n    if (!hasBadMapPolyfill && typeof Object.preventExtensions === 'function') {\n      Object.preventExtensions(this);\n    }\n  }\n} // This is a constructor function, rather than a POJO constructor, still\n// please ensure we do the following:\n// 1) Nobody should add any instance methods on this. Instance methods can be\n//    more difficult to predict when they get optimized and they are almost\n//    never inlined properly in static compilers.\n// 2) Nobody should rely on `instanceof Fiber` for type testing. We should\n//    always know when it is a fiber.\n// 3) We might want to experiment with using numeric keys since they are easier\n//    to optimize in a non-JIT environment.\n// 4) We can easily go from a constructor to a createFiber object literal if that\n//    is faster.\n// 5) It should be easy to port this to a C struct and keep a C implementation\n//    compatible.\n\n\nvar createFiber = function (tag, pendingProps, key, mode) {\n  // $FlowFixMe: the shapes are exact here but Flow doesn't like constructors\n  return new FiberNode(tag, pendingProps, key, mode);\n};\n\nfunction shouldConstruct$1(Component) {\n  var prototype = Component.prototype;\n  return !!(prototype && prototype.isReactComponent);\n}\n\nfunction isSimpleFunctionComponent(type) {\n  return typeof type === 'function' && !shouldConstruct$1(type) && type.defaultProps === undefined;\n}\nfunction resolveLazyComponentTag(Component) {\n  if (typeof Component === 'function') {\n    return shouldConstruct$1(Component) ? ClassComponent : FunctionComponent;\n  } else if (Component !== undefined && Component !== null) {\n    var $$typeof = Component.$$typeof;\n\n    if ($$typeof === REACT_FORWARD_REF_TYPE) {\n      return ForwardRef;\n    }\n\n    if ($$typeof === REACT_MEMO_TYPE) {\n      return MemoComponent;\n    }\n  }\n\n  return IndeterminateComponent;\n} // This is used to create an alternate fiber to do work on.\n\nfunction createWorkInProgress(current, pendingProps) {\n  var workInProgress = current.alternate;\n\n  if (workInProgress === null) {\n    // We use a double buffering pooling technique because we know that we'll\n    // only ever need at most two versions of a tree. We pool the \"other\" unused\n    // node that we're free to reuse. This is lazily created to avoid allocating\n    // extra objects for things that are never updated. It also allow us to\n    // reclaim the extra memory if needed.\n    workInProgress = createFiber(current.tag, pendingProps, current.key, current.mode);\n    workInProgress.elementType = current.elementType;\n    workInProgress.type = current.type;\n    workInProgress.stateNode = current.stateNode;\n\n    {\n      // DEV-only fields\n      workInProgress._debugSource = current._debugSource;\n      workInProgress._debugOwner = current._debugOwner;\n      workInProgress._debugHookTypes = current._debugHookTypes;\n    }\n\n    workInProgress.alternate = current;\n    current.alternate = workInProgress;\n  } else {\n    workInProgress.pendingProps = pendingProps; // Needed because Blocks store data on type.\n\n    workInProgress.type = current.type; // We already have an alternate.\n    // Reset the effect tag.\n\n    workInProgress.flags = NoFlags; // The effects are no longer valid.\n\n    workInProgress.subtreeFlags = NoFlags;\n    workInProgress.deletions = null;\n\n    {\n      // We intentionally reset, rather than copy, actualDuration & actualStartTime.\n      // This prevents time from endlessly accumulating in new commits.\n      // This has the downside of resetting values for different priority renders,\n      // But works for yielding (the common case) and should support resuming.\n      workInProgress.actualDuration = 0;\n      workInProgress.actualStartTime = -1;\n    }\n  } // Reset all effects except static ones.\n  // Static effects are not specific to a render.\n\n\n  workInProgress.flags = current.flags & StaticMask;\n  workInProgress.childLanes = current.childLanes;\n  workInProgress.lanes = current.lanes;\n  workInProgress.child = current.child;\n  workInProgress.memoizedProps = current.memoizedProps;\n  workInProgress.memoizedState = current.memoizedState;\n  workInProgress.updateQueue = current.updateQueue; // Clone the dependencies object. This is mutated during the render phase, so\n  // it cannot be shared with the current fiber.\n\n  var currentDependencies = current.dependencies;\n  workInProgress.dependencies = currentDependencies === null ? null : {\n    lanes: currentDependencies.lanes,\n    firstContext: currentDependencies.firstContext\n  }; // These will be overridden during the parent's reconciliation\n\n  workInProgress.sibling = current.sibling;\n  workInProgress.index = current.index;\n  workInProgress.ref = current.ref;\n\n  {\n    workInProgress.selfBaseDuration = current.selfBaseDuration;\n    workInProgress.treeBaseDuration = current.treeBaseDuration;\n  }\n\n  {\n    workInProgress._debugNeedsRemount = current._debugNeedsRemount;\n\n    switch (workInProgress.tag) {\n      case IndeterminateComponent:\n      case FunctionComponent:\n      case SimpleMemoComponent:\n        workInProgress.type = resolveFunctionForHotReloading(current.type);\n        break;\n\n      case ClassComponent:\n        workInProgress.type = resolveClassForHotReloading(current.type);\n        break;\n\n      case ForwardRef:\n        workInProgress.type = resolveForwardRefForHotReloading(current.type);\n        break;\n    }\n  }\n\n  return workInProgress;\n} // Used to reuse a Fiber for a second pass.\n\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n  // This resets the Fiber to what createFiber or createWorkInProgress would\n  // have set the values to before during the first pass. Ideally this wouldn't\n  // be necessary but unfortunately many code paths reads from the workInProgress\n  // when they should be reading from current and writing to workInProgress.\n  // We assume pendingProps, index, key, ref, return are still untouched to\n  // avoid doing another reconciliation.\n  // Reset the effect flags but keep any Placement tags, since that's something\n  // that child fiber is setting, not the reconciliation.\n  workInProgress.flags &= StaticMask | Placement; // The effects are no longer valid.\n\n  var current = workInProgress.alternate;\n\n  if (current === null) {\n    // Reset to createFiber's initial values.\n    workInProgress.childLanes = NoLanes;\n    workInProgress.lanes = renderLanes;\n    workInProgress.child = null;\n    workInProgress.subtreeFlags = NoFlags;\n    workInProgress.memoizedProps = null;\n    workInProgress.memoizedState = null;\n    workInProgress.updateQueue = null;\n    workInProgress.dependencies = null;\n    workInProgress.stateNode = null;\n\n    {\n      // Note: We don't reset the actualTime counts. It's useful to accumulate\n      // actual time across multiple render passes.\n      workInProgress.selfBaseDuration = 0;\n      workInProgress.treeBaseDuration = 0;\n    }\n  } else {\n    // Reset to the cloned values that createWorkInProgress would've.\n    workInProgress.childLanes = current.childLanes;\n    workInProgress.lanes = current.lanes;\n    workInProgress.child = current.child;\n    workInProgress.subtreeFlags = NoFlags;\n    workInProgress.deletions = null;\n    workInProgress.memoizedProps = current.memoizedProps;\n    workInProgress.memoizedState = current.memoizedState;\n    workInProgress.updateQueue = current.updateQueue; // Needed because Blocks store data on type.\n\n    workInProgress.type = current.type; // Clone the dependencies object. This is mutated during the render phase, so\n    // it cannot be shared with the current fiber.\n\n    var currentDependencies = current.dependencies;\n    workInProgress.dependencies = currentDependencies === null ? null : {\n      lanes: currentDependencies.lanes,\n      firstContext: currentDependencies.firstContext\n    };\n\n    {\n      // Note: We don't reset the actualTime counts. It's useful to accumulate\n      // actual time across multiple render passes.\n      workInProgress.selfBaseDuration = current.selfBaseDuration;\n      workInProgress.treeBaseDuration = current.treeBaseDuration;\n    }\n  }\n\n  return workInProgress;\n}\nfunction createHostRootFiber(tag, isStrictMode, concurrentUpdatesByDefaultOverride) {\n  var mode;\n\n  if (tag === ConcurrentRoot) {\n    mode = ConcurrentMode;\n\n    if (isStrictMode === true) {\n      mode |= StrictLegacyMode;\n\n      {\n        mode |= StrictEffectsMode;\n      }\n    }\n  } else {\n    mode = NoMode;\n  }\n\n  if ( isDevToolsPresent) {\n    // Always collect profile timings when DevTools are present.\n    // This enables DevTools to start capturing timing at any point–\n    // Without some nodes in the tree having empty base times.\n    mode |= ProfileMode;\n  }\n\n  return createFiber(HostRoot, null, null, mode);\n}\nfunction createFiberFromTypeAndProps(type, // React$ElementType\nkey, pendingProps, owner, mode, lanes) {\n  var fiberTag = IndeterminateComponent; // The resolved type is set if we know what the final type will be. I.e. it's not lazy.\n\n  var resolvedType = type;\n\n  if (typeof type === 'function') {\n    if (shouldConstruct$1(type)) {\n      fiberTag = ClassComponent;\n\n      {\n        resolvedType = resolveClassForHotReloading(resolvedType);\n      }\n    } else {\n      {\n        resolvedType = resolveFunctionForHotReloading(resolvedType);\n      }\n    }\n  } else if (typeof type === 'string') {\n    fiberTag = HostComponent;\n  } else {\n    getTag: switch (type) {\n      case REACT_FRAGMENT_TYPE:\n        return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n\n      case REACT_STRICT_MODE_TYPE:\n        fiberTag = Mode;\n        mode |= StrictLegacyMode;\n\n        if ( (mode & ConcurrentMode) !== NoMode) {\n          // Strict effects should never run on legacy roots\n          mode |= StrictEffectsMode;\n        }\n\n        break;\n\n      case REACT_PROFILER_TYPE:\n        return createFiberFromProfiler(pendingProps, mode, lanes, key);\n\n      case REACT_SUSPENSE_TYPE:\n        return createFiberFromSuspense(pendingProps, mode, lanes, key);\n\n      case REACT_SUSPENSE_LIST_TYPE:\n        return createFiberFromSuspenseList(pendingProps, mode, lanes, key);\n\n      case REACT_OFFSCREEN_TYPE:\n        return createFiberFromOffscreen(pendingProps, mode, lanes, key);\n\n      case REACT_LEGACY_HIDDEN_TYPE:\n\n      // eslint-disable-next-line no-fallthrough\n\n      case REACT_SCOPE_TYPE:\n\n      // eslint-disable-next-line no-fallthrough\n\n      case REACT_CACHE_TYPE:\n\n      // eslint-disable-next-line no-fallthrough\n\n      case REACT_TRACING_MARKER_TYPE:\n\n      // eslint-disable-next-line no-fallthrough\n\n      case REACT_DEBUG_TRACING_MODE_TYPE:\n\n      // eslint-disable-next-line no-fallthrough\n\n      default:\n        {\n          if (typeof type === 'object' && type !== null) {\n            switch (type.$$typeof) {\n              case REACT_PROVIDER_TYPE:\n                fiberTag = ContextProvider;\n                break getTag;\n\n              case REACT_CONTEXT_TYPE:\n                // This is a consumer\n                fiberTag = ContextConsumer;\n                break getTag;\n\n              case REACT_FORWARD_REF_TYPE:\n                fiberTag = ForwardRef;\n\n                {\n                  resolvedType = resolveForwardRefForHotReloading(resolvedType);\n                }\n\n                break getTag;\n\n              case REACT_MEMO_TYPE:\n                fiberTag = MemoComponent;\n                break getTag;\n\n              case REACT_LAZY_TYPE:\n                fiberTag = LazyComponent;\n                resolvedType = null;\n                break getTag;\n            }\n          }\n\n          var info = '';\n\n          {\n            if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n              info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and \" + 'named imports.';\n            }\n\n            var ownerName = owner ? getComponentNameFromFiber(owner) : null;\n\n            if (ownerName) {\n              info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n            }\n          }\n\n          throw new Error('Element type is invalid: expected a string (for built-in ' + 'components) or a class/function (for composite components) ' + (\"but got: \" + (type == null ? type : typeof type) + \".\" + info));\n        }\n    }\n  }\n\n  var fiber = createFiber(fiberTag, pendingProps, key, mode);\n  fiber.elementType = type;\n  fiber.type = resolvedType;\n  fiber.lanes = lanes;\n\n  {\n    fiber._debugOwner = owner;\n  }\n\n  return fiber;\n}\nfunction createFiberFromElement(element, mode, lanes) {\n  var owner = null;\n\n  {\n    owner = element._owner;\n  }\n\n  var type = element.type;\n  var key = element.key;\n  var pendingProps = element.props;\n  var fiber = createFiberFromTypeAndProps(type, key, pendingProps, owner, mode, lanes);\n\n  {\n    fiber._debugSource = element._source;\n    fiber._debugOwner = element._owner;\n  }\n\n  return fiber;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n  var fiber = createFiber(Fragment, elements, key, mode);\n  fiber.lanes = lanes;\n  return fiber;\n}\n\nfunction createFiberFromProfiler(pendingProps, mode, lanes, key) {\n  {\n    if (typeof pendingProps.id !== 'string') {\n      error('Profiler must specify an \"id\" of type `string` as a prop. Received the type `%s` instead.', typeof pendingProps.id);\n    }\n  }\n\n  var fiber = createFiber(Profiler, pendingProps, key, mode | ProfileMode);\n  fiber.elementType = REACT_PROFILER_TYPE;\n  fiber.lanes = lanes;\n\n  {\n    fiber.stateNode = {\n      effectDuration: 0,\n      passiveEffectDuration: 0\n    };\n  }\n\n  return fiber;\n}\n\nfunction createFiberFromSuspense(pendingProps, mode, lanes, key) {\n  var fiber = createFiber(SuspenseComponent, pendingProps, key, mode);\n  fiber.elementType = REACT_SUSPENSE_TYPE;\n  fiber.lanes = lanes;\n  return fiber;\n}\nfunction createFiberFromSuspenseList(pendingProps, mode, lanes, key) {\n  var fiber = createFiber(SuspenseListComponent, pendingProps, key, mode);\n  fiber.elementType = REACT_SUSPENSE_LIST_TYPE;\n  fiber.lanes = lanes;\n  return fiber;\n}\nfunction createFiberFromOffscreen(pendingProps, mode, lanes, key) {\n  var fiber = createFiber(OffscreenComponent, pendingProps, key, mode);\n  fiber.elementType = REACT_OFFSCREEN_TYPE;\n  fiber.lanes = lanes;\n  var primaryChildInstance = {\n    isHidden: false\n  };\n  fiber.stateNode = primaryChildInstance;\n  return fiber;\n}\nfunction createFiberFromText(content, mode, lanes) {\n  var fiber = createFiber(HostText, content, null, mode);\n  fiber.lanes = lanes;\n  return fiber;\n}\nfunction createFiberFromHostInstanceForDeletion() {\n  var fiber = createFiber(HostComponent, null, null, NoMode);\n  fiber.elementType = 'DELETED';\n  return fiber;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n  var fiber = createFiber(DehydratedFragment, null, null, NoMode);\n  fiber.stateNode = dehydratedNode;\n  return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n  var pendingProps = portal.children !== null ? portal.children : [];\n  var fiber = createFiber(HostPortal, pendingProps, portal.key, mode);\n  fiber.lanes = lanes;\n  fiber.stateNode = {\n    containerInfo: portal.containerInfo,\n    pendingChildren: null,\n    // Used by persistent updates\n    implementation: portal.implementation\n  };\n  return fiber;\n} // Used for stashing WIP properties to replay failed work in DEV.\n\nfunction assignFiberPropertiesInDEV(target, source) {\n  if (target === null) {\n    // This Fiber's initial properties will always be overwritten.\n    // We only use a Fiber to ensure the same hidden class so DEV isn't slow.\n    target = createFiber(IndeterminateComponent, null, null, NoMode);\n  } // This is intentionally written as a list of all properties.\n  // We tried to use Object.assign() instead but this is called in\n  // the hottest path, and Object.assign() was too slow:\n  // https://github.com/facebook/react/issues/12502\n  // This code is DEV-only so size is not a concern.\n\n\n  target.tag = source.tag;\n  target.key = source.key;\n  target.elementType = source.elementType;\n  target.type = source.type;\n  target.stateNode = source.stateNode;\n  target.return = source.return;\n  target.child = source.child;\n  target.sibling = source.sibling;\n  target.index = source.index;\n  target.ref = source.ref;\n  target.pendingProps = source.pendingProps;\n  target.memoizedProps = source.memoizedProps;\n  target.updateQueue = source.updateQueue;\n  target.memoizedState = source.memoizedState;\n  target.dependencies = source.dependencies;\n  target.mode = source.mode;\n  target.flags = source.flags;\n  target.subtreeFlags = source.subtreeFlags;\n  target.deletions = source.deletions;\n  target.lanes = source.lanes;\n  target.childLanes = source.childLanes;\n  target.alternate = source.alternate;\n\n  {\n    target.actualDuration = source.actualDuration;\n    target.actualStartTime = source.actualStartTime;\n    target.selfBaseDuration = source.selfBaseDuration;\n    target.treeBaseDuration = source.treeBaseDuration;\n  }\n\n  target._debugSource = source._debugSource;\n  target._debugOwner = source._debugOwner;\n  target._debugNeedsRemount = source._debugNeedsRemount;\n  target._debugHookTypes = source._debugHookTypes;\n  return target;\n}\n\nfunction FiberRootNode(containerInfo, tag, hydrate, identifierPrefix, onRecoverableError) {\n  this.tag = tag;\n  this.containerInfo = containerInfo;\n  this.pendingChildren = null;\n  this.current = null;\n  this.pingCache = null;\n  this.finishedWork = null;\n  this.timeoutHandle = noTimeout;\n  this.context = null;\n  this.pendingContext = null;\n  this.callbackNode = null;\n  this.callbackPriority = NoLane;\n  this.eventTimes = createLaneMap(NoLanes);\n  this.expirationTimes = createLaneMap(NoTimestamp);\n  this.pendingLanes = NoLanes;\n  this.suspendedLanes = NoLanes;\n  this.pingedLanes = NoLanes;\n  this.expiredLanes = NoLanes;\n  this.mutableReadLanes = NoLanes;\n  this.finishedLanes = NoLanes;\n  this.entangledLanes = NoLanes;\n  this.entanglements = createLaneMap(NoLanes);\n  this.identifierPrefix = identifierPrefix;\n  this.onRecoverableError = onRecoverableError;\n\n  {\n    this.mutableSourceEagerHydrationData = null;\n  }\n\n  {\n    this.effectDuration = 0;\n    this.passiveEffectDuration = 0;\n  }\n\n  {\n    this.memoizedUpdaters = new Set();\n    var pendingUpdatersLaneMap = this.pendingUpdatersLaneMap = [];\n\n    for (var _i = 0; _i < TotalLanes; _i++) {\n      pendingUpdatersLaneMap.push(new Set());\n    }\n  }\n\n  {\n    switch (tag) {\n      case ConcurrentRoot:\n        this._debugRootType = hydrate ? 'hydrateRoot()' : 'createRoot()';\n        break;\n\n      case LegacyRoot:\n        this._debugRootType = hydrate ? 'hydrate()' : 'render()';\n        break;\n    }\n  }\n}\n\nfunction createFiberRoot(containerInfo, tag, hydrate, initialChildren, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, // TODO: We have several of these arguments that are conceptually part of the\n// host config, but because they are passed in at runtime, we have to thread\n// them through the root constructor. Perhaps we should put them all into a\n// single type, like a DynamicHostConfig that is defined by the renderer.\nidentifierPrefix, onRecoverableError, transitionCallbacks) {\n  var root = new FiberRootNode(containerInfo, tag, hydrate, identifierPrefix, onRecoverableError);\n  // stateNode is any.\n\n\n  var uninitializedFiber = createHostRootFiber(tag, isStrictMode);\n  root.current = uninitializedFiber;\n  uninitializedFiber.stateNode = root;\n\n  {\n    var _initialState = {\n      element: initialChildren,\n      isDehydrated: hydrate,\n      cache: null,\n      // not enabled yet\n      transitions: null,\n      pendingSuspenseBoundaries: null\n    };\n    uninitializedFiber.memoizedState = _initialState;\n  }\n\n  initializeUpdateQueue(uninitializedFiber);\n  return root;\n}\n\nvar ReactVersion = '18.3.1';\n\nfunction createPortal(children, containerInfo, // TODO: figure out the API for cross-renderer implementation.\nimplementation) {\n  var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n  {\n    checkKeyStringCoercion(key);\n  }\n\n  return {\n    // This tag allow us to uniquely identify this as a React Portal\n    $$typeof: REACT_PORTAL_TYPE,\n    key: key == null ? null : '' + key,\n    children: children,\n    containerInfo: containerInfo,\n    implementation: implementation\n  };\n}\n\nvar didWarnAboutNestedUpdates;\nvar didWarnAboutFindNodeInStrictMode;\n\n{\n  didWarnAboutNestedUpdates = false;\n  didWarnAboutFindNodeInStrictMode = {};\n}\n\nfunction getContextForSubtree(parentComponent) {\n  if (!parentComponent) {\n    return emptyContextObject;\n  }\n\n  var fiber = get(parentComponent);\n  var parentContext = findCurrentUnmaskedContext(fiber);\n\n  if (fiber.tag === ClassComponent) {\n    var Component = fiber.type;\n\n    if (isContextProvider(Component)) {\n      return processChildContext(fiber, Component, parentContext);\n    }\n  }\n\n  return parentContext;\n}\n\nfunction findHostInstanceWithWarning(component, methodName) {\n  {\n    var fiber = get(component);\n\n    if (fiber === undefined) {\n      if (typeof component.render === 'function') {\n        throw new Error('Unable to find node on an unmounted component.');\n      } else {\n        var keys = Object.keys(component).join(',');\n        throw new Error(\"Argument appears to not be a ReactComponent. Keys: \" + keys);\n      }\n    }\n\n    var hostFiber = findCurrentHostFiber(fiber);\n\n    if (hostFiber === null) {\n      return null;\n    }\n\n    if (hostFiber.mode & StrictLegacyMode) {\n      var componentName = getComponentNameFromFiber(fiber) || 'Component';\n\n      if (!didWarnAboutFindNodeInStrictMode[componentName]) {\n        didWarnAboutFindNodeInStrictMode[componentName] = true;\n        var previousFiber = current;\n\n        try {\n          setCurrentFiber(hostFiber);\n\n          if (fiber.mode & StrictLegacyMode) {\n            error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which is inside StrictMode. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-find-node', methodName, methodName, componentName);\n          } else {\n            error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which renders StrictMode children. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-find-node', methodName, methodName, componentName);\n          }\n        } finally {\n          // Ideally this should reset to previous but this shouldn't be called in\n          // render and there's another warning for that anyway.\n          if (previousFiber) {\n            setCurrentFiber(previousFiber);\n          } else {\n            resetCurrentFiber();\n          }\n        }\n      }\n    }\n\n    return hostFiber.stateNode;\n  }\n}\n\nfunction createContainer(containerInfo, tag, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError, transitionCallbacks) {\n  var hydrate = false;\n  var initialChildren = null;\n  return createFiberRoot(containerInfo, tag, hydrate, initialChildren, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError);\n}\nfunction createHydrationContainer(initialChildren, // TODO: Remove `callback` when we delete legacy mode.\ncallback, containerInfo, tag, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError, transitionCallbacks) {\n  var hydrate = true;\n  var root = createFiberRoot(containerInfo, tag, hydrate, initialChildren, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError); // TODO: Move this to FiberRoot constructor\n\n  root.context = getContextForSubtree(null); // Schedule the initial render. In a hydration root, this is different from\n  // a regular update because the initial render must match was was rendered\n  // on the server.\n  // NOTE: This update intentionally doesn't have a payload. We're only using\n  // the update to schedule work on the root fiber (and, for legacy roots, to\n  // enqueue the callback if one is provided).\n\n  var current = root.current;\n  var eventTime = requestEventTime();\n  var lane = requestUpdateLane(current);\n  var update = createUpdate(eventTime, lane);\n  update.callback = callback !== undefined && callback !== null ? callback : null;\n  enqueueUpdate(current, update, lane);\n  scheduleInitialHydrationOnRoot(root, lane, eventTime);\n  return root;\n}\nfunction updateContainer(element, container, parentComponent, callback) {\n  {\n    onScheduleRoot(container, element);\n  }\n\n  var current$1 = container.current;\n  var eventTime = requestEventTime();\n  var lane = requestUpdateLane(current$1);\n\n  {\n    markRenderScheduled(lane);\n  }\n\n  var context = getContextForSubtree(parentComponent);\n\n  if (container.context === null) {\n    container.context = context;\n  } else {\n    container.pendingContext = context;\n  }\n\n  {\n    if (isRendering && current !== null && !didWarnAboutNestedUpdates) {\n      didWarnAboutNestedUpdates = true;\n\n      error('Render methods should be a pure function of props and state; ' + 'triggering nested component updates from render is not allowed. ' + 'If necessary, trigger nested updates in componentDidUpdate.\\n\\n' + 'Check the render method of %s.', getComponentNameFromFiber(current) || 'Unknown');\n    }\n  }\n\n  var update = createUpdate(eventTime, lane); // Caution: React DevTools currently depends on this property\n  // being called \"element\".\n\n  update.payload = {\n    element: element\n  };\n  callback = callback === undefined ? null : callback;\n\n  if (callback !== null) {\n    {\n      if (typeof callback !== 'function') {\n        error('render(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callback);\n      }\n    }\n\n    update.callback = callback;\n  }\n\n  var root = enqueueUpdate(current$1, update, lane);\n\n  if (root !== null) {\n    scheduleUpdateOnFiber(root, current$1, lane, eventTime);\n    entangleTransitions(root, current$1, lane);\n  }\n\n  return lane;\n}\nfunction getPublicRootInstance(container) {\n  var containerFiber = container.current;\n\n  if (!containerFiber.child) {\n    return null;\n  }\n\n  switch (containerFiber.child.tag) {\n    case HostComponent:\n      return getPublicInstance(containerFiber.child.stateNode);\n\n    default:\n      return containerFiber.child.stateNode;\n  }\n}\nfunction attemptSynchronousHydration$1(fiber) {\n  switch (fiber.tag) {\n    case HostRoot:\n      {\n        var root = fiber.stateNode;\n\n        if (isRootDehydrated(root)) {\n          // Flush the first scheduled \"update\".\n          var lanes = getHighestPriorityPendingLanes(root);\n          flushRoot(root, lanes);\n        }\n\n        break;\n      }\n\n    case SuspenseComponent:\n      {\n        flushSync(function () {\n          var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n          if (root !== null) {\n            var eventTime = requestEventTime();\n            scheduleUpdateOnFiber(root, fiber, SyncLane, eventTime);\n          }\n        }); // If we're still blocked after this, we need to increase\n        // the priority of any promises resolving within this\n        // boundary so that they next attempt also has higher pri.\n\n        var retryLane = SyncLane;\n        markRetryLaneIfNotHydrated(fiber, retryLane);\n        break;\n      }\n  }\n}\n\nfunction markRetryLaneImpl(fiber, retryLane) {\n  var suspenseState = fiber.memoizedState;\n\n  if (suspenseState !== null && suspenseState.dehydrated !== null) {\n    suspenseState.retryLane = higherPriorityLane(suspenseState.retryLane, retryLane);\n  }\n} // Increases the priority of thenables when they resolve within this boundary.\n\n\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n  markRetryLaneImpl(fiber, retryLane);\n  var alternate = fiber.alternate;\n\n  if (alternate) {\n    markRetryLaneImpl(alternate, retryLane);\n  }\n}\nfunction attemptContinuousHydration$1(fiber) {\n  if (fiber.tag !== SuspenseComponent) {\n    // We ignore HostRoots here because we can't increase\n    // their priority and they should not suspend on I/O,\n    // since you have to wrap anything that might suspend in\n    // Suspense.\n    return;\n  }\n\n  var lane = SelectiveHydrationLane;\n  var root = enqueueConcurrentRenderForLane(fiber, lane);\n\n  if (root !== null) {\n    var eventTime = requestEventTime();\n    scheduleUpdateOnFiber(root, fiber, lane, eventTime);\n  }\n\n  markRetryLaneIfNotHydrated(fiber, lane);\n}\nfunction attemptHydrationAtCurrentPriority$1(fiber) {\n  if (fiber.tag !== SuspenseComponent) {\n    // We ignore HostRoots here because we can't increase\n    // their priority other than synchronously flush it.\n    return;\n  }\n\n  var lane = requestUpdateLane(fiber);\n  var root = enqueueConcurrentRenderForLane(fiber, lane);\n\n  if (root !== null) {\n    var eventTime = requestEventTime();\n    scheduleUpdateOnFiber(root, fiber, lane, eventTime);\n  }\n\n  markRetryLaneIfNotHydrated(fiber, lane);\n}\nfunction findHostInstanceWithNoPortals(fiber) {\n  var hostFiber = findCurrentHostFiberWithNoPortals(fiber);\n\n  if (hostFiber === null) {\n    return null;\n  }\n\n  return hostFiber.stateNode;\n}\n\nvar shouldErrorImpl = function (fiber) {\n  return null;\n};\n\nfunction shouldError(fiber) {\n  return shouldErrorImpl(fiber);\n}\n\nvar shouldSuspendImpl = function (fiber) {\n  return false;\n};\n\nfunction shouldSuspend(fiber) {\n  return shouldSuspendImpl(fiber);\n}\nvar overrideHookState = null;\nvar overrideHookStateDeletePath = null;\nvar overrideHookStateRenamePath = null;\nvar overrideProps = null;\nvar overridePropsDeletePath = null;\nvar overridePropsRenamePath = null;\nvar scheduleUpdate = null;\nvar setErrorHandler = null;\nvar setSuspenseHandler = null;\n\n{\n  var copyWithDeleteImpl = function (obj, path, index) {\n    var key = path[index];\n    var updated = isArray(obj) ? obj.slice() : assign({}, obj);\n\n    if (index + 1 === path.length) {\n      if (isArray(updated)) {\n        updated.splice(key, 1);\n      } else {\n        delete updated[key];\n      }\n\n      return updated;\n    } // $FlowFixMe number or string is fine here\n\n\n    updated[key] = copyWithDeleteImpl(obj[key], path, index + 1);\n    return updated;\n  };\n\n  var copyWithDelete = function (obj, path) {\n    return copyWithDeleteImpl(obj, path, 0);\n  };\n\n  var copyWithRenameImpl = function (obj, oldPath, newPath, index) {\n    var oldKey = oldPath[index];\n    var updated = isArray(obj) ? obj.slice() : assign({}, obj);\n\n    if (index + 1 === oldPath.length) {\n      var newKey = newPath[index]; // $FlowFixMe number or string is fine here\n\n      updated[newKey] = updated[oldKey];\n\n      if (isArray(updated)) {\n        updated.splice(oldKey, 1);\n      } else {\n        delete updated[oldKey];\n      }\n    } else {\n      // $FlowFixMe number or string is fine here\n      updated[oldKey] = copyWithRenameImpl( // $FlowFixMe number or string is fine here\n      obj[oldKey], oldPath, newPath, index + 1);\n    }\n\n    return updated;\n  };\n\n  var copyWithRename = function (obj, oldPath, newPath) {\n    if (oldPath.length !== newPath.length) {\n      warn('copyWithRename() expects paths of the same length');\n\n      return;\n    } else {\n      for (var i = 0; i < newPath.length - 1; i++) {\n        if (oldPath[i] !== newPath[i]) {\n          warn('copyWithRename() expects paths to be the same except for the deepest key');\n\n          return;\n        }\n      }\n    }\n\n    return copyWithRenameImpl(obj, oldPath, newPath, 0);\n  };\n\n  var copyWithSetImpl = function (obj, path, index, value) {\n    if (index >= path.length) {\n      return value;\n    }\n\n    var key = path[index];\n    var updated = isArray(obj) ? obj.slice() : assign({}, obj); // $FlowFixMe number or string is fine here\n\n    updated[key] = copyWithSetImpl(obj[key], path, index + 1, value);\n    return updated;\n  };\n\n  var copyWithSet = function (obj, path, value) {\n    return copyWithSetImpl(obj, path, 0, value);\n  };\n\n  var findHook = function (fiber, id) {\n    // For now, the \"id\" of stateful hooks is just the stateful hook index.\n    // This may change in the future with e.g. nested hooks.\n    var currentHook = fiber.memoizedState;\n\n    while (currentHook !== null && id > 0) {\n      currentHook = currentHook.next;\n      id--;\n    }\n\n    return currentHook;\n  }; // Support DevTools editable values for useState and useReducer.\n\n\n  overrideHookState = function (fiber, id, path, value) {\n    var hook = findHook(fiber, id);\n\n    if (hook !== null) {\n      var newState = copyWithSet(hook.memoizedState, path, value);\n      hook.memoizedState = newState;\n      hook.baseState = newState; // We aren't actually adding an update to the queue,\n      // because there is no update we can add for useReducer hooks that won't trigger an error.\n      // (There's no appropriate action type for DevTools overrides.)\n      // As a result though, React will see the scheduled update as a noop and bailout.\n      // Shallow cloning props works as a workaround for now to bypass the bailout check.\n\n      fiber.memoizedProps = assign({}, fiber.memoizedProps);\n      var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n      if (root !== null) {\n        scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);\n      }\n    }\n  };\n\n  overrideHookStateDeletePath = function (fiber, id, path) {\n    var hook = findHook(fiber, id);\n\n    if (hook !== null) {\n      var newState = copyWithDelete(hook.memoizedState, path);\n      hook.memoizedState = newState;\n      hook.baseState = newState; // We aren't actually adding an update to the queue,\n      // because there is no update we can add for useReducer hooks that won't trigger an error.\n      // (There's no appropriate action type for DevTools overrides.)\n      // As a result though, React will see the scheduled update as a noop and bailout.\n      // Shallow cloning props works as a workaround for now to bypass the bailout check.\n\n      fiber.memoizedProps = assign({}, fiber.memoizedProps);\n      var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n      if (root !== null) {\n        scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);\n      }\n    }\n  };\n\n  overrideHookStateRenamePath = function (fiber, id, oldPath, newPath) {\n    var hook = findHook(fiber, id);\n\n    if (hook !== null) {\n      var newState = copyWithRename(hook.memoizedState, oldPath, newPath);\n      hook.memoizedState = newState;\n      hook.baseState = newState; // We aren't actually adding an update to the queue,\n      // because there is no update we can add for useReducer hooks that won't trigger an error.\n      // (There's no appropriate action type for DevTools overrides.)\n      // As a result though, React will see the scheduled update as a noop and bailout.\n      // Shallow cloning props works as a workaround for now to bypass the bailout check.\n\n      fiber.memoizedProps = assign({}, fiber.memoizedProps);\n      var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n      if (root !== null) {\n        scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);\n      }\n    }\n  }; // Support DevTools props for function components, forwardRef, memo, host components, etc.\n\n\n  overrideProps = function (fiber, path, value) {\n    fiber.pendingProps = copyWithSet(fiber.memoizedProps, path, value);\n\n    if (fiber.alternate) {\n      fiber.alternate.pendingProps = fiber.pendingProps;\n    }\n\n    var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n    if (root !== null) {\n      scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);\n    }\n  };\n\n  overridePropsDeletePath = function (fiber, path) {\n    fiber.pendingProps = copyWithDelete(fiber.memoizedProps, path);\n\n    if (fiber.alternate) {\n      fiber.alternate.pendingProps = fiber.pendingProps;\n    }\n\n    var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n    if (root !== null) {\n      scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);\n    }\n  };\n\n  overridePropsRenamePath = function (fiber, oldPath, newPath) {\n    fiber.pendingProps = copyWithRename(fiber.memoizedProps, oldPath, newPath);\n\n    if (fiber.alternate) {\n      fiber.alternate.pendingProps = fiber.pendingProps;\n    }\n\n    var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n    if (root !== null) {\n      scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);\n    }\n  };\n\n  scheduleUpdate = function (fiber) {\n    var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n    if (root !== null) {\n      scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);\n    }\n  };\n\n  setErrorHandler = function (newShouldErrorImpl) {\n    shouldErrorImpl = newShouldErrorImpl;\n  };\n\n  setSuspenseHandler = function (newShouldSuspendImpl) {\n    shouldSuspendImpl = newShouldSuspendImpl;\n  };\n}\n\nfunction findHostInstanceByFiber(fiber) {\n  var hostFiber = findCurrentHostFiber(fiber);\n\n  if (hostFiber === null) {\n    return null;\n  }\n\n  return hostFiber.stateNode;\n}\n\nfunction emptyFindFiberByHostInstance(instance) {\n  return null;\n}\n\nfunction getCurrentFiberForDevTools() {\n  return current;\n}\n\nfunction injectIntoDevTools(devToolsConfig) {\n  var findFiberByHostInstance = devToolsConfig.findFiberByHostInstance;\n  var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\n  return injectInternals({\n    bundleType: devToolsConfig.bundleType,\n    version: devToolsConfig.version,\n    rendererPackageName: devToolsConfig.rendererPackageName,\n    rendererConfig: devToolsConfig.rendererConfig,\n    overrideHookState: overrideHookState,\n    overrideHookStateDeletePath: overrideHookStateDeletePath,\n    overrideHookStateRenamePath: overrideHookStateRenamePath,\n    overrideProps: overrideProps,\n    overridePropsDeletePath: overridePropsDeletePath,\n    overridePropsRenamePath: overridePropsRenamePath,\n    setErrorHandler: setErrorHandler,\n    setSuspenseHandler: setSuspenseHandler,\n    scheduleUpdate: scheduleUpdate,\n    currentDispatcherRef: ReactCurrentDispatcher,\n    findHostInstanceByFiber: findHostInstanceByFiber,\n    findFiberByHostInstance: findFiberByHostInstance || emptyFindFiberByHostInstance,\n    // React Refresh\n    findHostInstancesForRefresh:  findHostInstancesForRefresh ,\n    scheduleRefresh:  scheduleRefresh ,\n    scheduleRoot:  scheduleRoot ,\n    setRefreshHandler:  setRefreshHandler ,\n    // Enables DevTools to append owner stacks to error messages in DEV mode.\n    getCurrentFiber:  getCurrentFiberForDevTools ,\n    // Enables DevTools to detect reconciler version rather than renderer version\n    // which may not match for third party renderers.\n    reconcilerVersion: ReactVersion\n  });\n}\n\n/* global reportError */\n\nvar defaultOnRecoverableError = typeof reportError === 'function' ? // In modern browsers, reportError will dispatch an error event,\n// emulating an uncaught JavaScript error.\nreportError : function (error) {\n  // In older browsers and test environments, fallback to console.error.\n  // eslint-disable-next-line react-internal/no-production-logging\n  console['error'](error);\n};\n\nfunction ReactDOMRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\n\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render = function (children) {\n  var root = this._internalRoot;\n\n  if (root === null) {\n    throw new Error('Cannot update an unmounted root.');\n  }\n\n  {\n    if (typeof arguments[1] === 'function') {\n      error('render(...): does not support the second callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');\n    } else if (isValidContainer(arguments[1])) {\n      error('You passed a container to the second argument of root.render(...). ' + \"You don't need to pass it again since you already passed it to create the root.\");\n    } else if (typeof arguments[1] !== 'undefined') {\n      error('You passed a second argument to root.render(...) but it only accepts ' + 'one argument.');\n    }\n\n    var container = root.containerInfo;\n\n    if (container.nodeType !== COMMENT_NODE) {\n      var hostInstance = findHostInstanceWithNoPortals(root.current);\n\n      if (hostInstance) {\n        if (hostInstance.parentNode !== container) {\n          error('render(...): It looks like the React-rendered content of the ' + 'root container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + \"root.unmount() to empty a root's container.\");\n        }\n      }\n    }\n  }\n\n  updateContainer(children, root, null, null);\n};\n\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount = function () {\n  {\n    if (typeof arguments[0] === 'function') {\n      error('unmount(...): does not support a callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');\n    }\n  }\n\n  var root = this._internalRoot;\n\n  if (root !== null) {\n    this._internalRoot = null;\n    var container = root.containerInfo;\n\n    {\n      if (isAlreadyRendering()) {\n        error('Attempted to synchronously unmount a root while React was already ' + 'rendering. React cannot finish unmounting the root until the ' + 'current render has completed, which may lead to a race condition.');\n      }\n    }\n\n    flushSync(function () {\n      updateContainer(null, root, null, null);\n    });\n    unmarkContainerAsRoot(container);\n  }\n};\n\nfunction createRoot(container, options) {\n  if (!isValidContainer(container)) {\n    throw new Error('createRoot(...): Target container is not a DOM element.');\n  }\n\n  warnIfReactDOMContainerInDEV(container);\n  var isStrictMode = false;\n  var concurrentUpdatesByDefaultOverride = false;\n  var identifierPrefix = '';\n  var onRecoverableError = defaultOnRecoverableError;\n  var transitionCallbacks = null;\n\n  if (options !== null && options !== undefined) {\n    {\n      if (options.hydrate) {\n        warn('hydrate through createRoot is deprecated. Use ReactDOMClient.hydrateRoot(container, <App />) instead.');\n      } else {\n        if (typeof options === 'object' && options !== null && options.$$typeof === REACT_ELEMENT_TYPE) {\n          error('You passed a JSX element to createRoot. You probably meant to ' + 'call root.render instead. ' + 'Example usage:\\n\\n' + '  let root = createRoot(domContainer);\\n' + '  root.render(<App />);');\n        }\n      }\n    }\n\n    if (options.unstable_strictMode === true) {\n      isStrictMode = true;\n    }\n\n    if (options.identifierPrefix !== undefined) {\n      identifierPrefix = options.identifierPrefix;\n    }\n\n    if (options.onRecoverableError !== undefined) {\n      onRecoverableError = options.onRecoverableError;\n    }\n\n    if (options.transitionCallbacks !== undefined) {\n      transitionCallbacks = options.transitionCallbacks;\n    }\n  }\n\n  var root = createContainer(container, ConcurrentRoot, null, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError);\n  markContainerAsRoot(root.current, container);\n  var rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container;\n  listenToAllSupportedEvents(rootContainerElement);\n  return new ReactDOMRoot(root);\n}\n\nfunction ReactDOMHydrationRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\n\nfunction scheduleHydration(target) {\n  if (target) {\n    queueExplicitHydrationTarget(target);\n  }\n}\n\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = scheduleHydration;\nfunction hydrateRoot(container, initialChildren, options) {\n  if (!isValidContainer(container)) {\n    throw new Error('hydrateRoot(...): Target container is not a DOM element.');\n  }\n\n  warnIfReactDOMContainerInDEV(container);\n\n  {\n    if (initialChildren === undefined) {\n      error('Must provide initial children as second argument to hydrateRoot. ' + 'Example usage: hydrateRoot(domContainer, <App />)');\n    }\n  } // For now we reuse the whole bag of options since they contain\n  // the hydration callbacks.\n\n\n  var hydrationCallbacks = options != null ? options : null; // TODO: Delete this option\n\n  var mutableSources = options != null && options.hydratedSources || null;\n  var isStrictMode = false;\n  var concurrentUpdatesByDefaultOverride = false;\n  var identifierPrefix = '';\n  var onRecoverableError = defaultOnRecoverableError;\n\n  if (options !== null && options !== undefined) {\n    if (options.unstable_strictMode === true) {\n      isStrictMode = true;\n    }\n\n    if (options.identifierPrefix !== undefined) {\n      identifierPrefix = options.identifierPrefix;\n    }\n\n    if (options.onRecoverableError !== undefined) {\n      onRecoverableError = options.onRecoverableError;\n    }\n  }\n\n  var root = createHydrationContainer(initialChildren, null, container, ConcurrentRoot, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError);\n  markContainerAsRoot(root.current, container); // This can't be a comment node since hydration doesn't work on comment nodes anyway.\n\n  listenToAllSupportedEvents(container);\n\n  if (mutableSources) {\n    for (var i = 0; i < mutableSources.length; i++) {\n      var mutableSource = mutableSources[i];\n      registerMutableSourceForHydration(root, mutableSource);\n    }\n  }\n\n  return new ReactDOMHydrationRoot(root);\n}\nfunction isValidContainer(node) {\n  return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || !disableCommentsAsDOMContainers  ));\n} // TODO: Remove this function which also includes comment nodes.\n// We only use it in places that are currently more relaxed.\n\nfunction isValidContainerLegacy(node) {\n  return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || node.nodeType === COMMENT_NODE && node.nodeValue === ' react-mount-point-unstable '));\n}\n\nfunction warnIfReactDOMContainerInDEV(container) {\n  {\n    if (container.nodeType === ELEMENT_NODE && container.tagName && container.tagName.toUpperCase() === 'BODY') {\n      error('createRoot(): Creating roots directly with document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try using a container element created ' + 'for your app.');\n    }\n\n    if (isContainerMarkedAsRoot(container)) {\n      if (container._reactRootContainer) {\n        error('You are calling ReactDOMClient.createRoot() on a container that was previously ' + 'passed to ReactDOM.render(). This is not supported.');\n      } else {\n        error('You are calling ReactDOMClient.createRoot() on a container that ' + 'has already been passed to createRoot() before. Instead, call ' + 'root.render() on the existing root instead if you want to update it.');\n      }\n    }\n  }\n}\n\nvar ReactCurrentOwner$3 = ReactSharedInternals.ReactCurrentOwner;\nvar topLevelUpdateWarnings;\n\n{\n  topLevelUpdateWarnings = function (container) {\n    if (container._reactRootContainer && container.nodeType !== COMMENT_NODE) {\n      var hostInstance = findHostInstanceWithNoPortals(container._reactRootContainer.current);\n\n      if (hostInstance) {\n        if (hostInstance.parentNode !== container) {\n          error('render(...): It looks like the React-rendered content of this ' + 'container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + 'ReactDOM.unmountComponentAtNode to empty a container.');\n        }\n      }\n    }\n\n    var isRootRenderedBySomeReact = !!container._reactRootContainer;\n    var rootEl = getReactRootElementInContainer(container);\n    var hasNonRootReactChild = !!(rootEl && getInstanceFromNode(rootEl));\n\n    if (hasNonRootReactChild && !isRootRenderedBySomeReact) {\n      error('render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.');\n    }\n\n    if (container.nodeType === ELEMENT_NODE && container.tagName && container.tagName.toUpperCase() === 'BODY') {\n      error('render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.');\n    }\n  };\n}\n\nfunction getReactRootElementInContainer(container) {\n  if (!container) {\n    return null;\n  }\n\n  if (container.nodeType === DOCUMENT_NODE) {\n    return container.documentElement;\n  } else {\n    return container.firstChild;\n  }\n}\n\nfunction noopOnRecoverableError() {// This isn't reachable because onRecoverableError isn't called in the\n  // legacy API.\n}\n\nfunction legacyCreateRootFromDOMContainer(container, initialChildren, parentComponent, callback, isHydrationContainer) {\n  if (isHydrationContainer) {\n    if (typeof callback === 'function') {\n      var originalCallback = callback;\n\n      callback = function () {\n        var instance = getPublicRootInstance(root);\n        originalCallback.call(instance);\n      };\n    }\n\n    var root = createHydrationContainer(initialChildren, callback, container, LegacyRoot, null, // hydrationCallbacks\n    false, // isStrictMode\n    false, // concurrentUpdatesByDefaultOverride,\n    '', // identifierPrefix\n    noopOnRecoverableError);\n    container._reactRootContainer = root;\n    markContainerAsRoot(root.current, container);\n    var rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container;\n    listenToAllSupportedEvents(rootContainerElement);\n    flushSync();\n    return root;\n  } else {\n    // First clear any existing content.\n    var rootSibling;\n\n    while (rootSibling = container.lastChild) {\n      container.removeChild(rootSibling);\n    }\n\n    if (typeof callback === 'function') {\n      var _originalCallback = callback;\n\n      callback = function () {\n        var instance = getPublicRootInstance(_root);\n\n        _originalCallback.call(instance);\n      };\n    }\n\n    var _root = createContainer(container, LegacyRoot, null, // hydrationCallbacks\n    false, // isStrictMode\n    false, // concurrentUpdatesByDefaultOverride,\n    '', // identifierPrefix\n    noopOnRecoverableError);\n\n    container._reactRootContainer = _root;\n    markContainerAsRoot(_root.current, container);\n\n    var _rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container;\n\n    listenToAllSupportedEvents(_rootContainerElement); // Initial mount should not be batched.\n\n    flushSync(function () {\n      updateContainer(initialChildren, _root, parentComponent, callback);\n    });\n    return _root;\n  }\n}\n\nfunction warnOnInvalidCallback$1(callback, callerName) {\n  {\n    if (callback !== null && typeof callback !== 'function') {\n      error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n    }\n  }\n}\n\nfunction legacyRenderSubtreeIntoContainer(parentComponent, children, container, forceHydrate, callback) {\n  {\n    topLevelUpdateWarnings(container);\n    warnOnInvalidCallback$1(callback === undefined ? null : callback, 'render');\n  }\n\n  var maybeRoot = container._reactRootContainer;\n  var root;\n\n  if (!maybeRoot) {\n    // Initial mount\n    root = legacyCreateRootFromDOMContainer(container, children, parentComponent, callback, forceHydrate);\n  } else {\n    root = maybeRoot;\n\n    if (typeof callback === 'function') {\n      var originalCallback = callback;\n\n      callback = function () {\n        var instance = getPublicRootInstance(root);\n        originalCallback.call(instance);\n      };\n    } // Update\n\n\n    updateContainer(children, root, parentComponent, callback);\n  }\n\n  return getPublicRootInstance(root);\n}\n\nvar didWarnAboutFindDOMNode = false;\nfunction findDOMNode(componentOrElement) {\n  {\n    if (!didWarnAboutFindDOMNode) {\n      didWarnAboutFindDOMNode = true;\n\n      error('findDOMNode is deprecated and will be removed in the next major ' + 'release. Instead, add a ref directly to the element you want ' + 'to reference. Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-find-node');\n    }\n\n    var owner = ReactCurrentOwner$3.current;\n\n    if (owner !== null && owner.stateNode !== null) {\n      var warnedAboutRefsInRender = owner.stateNode._warnedAboutRefsInRender;\n\n      if (!warnedAboutRefsInRender) {\n        error('%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentNameFromType(owner.type) || 'A component');\n      }\n\n      owner.stateNode._warnedAboutRefsInRender = true;\n    }\n  }\n\n  if (componentOrElement == null) {\n    return null;\n  }\n\n  if (componentOrElement.nodeType === ELEMENT_NODE) {\n    return componentOrElement;\n  }\n\n  {\n    return findHostInstanceWithWarning(componentOrElement, 'findDOMNode');\n  }\n}\nfunction hydrate(element, container, callback) {\n  {\n    error('ReactDOM.hydrate is no longer supported in React 18. Use hydrateRoot ' + 'instead. Until you switch to the new API, your app will behave as ' + \"if it's running React 17. Learn \" + 'more: https://reactjs.org/link/switch-to-createroot');\n  }\n\n  if (!isValidContainerLegacy(container)) {\n    throw new Error('Target container is not a DOM element.');\n  }\n\n  {\n    var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n    if (isModernRoot) {\n      error('You are calling ReactDOM.hydrate() on a container that was previously ' + 'passed to ReactDOMClient.createRoot(). This is not supported. ' + 'Did you mean to call hydrateRoot(container, element)?');\n    }\n  } // TODO: throw or warn if we couldn't hydrate?\n\n\n  return legacyRenderSubtreeIntoContainer(null, element, container, true, callback);\n}\nfunction render(element, container, callback) {\n  {\n    error('ReactDOM.render is no longer supported in React 18. Use createRoot ' + 'instead. Until you switch to the new API, your app will behave as ' + \"if it's running React 17. Learn \" + 'more: https://reactjs.org/link/switch-to-createroot');\n  }\n\n  if (!isValidContainerLegacy(container)) {\n    throw new Error('Target container is not a DOM element.');\n  }\n\n  {\n    var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n    if (isModernRoot) {\n      error('You are calling ReactDOM.render() on a container that was previously ' + 'passed to ReactDOMClient.createRoot(). This is not supported. ' + 'Did you mean to call root.render(element)?');\n    }\n  }\n\n  return legacyRenderSubtreeIntoContainer(null, element, container, false, callback);\n}\nfunction unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {\n  {\n    error('ReactDOM.unstable_renderSubtreeIntoContainer() is no longer supported ' + 'in React 18. Consider using a portal instead. Until you switch to ' + \"the createRoot API, your app will behave as if it's running React \" + '17. Learn more: https://reactjs.org/link/switch-to-createroot');\n  }\n\n  if (!isValidContainerLegacy(containerNode)) {\n    throw new Error('Target container is not a DOM element.');\n  }\n\n  if (parentComponent == null || !has(parentComponent)) {\n    throw new Error('parentComponent must be a valid React Component');\n  }\n\n  return legacyRenderSubtreeIntoContainer(parentComponent, element, containerNode, false, callback);\n}\nvar didWarnAboutUnmountComponentAtNode = false;\nfunction unmountComponentAtNode(container) {\n  {\n    if (!didWarnAboutUnmountComponentAtNode) {\n      didWarnAboutUnmountComponentAtNode = true;\n\n      error('unmountComponentAtNode is deprecated and will be removed in the ' + 'next major release. Switch to the createRoot API. Learn ' + 'more: https://reactjs.org/link/switch-to-createroot');\n    }\n  }\n\n  if (!isValidContainerLegacy(container)) {\n    throw new Error('unmountComponentAtNode(...): Target container is not a DOM element.');\n  }\n\n  {\n    var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n    if (isModernRoot) {\n      error('You are calling ReactDOM.unmountComponentAtNode() on a container that was previously ' + 'passed to ReactDOMClient.createRoot(). This is not supported. Did you mean to call root.unmount()?');\n    }\n  }\n\n  if (container._reactRootContainer) {\n    {\n      var rootEl = getReactRootElementInContainer(container);\n      var renderedByDifferentReact = rootEl && !getInstanceFromNode(rootEl);\n\n      if (renderedByDifferentReact) {\n        error(\"unmountComponentAtNode(): The node you're attempting to unmount \" + 'was rendered by another copy of React.');\n      }\n    } // Unmount should not be batched.\n\n\n    flushSync(function () {\n      legacyRenderSubtreeIntoContainer(null, null, container, false, function () {\n        // $FlowFixMe This should probably use `delete container._reactRootContainer`\n        container._reactRootContainer = null;\n        unmarkContainerAsRoot(container);\n      });\n    }); // If you call unmountComponentAtNode twice in quick succession, you'll\n    // get `true` twice. That's probably fine?\n\n    return true;\n  } else {\n    {\n      var _rootEl = getReactRootElementInContainer(container);\n\n      var hasNonRootReactChild = !!(_rootEl && getInstanceFromNode(_rootEl)); // Check if the container itself is a React root node.\n\n      var isContainerReactRoot = container.nodeType === ELEMENT_NODE && isValidContainerLegacy(container.parentNode) && !!container.parentNode._reactRootContainer;\n\n      if (hasNonRootReactChild) {\n        error(\"unmountComponentAtNode(): The node you're attempting to unmount \" + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.');\n      }\n    }\n\n    return false;\n  }\n}\n\nsetAttemptSynchronousHydration(attemptSynchronousHydration$1);\nsetAttemptContinuousHydration(attemptContinuousHydration$1);\nsetAttemptHydrationAtCurrentPriority(attemptHydrationAtCurrentPriority$1);\nsetGetCurrentUpdatePriority(getCurrentUpdatePriority);\nsetAttemptHydrationAtPriority(runWithPriority);\n\n{\n  if (typeof Map !== 'function' || // $FlowIssue Flow incorrectly thinks Map has no prototype\n  Map.prototype == null || typeof Map.prototype.forEach !== 'function' || typeof Set !== 'function' || // $FlowIssue Flow incorrectly thinks Set has no prototype\n  Set.prototype == null || typeof Set.prototype.clear !== 'function' || typeof Set.prototype.forEach !== 'function') {\n    error('React depends on Map and Set built-in types. Make sure that you load a ' + 'polyfill in older browsers. https://reactjs.org/link/react-polyfills');\n  }\n}\n\nsetRestoreImplementation(restoreControlledState$3);\nsetBatchingImplementation(batchedUpdates$1, discreteUpdates, flushSync);\n\nfunction createPortal$1(children, container) {\n  var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n  if (!isValidContainer(container)) {\n    throw new Error('Target container is not a DOM element.');\n  } // TODO: pass ReactDOM portal implementation as third argument\n  // $FlowFixMe The Flow type is opaque but there's no way to actually create it.\n\n\n  return createPortal(children, container, null, key);\n}\n\nfunction renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {\n  return unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback);\n}\n\nvar Internals = {\n  usingClientEntryPoint: false,\n  // Keep in sync with ReactTestUtils.js.\n  // This is an array for better minification.\n  Events: [getInstanceFromNode, getNodeFromInstance, getFiberCurrentPropsFromNode, enqueueStateRestore, restoreStateIfNeeded, batchedUpdates$1]\n};\n\nfunction createRoot$1(container, options) {\n  {\n    if (!Internals.usingClientEntryPoint && !false) {\n      error('You are importing createRoot from \"react-dom\" which is not supported. ' + 'You should instead import it from \"react-dom/client\".');\n    }\n  }\n\n  return createRoot(container, options);\n}\n\nfunction hydrateRoot$1(container, initialChildren, options) {\n  {\n    if (!Internals.usingClientEntryPoint && !false) {\n      error('You are importing hydrateRoot from \"react-dom\" which is not supported. ' + 'You should instead import it from \"react-dom/client\".');\n    }\n  }\n\n  return hydrateRoot(container, initialChildren, options);\n} // Overload the definition to the two valid signatures.\n// Warning, this opts-out of checking the function body.\n\n\n// eslint-disable-next-line no-redeclare\nfunction flushSync$1(fn) {\n  {\n    if (isAlreadyRendering()) {\n      error('flushSync was called from inside a lifecycle method. React cannot ' + 'flush when React is already rendering. Consider moving this call to ' + 'a scheduler task or micro task.');\n    }\n  }\n\n  return flushSync(fn);\n}\nvar foundDevTools = injectIntoDevTools({\n  findFiberByHostInstance: getClosestInstanceFromNode,\n  bundleType:  1 ,\n  version: ReactVersion,\n  rendererPackageName: 'react-dom'\n});\n\n{\n  if (!foundDevTools && canUseDOM && window.top === window.self) {\n    // If we're in Chrome or Firefox, provide a download link if not installed.\n    if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n      var protocol = window.location.protocol; // Don't warn in exotic cases like chrome-extension://.\n\n      if (/^(https?|file):$/.test(protocol)) {\n        // eslint-disable-next-line react-internal/no-production-logging\n        console.info('%cDownload the React DevTools ' + 'for a better development experience: ' + 'https://reactjs.org/link/react-devtools' + (protocol === 'file:' ? '\\nYou might need to use a local HTTP server (instead of file://): ' + 'https://reactjs.org/link/react-devtools-faq' : ''), 'font-weight:bold');\n      }\n    }\n  }\n}\n\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals;\nexports.createPortal = createPortal$1;\nexports.createRoot = createRoot$1;\nexports.findDOMNode = findDOMNode;\nexports.flushSync = flushSync$1;\nexports.hydrate = hydrate;\nexports.hydrateRoot = hydrateRoot$1;\nexports.render = render;\nexports.unmountComponentAtNode = unmountComponentAtNode;\nexports.unstable_batchedUpdates = batchedUpdates$1;\nexports.unstable_renderSubtreeIntoContainer = renderSubtreeIntoContainer;\nexports.version = ReactVersion;\n          /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n    'function'\n) {\n  __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n        \n  })();\n}\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n  exports.createRoot = m.createRoot;\n  exports.hydrateRoot = m.hydrateRoot;\n} else {\n  var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n  exports.createRoot = function(c, o) {\n    i.usingClientEntryPoint = true;\n    try {\n      return m.createRoot(c, o);\n    } finally {\n      i.usingClientEntryPoint = false;\n    }\n  };\n  exports.hydrateRoot = function(c, h, o) {\n    i.usingClientEntryPoint = true;\n    try {\n      return m.hydrateRoot(c, h, o);\n    } finally {\n      i.usingClientEntryPoint = false;\n    }\n  };\n}\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\nvar React = require('react');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n  {\n    {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      printWarning('error', format, args);\n    }\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n    var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n    if (stack !== '') {\n      format += '%s';\n      args = args.concat([stack]);\n    } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n    var argsWithFormat = args.map(function (item) {\n      return String(item);\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n  }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n  REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n  if (typeof type === 'string' || typeof type === 'function') {\n    return true;\n  } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n  if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing  || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden  || type === REACT_OFFSCREEN_TYPE || enableScopeAPI  || enableCacheElement  || enableTransitionTracing ) {\n    return true;\n  }\n\n  if (typeof type === 'object' && type !== null) {\n    if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n    // types supported by any Flight configuration anywhere since\n    // we don't know which Flight build this will end up being used\n    // with.\n    type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var displayName = outerType.displayName;\n\n  if (displayName) {\n    return displayName;\n  }\n\n  var functionName = innerType.displayName || innerType.name || '';\n  return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n  return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  {\n    if (typeof type.tag === 'number') {\n      error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n    }\n  }\n\n  if (typeof type === 'function') {\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return 'Profiler';\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        var context = type;\n        return getContextName(context) + '.Consumer';\n\n      case REACT_PROVIDER_TYPE:\n        var provider = type;\n        return getContextName(provider._context) + '.Provider';\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        var outerName = type.displayName || null;\n\n        if (outerName !== null) {\n          return outerName;\n        }\n\n        return getComponentNameFromType(type.type) || 'Memo';\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            return getComponentNameFromType(init(payload));\n          } catch (x) {\n            return null;\n          }\n        }\n\n      // eslint-disable-next-line no-fallthrough\n    }\n  }\n\n  return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n  {\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      prevLog = console.log;\n      prevInfo = console.info;\n      prevWarn = console.warn;\n      prevError = console.error;\n      prevGroup = console.group;\n      prevGroupCollapsed = console.groupCollapsed;\n      prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n      var props = {\n        configurable: true,\n        enumerable: true,\n        value: disabledLog,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        info: props,\n        log: props,\n        warn: props,\n        error: props,\n        group: props,\n        groupCollapsed: props,\n        groupEnd: props\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    disabledDepth++;\n  }\n}\nfunction reenableLogs() {\n  {\n    disabledDepth--;\n\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      var props = {\n        configurable: true,\n        enumerable: true,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        log: assign({}, props, {\n          value: prevLog\n        }),\n        info: assign({}, props, {\n          value: prevInfo\n        }),\n        warn: assign({}, props, {\n          value: prevWarn\n        }),\n        error: assign({}, props, {\n          value: prevError\n        }),\n        group: assign({}, props, {\n          value: prevGroup\n        }),\n        groupCollapsed: assign({}, props, {\n          value: prevGroupCollapsed\n        }),\n        groupEnd: assign({}, props, {\n          value: prevGroupEnd\n        })\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    if (disabledDepth < 0) {\n      error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n    }\n  }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n  {\n    if (prefix === undefined) {\n      // Extract the VM specific prefix used by each line.\n      try {\n        throw Error();\n      } catch (x) {\n        var match = x.stack.trim().match(/\\n( *(at )?)/);\n        prefix = match && match[1] || '';\n      }\n    } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n    return '\\n' + prefix + name;\n  }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n  var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n  componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n  // If something asked for a stack inside a fake render, it should get ignored.\n  if ( !fn || reentry) {\n    return '';\n  }\n\n  {\n    var frame = componentFrameCache.get(fn);\n\n    if (frame !== undefined) {\n      return frame;\n    }\n  }\n\n  var control;\n  reentry = true;\n  var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n  Error.prepareStackTrace = undefined;\n  var previousDispatcher;\n\n  {\n    previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n    // for warnings.\n\n    ReactCurrentDispatcher.current = null;\n    disableLogs();\n  }\n\n  try {\n    // This should throw.\n    if (construct) {\n      // Something should be setting the props in the constructor.\n      var Fake = function () {\n        throw Error();\n      }; // $FlowFixMe\n\n\n      Object.defineProperty(Fake.prototype, 'props', {\n        set: function () {\n          // We use a throwing setter instead of frozen or non-writable props\n          // because that won't throw in a non-strict mode function.\n          throw Error();\n        }\n      });\n\n      if (typeof Reflect === 'object' && Reflect.construct) {\n        // We construct a different control for this case to include any extra\n        // frames added by the construct call.\n        try {\n          Reflect.construct(Fake, []);\n        } catch (x) {\n          control = x;\n        }\n\n        Reflect.construct(fn, [], Fake);\n      } else {\n        try {\n          Fake.call();\n        } catch (x) {\n          control = x;\n        }\n\n        fn.call(Fake.prototype);\n      }\n    } else {\n      try {\n        throw Error();\n      } catch (x) {\n        control = x;\n      }\n\n      fn();\n    }\n  } catch (sample) {\n    // This is inlined manually because closure doesn't do it for us.\n    if (sample && control && typeof sample.stack === 'string') {\n      // This extracts the first frame from the sample that isn't also in the control.\n      // Skipping one frame that we assume is the frame that calls the two.\n      var sampleLines = sample.stack.split('\\n');\n      var controlLines = control.stack.split('\\n');\n      var s = sampleLines.length - 1;\n      var c = controlLines.length - 1;\n\n      while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n        // We expect at least one stack frame to be shared.\n        // Typically this will be the root most one. However, stack frames may be\n        // cut off due to maximum stack limits. In this case, one maybe cut off\n        // earlier than the other. We assume that the sample is longer or the same\n        // and there for cut off earlier. So we should find the root most frame in\n        // the sample somewhere in the control.\n        c--;\n      }\n\n      for (; s >= 1 && c >= 0; s--, c--) {\n        // Next we find the first one that isn't the same which should be the\n        // frame that called our sample function and the control.\n        if (sampleLines[s] !== controlLines[c]) {\n          // In V8, the first line is describing the message but other VMs don't.\n          // If we're about to return the first line, and the control is also on the same\n          // line, that's a pretty good indicator that our sample threw at same line as\n          // the control. I.e. before we entered the sample frame. So we ignore this result.\n          // This can happen if you passed a class to function component, or non-function.\n          if (s !== 1 || c !== 1) {\n            do {\n              s--;\n              c--; // We may still have similar intermediate frames from the construct call.\n              // The next one that isn't the same should be our match though.\n\n              if (c < 0 || sampleLines[s] !== controlLines[c]) {\n                // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n                var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n                // but we have a user-provided \"displayName\"\n                // splice it in to make the stack more readable.\n\n\n                if (fn.displayName && _frame.includes('<anonymous>')) {\n                  _frame = _frame.replace('<anonymous>', fn.displayName);\n                }\n\n                {\n                  if (typeof fn === 'function') {\n                    componentFrameCache.set(fn, _frame);\n                  }\n                } // Return the line we found.\n\n\n                return _frame;\n              }\n            } while (s >= 1 && c >= 0);\n          }\n\n          break;\n        }\n      }\n    }\n  } finally {\n    reentry = false;\n\n    {\n      ReactCurrentDispatcher.current = previousDispatcher;\n      reenableLogs();\n    }\n\n    Error.prepareStackTrace = previousPrepareStackTrace;\n  } // Fallback to just using the name if we couldn't make it throw.\n\n\n  var name = fn ? fn.displayName || fn.name : '';\n  var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n  {\n    if (typeof fn === 'function') {\n      componentFrameCache.set(fn, syntheticFrame);\n    }\n  }\n\n  return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n  {\n    return describeNativeComponentFrame(fn, false);\n  }\n}\n\nfunction shouldConstruct(Component) {\n  var prototype = Component.prototype;\n  return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n  if (type == null) {\n    return '';\n  }\n\n  if (typeof type === 'function') {\n    {\n      return describeNativeComponentFrame(type, shouldConstruct(type));\n    }\n  }\n\n  if (typeof type === 'string') {\n    return describeBuiltInComponentFrame(type);\n  }\n\n  switch (type) {\n    case REACT_SUSPENSE_TYPE:\n      return describeBuiltInComponentFrame('Suspense');\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return describeBuiltInComponentFrame('SuspenseList');\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_FORWARD_REF_TYPE:\n        return describeFunctionComponentFrame(type.render);\n\n      case REACT_MEMO_TYPE:\n        // Memo may contain any component type so we recursively resolve it.\n        return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            // Lazy may contain any component type so we recursively resolve it.\n            return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n          } catch (x) {}\n        }\n    }\n  }\n\n  return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame.setExtraStackFrame(null);\n    }\n  }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n  {\n    // $FlowFixMe This is okay but Flow doesn't know it.\n    var has = Function.call.bind(hasOwnProperty);\n\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            // eslint-disable-next-line react-internal/prod-error-codes\n            var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n\n          error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n        } catch (ex) {\n          error$1 = ex;\n        }\n\n        if (error$1 && !(error$1 instanceof Error)) {\n          setCurrentlyValidatingElement(element);\n\n          error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n          setCurrentlyValidatingElement(null);\n        }\n\n        if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error$1.message] = true;\n          setCurrentlyValidatingElement(element);\n\n          error('Failed %s type: %s', location, error$1.message);\n\n          setCurrentlyValidatingElement(null);\n        }\n      }\n    }\n  }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n  return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n  {\n    // toStringTag is needed for namespaced types like Temporal.Instant\n    var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n    var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n    return type;\n  }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n  {\n    try {\n      testStringCoercion(value);\n      return false;\n    } catch (e) {\n      return true;\n    }\n  }\n}\n\nfunction testStringCoercion(value) {\n  // If you ended up here by following an exception call stack, here's what's\n  // happened: you supplied an object or symbol value to React (as a prop, key,\n  // DOM attribute, CSS property, string ref, etc.) and when React tried to\n  // coerce it to a string using `'' + value`, an exception was thrown.\n  //\n  // The most common types that will cause this exception are `Symbol` instances\n  // and Temporal objects like `Temporal.Instant`. But any object that has a\n  // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n  // exception. (Library authors do this to prevent users from using built-in\n  // numeric operators like `+` or comparison operators like `>=` because custom\n  // methods are needed to perform accurate arithmetic or comparison.)\n  //\n  // To fix the problem, coerce this object or symbol value to a string before\n  // passing it to React. The most reliable way is usually `String(value)`.\n  //\n  // To find which value is throwing, check the browser or debugger console.\n  // Before this exception was thrown, there should be `console.error` output\n  // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n  // problem and how that type was used: key, atrribute, input value prop, etc.\n  // In most cases, this console output also shows the component and its\n  // ancestor components where the exception happened.\n  //\n  // eslint-disable-next-line react-internal/safe-string-coercion\n  return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n  key: true,\n  ref: true,\n  __self: true,\n  __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n  didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n  {\n    if (hasOwnProperty.call(config, 'ref')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n  {\n    if (hasOwnProperty.call(config, 'key')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n  {\n    if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n      var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n      if (!didWarnAboutStringRefs[componentName]) {\n        error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n        didWarnAboutStringRefs[componentName] = true;\n      }\n    }\n  }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n  {\n    var warnAboutAccessingKey = function () {\n      if (!specialPropKeyWarningShown) {\n        specialPropKeyWarningShown = true;\n\n        error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    };\n\n    warnAboutAccessingKey.isReactWarning = true;\n    Object.defineProperty(props, 'key', {\n      get: warnAboutAccessingKey,\n      configurable: true\n    });\n  }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n  {\n    var warnAboutAccessingRef = function () {\n      if (!specialPropRefWarningShown) {\n        specialPropRefWarningShown = true;\n\n        error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    };\n\n    warnAboutAccessingRef.isReactWarning = true;\n    Object.defineProperty(props, 'ref', {\n      get: warnAboutAccessingRef,\n      configurable: true\n    });\n  }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n  var element = {\n    // This tag allows us to uniquely identify this as a React Element\n    $$typeof: REACT_ELEMENT_TYPE,\n    // Built-in properties that belong on the element\n    type: type,\n    key: key,\n    ref: ref,\n    props: props,\n    // Record the component responsible for creating this element.\n    _owner: owner\n  };\n\n  {\n    // The validation flag is currently mutative. We put it on\n    // an external backing store so that we can freeze the whole object.\n    // This can be replaced with a WeakMap once they are implemented in\n    // commonly used development environments.\n    element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n    // the validation flag non-enumerable (where possible, which should\n    // include every environment we run tests in), so the test framework\n    // ignores it.\n\n    Object.defineProperty(element._store, 'validated', {\n      configurable: false,\n      enumerable: false,\n      writable: true,\n      value: false\n    }); // self and source are DEV only properties.\n\n    Object.defineProperty(element, '_self', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: self\n    }); // Two elements created in two different places should be considered\n    // equal for testing purposes and therefore we hide it from enumeration.\n\n    Object.defineProperty(element, '_source', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: source\n    });\n\n    if (Object.freeze) {\n      Object.freeze(element.props);\n      Object.freeze(element);\n    }\n  }\n\n  return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n  {\n    var propName; // Reserved names are extracted\n\n    var props = {};\n    var key = null;\n    var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n    // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n    // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n    // but as an intermediary step, we will use jsxDEV for everything except\n    // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n    // key is explicitly declared to be undefined or not.\n\n    if (maybeKey !== undefined) {\n      {\n        checkKeyStringCoercion(maybeKey);\n      }\n\n      key = '' + maybeKey;\n    }\n\n    if (hasValidKey(config)) {\n      {\n        checkKeyStringCoercion(config.key);\n      }\n\n      key = '' + config.key;\n    }\n\n    if (hasValidRef(config)) {\n      ref = config.ref;\n      warnIfStringRefCannotBeAutoConverted(config, self);\n    } // Remaining properties are added to a new props object\n\n\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    } // Resolve default props\n\n\n    if (type && type.defaultProps) {\n      var defaultProps = type.defaultProps;\n\n      for (propName in defaultProps) {\n        if (props[propName] === undefined) {\n          props[propName] = defaultProps[propName];\n        }\n      }\n    }\n\n    if (key || ref) {\n      var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n      if (key) {\n        defineKeyPropWarningGetter(props, displayName);\n      }\n\n      if (ref) {\n        defineRefPropWarningGetter(props, displayName);\n      }\n    }\n\n    return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n  }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n    }\n  }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n  propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n  {\n    return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n  }\n}\n\nfunction getDeclarationErrorAddendum() {\n  {\n    if (ReactCurrentOwner$1.current) {\n      var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n      if (name) {\n        return '\\n\\nCheck the render method of `' + name + '`.';\n      }\n    }\n\n    return '';\n  }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n  {\n    if (source !== undefined) {\n      var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n      var lineNumber = source.lineNumber;\n      return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n    }\n\n    return '';\n  }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n  {\n    var info = getDeclarationErrorAddendum();\n\n    if (!info) {\n      var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n      if (parentName) {\n        info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n      }\n    }\n\n    return info;\n  }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n  {\n    if (!element._store || element._store.validated || element.key != null) {\n      return;\n    }\n\n    element._store.validated = true;\n    var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n    if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n      return;\n    }\n\n    ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n    // property, it may be the creator of the child that's responsible for\n    // assigning it a key.\n\n    var childOwner = '';\n\n    if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n      // Give the component that originally created this child.\n      childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n    }\n\n    setCurrentlyValidatingElement$1(element);\n\n    error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n    setCurrentlyValidatingElement$1(null);\n  }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n  {\n    if (typeof node !== 'object') {\n      return;\n    }\n\n    if (isArray(node)) {\n      for (var i = 0; i < node.length; i++) {\n        var child = node[i];\n\n        if (isValidElement(child)) {\n          validateExplicitKey(child, parentType);\n        }\n      }\n    } else if (isValidElement(node)) {\n      // This element was passed in a valid location.\n      if (node._store) {\n        node._store.validated = true;\n      }\n    } else if (node) {\n      var iteratorFn = getIteratorFn(node);\n\n      if (typeof iteratorFn === 'function') {\n        // Entry iterators used to provide implicit keys,\n        // but now we print a separate warning for them later.\n        if (iteratorFn !== node.entries) {\n          var iterator = iteratorFn.call(node);\n          var step;\n\n          while (!(step = iterator.next()).done) {\n            if (isValidElement(step.value)) {\n              validateExplicitKey(step.value, parentType);\n            }\n          }\n        }\n      }\n    }\n  }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n  {\n    var type = element.type;\n\n    if (type === null || type === undefined || typeof type === 'string') {\n      return;\n    }\n\n    var propTypes;\n\n    if (typeof type === 'function') {\n      propTypes = type.propTypes;\n    } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n    // Inner props are checked in the reconciler.\n    type.$$typeof === REACT_MEMO_TYPE)) {\n      propTypes = type.propTypes;\n    } else {\n      return;\n    }\n\n    if (propTypes) {\n      // Intentionally inside to avoid triggering lazy initializers:\n      var name = getComponentNameFromType(type);\n      checkPropTypes(propTypes, element.props, 'prop', name, element);\n    } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n      propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n      var _name = getComponentNameFromType(type);\n\n      error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n    }\n\n    if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n      error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n    }\n  }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n  {\n    var keys = Object.keys(fragment.props);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n\n      if (key !== 'children' && key !== 'key') {\n        setCurrentlyValidatingElement$1(fragment);\n\n        error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n        setCurrentlyValidatingElement$1(null);\n        break;\n      }\n    }\n\n    if (fragment.ref !== null) {\n      setCurrentlyValidatingElement$1(fragment);\n\n      error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n      setCurrentlyValidatingElement$1(null);\n    }\n  }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n  {\n    var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n    // succeed and there will likely be errors in render.\n\n    if (!validType) {\n      var info = '';\n\n      if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n        info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n      }\n\n      var sourceInfo = getSourceInfoErrorAddendum(source);\n\n      if (sourceInfo) {\n        info += sourceInfo;\n      } else {\n        info += getDeclarationErrorAddendum();\n      }\n\n      var typeString;\n\n      if (type === null) {\n        typeString = 'null';\n      } else if (isArray(type)) {\n        typeString = 'array';\n      } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n        typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n        info = ' Did you accidentally export a JSX literal instead of a component?';\n      } else {\n        typeString = typeof type;\n      }\n\n      error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n    }\n\n    var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n    // TODO: Drop this when these are no longer allowed as the type argument.\n\n    if (element == null) {\n      return element;\n    } // Skip key warning if the type isn't valid since our key validation logic\n    // doesn't expect a non-string/function type and can throw confusing errors.\n    // We don't want exception behavior to differ between dev and prod.\n    // (Rendering will throw with a helpful message and as soon as the type is\n    // fixed, the key warnings will appear.)\n\n\n    if (validType) {\n      var children = props.children;\n\n      if (children !== undefined) {\n        if (isStaticChildren) {\n          if (isArray(children)) {\n            for (var i = 0; i < children.length; i++) {\n              validateChildKeys(children[i], type);\n            }\n\n            if (Object.freeze) {\n              Object.freeze(children);\n            }\n          } else {\n            error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n          }\n        } else {\n          validateChildKeys(children, type);\n        }\n      }\n    }\n\n    {\n      if (hasOwnProperty.call(props, 'key')) {\n        var componentName = getComponentNameFromType(type);\n        var keys = Object.keys(props).filter(function (k) {\n          return k !== 'key';\n        });\n        var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n        if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n          var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n          error('A props object containing a \"key\" prop is being spread into JSX:\\n' + '  let props = %s;\\n' + '  <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + '  let props = %s;\\n' + '  <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n          didWarnAboutKeySpread[componentName + beforeExample] = true;\n        }\n      }\n    }\n\n    if (type === REACT_FRAGMENT_TYPE) {\n      validateFragmentProps(element);\n    } else {\n      validatePropTypes(element);\n    }\n\n    return element;\n  }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n  {\n    return jsxWithValidation(type, props, key, true);\n  }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n  {\n    return jsxWithValidation(type, props, key, false);\n  }\n}\n\nvar jsx =  jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs =  jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n  })();\n}\n","/**\n * @license React\n * react.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n\n          'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n    'function'\n) {\n  __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n          var ReactVersion = '18.3.1';\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\n/**\n * Keeps track of the current dispatcher.\n */\nvar ReactCurrentDispatcher = {\n  /**\n   * @internal\n   * @type {ReactComponent}\n   */\n  current: null\n};\n\n/**\n * Keeps track of the current batch's configuration such as how long an update\n * should suspend for if it needs to.\n */\nvar ReactCurrentBatchConfig = {\n  transition: null\n};\n\nvar ReactCurrentActQueue = {\n  current: null,\n  // Used to reproduce behavior of `batchedUpdates` in legacy mode.\n  isBatchingLegacy: false,\n  didScheduleLegacyUpdate: false\n};\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n  /**\n   * @internal\n   * @type {ReactComponent}\n   */\n  current: null\n};\n\nvar ReactDebugCurrentFrame = {};\nvar currentExtraStackFrame = null;\nfunction setExtraStackFrame(stack) {\n  {\n    currentExtraStackFrame = stack;\n  }\n}\n\n{\n  ReactDebugCurrentFrame.setExtraStackFrame = function (stack) {\n    {\n      currentExtraStackFrame = stack;\n    }\n  }; // Stack implementation injected by the current renderer.\n\n\n  ReactDebugCurrentFrame.getCurrentStack = null;\n\n  ReactDebugCurrentFrame.getStackAddendum = function () {\n    var stack = ''; // Add an extra top frame while an element is being validated\n\n    if (currentExtraStackFrame) {\n      stack += currentExtraStackFrame;\n    } // Delegate to the injected renderer-specific implementation\n\n\n    var impl = ReactDebugCurrentFrame.getCurrentStack;\n\n    if (impl) {\n      stack += impl() || '';\n    }\n\n    return stack;\n  };\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar ReactSharedInternals = {\n  ReactCurrentDispatcher: ReactCurrentDispatcher,\n  ReactCurrentBatchConfig: ReactCurrentBatchConfig,\n  ReactCurrentOwner: ReactCurrentOwner\n};\n\n{\n  ReactSharedInternals.ReactDebugCurrentFrame = ReactDebugCurrentFrame;\n  ReactSharedInternals.ReactCurrentActQueue = ReactCurrentActQueue;\n}\n\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n  {\n    {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      printWarning('warn', format, args);\n    }\n  }\n}\nfunction error(format) {\n  {\n    {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      printWarning('error', format, args);\n    }\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n    var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n    if (stack !== '') {\n      format += '%s';\n      args = args.concat([stack]);\n    } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n    var argsWithFormat = args.map(function (item) {\n      return String(item);\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n  }\n}\n\nvar didWarnStateUpdateForUnmountedComponent = {};\n\nfunction warnNoop(publicInstance, callerName) {\n  {\n    var _constructor = publicInstance.constructor;\n    var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';\n    var warningKey = componentName + \".\" + callerName;\n\n    if (didWarnStateUpdateForUnmountedComponent[warningKey]) {\n      return;\n    }\n\n    error(\"Can't call %s on a component that is not yet mounted. \" + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);\n\n    didWarnStateUpdateForUnmountedComponent[warningKey] = true;\n  }\n}\n/**\n * This is the abstract API for an update queue.\n */\n\n\nvar ReactNoopUpdateQueue = {\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @param {ReactClass} publicInstance The instance we want to test.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n  isMounted: function (publicInstance) {\n    return false;\n  },\n\n  /**\n   * Forces an update. This should only be invoked when it is known with\n   * certainty that we are **not** in a DOM transaction.\n   *\n   * You may want to call this when you know that some deeper aspect of the\n   * component's state has changed but `setState` was not called.\n   *\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\n   * `componentWillUpdate` and `componentDidUpdate`.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {?function} callback Called after component is updated.\n   * @param {?string} callerName name of the calling function in the public API.\n   * @internal\n   */\n  enqueueForceUpdate: function (publicInstance, callback, callerName) {\n    warnNoop(publicInstance, 'forceUpdate');\n  },\n\n  /**\n   * Replaces all of the state. Always use this or `setState` to mutate state.\n   * You should treat `this.state` as immutable.\n   *\n   * There is no guarantee that `this.state` will be immediately updated, so\n   * accessing `this.state` after calling this method may return the old value.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} completeState Next state.\n   * @param {?function} callback Called after component is updated.\n   * @param {?string} callerName name of the calling function in the public API.\n   * @internal\n   */\n  enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {\n    warnNoop(publicInstance, 'replaceState');\n  },\n\n  /**\n   * Sets a subset of the state. This only exists because _pendingState is\n   * internal. This provides a merging strategy that is not available to deep\n   * properties which is confusing. TODO: Expose pendingState or don't use it\n   * during the merge.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} partialState Next partial state to be merged with state.\n   * @param {?function} callback Called after component is updated.\n   * @param {?string} Name of the calling function in the public API.\n   * @internal\n   */\n  enqueueSetState: function (publicInstance, partialState, callback, callerName) {\n    warnNoop(publicInstance, 'setState');\n  }\n};\n\nvar assign = Object.assign;\n\nvar emptyObject = {};\n\n{\n  Object.freeze(emptyObject);\n}\n/**\n * Base class helpers for the updating state of a component.\n */\n\n\nfunction Component(props, context, updater) {\n  this.props = props;\n  this.context = context; // If a component has string refs, we will assign a different object later.\n\n  this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the\n  // renderer.\n\n  this.updater = updater || ReactNoopUpdateQueue;\n}\n\nComponent.prototype.isReactComponent = {};\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together.  You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n *        produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\n\nComponent.prototype.setState = function (partialState, callback) {\n  if (typeof partialState !== 'object' && typeof partialState !== 'function' && partialState != null) {\n    throw new Error('setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.');\n  }\n\n  this.updater.enqueueSetState(this, partialState, callback, 'setState');\n};\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\n\n\nComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');\n};\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\n\n\n{\n  var deprecatedAPIs = {\n    isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n    replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n  };\n\n  var defineDeprecationWarning = function (methodName, info) {\n    Object.defineProperty(Component.prototype, methodName, {\n      get: function () {\n        warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);\n\n        return undefined;\n      }\n    });\n  };\n\n  for (var fnName in deprecatedAPIs) {\n    if (deprecatedAPIs.hasOwnProperty(fnName)) {\n      defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n    }\n  }\n}\n\nfunction ComponentDummy() {}\n\nComponentDummy.prototype = Component.prototype;\n/**\n * Convenience component with default shallow equality check for sCU.\n */\n\nfunction PureComponent(props, context, updater) {\n  this.props = props;\n  this.context = context; // If a component has string refs, we will assign a different object later.\n\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\n\nvar pureComponentPrototype = PureComponent.prototype = new ComponentDummy();\npureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.\n\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = true;\n\n// an immutable object with a single mutable value\nfunction createRef() {\n  var refObject = {\n    current: null\n  };\n\n  {\n    Object.seal(refObject);\n  }\n\n  return refObject;\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n  return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n  {\n    // toStringTag is needed for namespaced types like Temporal.Instant\n    var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n    var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n    return type;\n  }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n  {\n    try {\n      testStringCoercion(value);\n      return false;\n    } catch (e) {\n      return true;\n    }\n  }\n}\n\nfunction testStringCoercion(value) {\n  // If you ended up here by following an exception call stack, here's what's\n  // happened: you supplied an object or symbol value to React (as a prop, key,\n  // DOM attribute, CSS property, string ref, etc.) and when React tried to\n  // coerce it to a string using `'' + value`, an exception was thrown.\n  //\n  // The most common types that will cause this exception are `Symbol` instances\n  // and Temporal objects like `Temporal.Instant`. But any object that has a\n  // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n  // exception. (Library authors do this to prevent users from using built-in\n  // numeric operators like `+` or comparison operators like `>=` because custom\n  // methods are needed to perform accurate arithmetic or comparison.)\n  //\n  // To fix the problem, coerce this object or symbol value to a string before\n  // passing it to React. The most reliable way is usually `String(value)`.\n  //\n  // To find which value is throwing, check the browser or debugger console.\n  // Before this exception was thrown, there should be `console.error` output\n  // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n  // problem and how that type was used: key, atrribute, input value prop, etc.\n  // In most cases, this console output also shows the component and its\n  // ancestor components where the exception happened.\n  //\n  // eslint-disable-next-line react-internal/safe-string-coercion\n  return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var displayName = outerType.displayName;\n\n  if (displayName) {\n    return displayName;\n  }\n\n  var functionName = innerType.displayName || innerType.name || '';\n  return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n  return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  {\n    if (typeof type.tag === 'number') {\n      error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n    }\n  }\n\n  if (typeof type === 'function') {\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return 'Profiler';\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        var context = type;\n        return getContextName(context) + '.Consumer';\n\n      case REACT_PROVIDER_TYPE:\n        var provider = type;\n        return getContextName(provider._context) + '.Provider';\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        var outerName = type.displayName || null;\n\n        if (outerName !== null) {\n          return outerName;\n        }\n\n        return getComponentNameFromType(type.type) || 'Memo';\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            return getComponentNameFromType(init(payload));\n          } catch (x) {\n            return null;\n          }\n        }\n\n      // eslint-disable-next-line no-fallthrough\n    }\n  }\n\n  return null;\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar RESERVED_PROPS = {\n  key: true,\n  ref: true,\n  __self: true,\n  __source: true\n};\nvar specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;\n\n{\n  didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n  {\n    if (hasOwnProperty.call(config, 'ref')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n  {\n    if (hasOwnProperty.call(config, 'key')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.key !== undefined;\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n  var warnAboutAccessingKey = function () {\n    {\n      if (!specialPropKeyWarningShown) {\n        specialPropKeyWarningShown = true;\n\n        error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    }\n  };\n\n  warnAboutAccessingKey.isReactWarning = true;\n  Object.defineProperty(props, 'key', {\n    get: warnAboutAccessingKey,\n    configurable: true\n  });\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n  var warnAboutAccessingRef = function () {\n    {\n      if (!specialPropRefWarningShown) {\n        specialPropRefWarningShown = true;\n\n        error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    }\n  };\n\n  warnAboutAccessingRef.isReactWarning = true;\n  Object.defineProperty(props, 'ref', {\n    get: warnAboutAccessingRef,\n    configurable: true\n  });\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config) {\n  {\n    if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {\n      var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n      if (!didWarnAboutStringRefs[componentName]) {\n        error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, config.ref);\n\n        didWarnAboutStringRefs[componentName] = true;\n      }\n    }\n  }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n  var element = {\n    // This tag allows us to uniquely identify this as a React Element\n    $$typeof: REACT_ELEMENT_TYPE,\n    // Built-in properties that belong on the element\n    type: type,\n    key: key,\n    ref: ref,\n    props: props,\n    // Record the component responsible for creating this element.\n    _owner: owner\n  };\n\n  {\n    // The validation flag is currently mutative. We put it on\n    // an external backing store so that we can freeze the whole object.\n    // This can be replaced with a WeakMap once they are implemented in\n    // commonly used development environments.\n    element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n    // the validation flag non-enumerable (where possible, which should\n    // include every environment we run tests in), so the test framework\n    // ignores it.\n\n    Object.defineProperty(element._store, 'validated', {\n      configurable: false,\n      enumerable: false,\n      writable: true,\n      value: false\n    }); // self and source are DEV only properties.\n\n    Object.defineProperty(element, '_self', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: self\n    }); // Two elements created in two different places should be considered\n    // equal for testing purposes and therefore we hide it from enumeration.\n\n    Object.defineProperty(element, '_source', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: source\n    });\n\n    if (Object.freeze) {\n      Object.freeze(element.props);\n      Object.freeze(element);\n    }\n  }\n\n  return element;\n};\n/**\n * Create and return a new ReactElement of the given type.\n * See https://reactjs.org/docs/react-api.html#createelement\n */\n\nfunction createElement(type, config, children) {\n  var propName; // Reserved names are extracted\n\n  var props = {};\n  var key = null;\n  var ref = null;\n  var self = null;\n  var source = null;\n\n  if (config != null) {\n    if (hasValidRef(config)) {\n      ref = config.ref;\n\n      {\n        warnIfStringRefCannotBeAutoConverted(config);\n      }\n    }\n\n    if (hasValidKey(config)) {\n      {\n        checkKeyStringCoercion(config.key);\n      }\n\n      key = '' + config.key;\n    }\n\n    self = config.__self === undefined ? null : config.__self;\n    source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object\n\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    }\n  } // Children can be more than one argument, and those are transferred onto\n  // the newly allocated props object.\n\n\n  var childrenLength = arguments.length - 2;\n\n  if (childrenLength === 1) {\n    props.children = children;\n  } else if (childrenLength > 1) {\n    var childArray = Array(childrenLength);\n\n    for (var i = 0; i < childrenLength; i++) {\n      childArray[i] = arguments[i + 2];\n    }\n\n    {\n      if (Object.freeze) {\n        Object.freeze(childArray);\n      }\n    }\n\n    props.children = childArray;\n  } // Resolve default props\n\n\n  if (type && type.defaultProps) {\n    var defaultProps = type.defaultProps;\n\n    for (propName in defaultProps) {\n      if (props[propName] === undefined) {\n        props[propName] = defaultProps[propName];\n      }\n    }\n  }\n\n  {\n    if (key || ref) {\n      var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n      if (key) {\n        defineKeyPropWarningGetter(props, displayName);\n      }\n\n      if (ref) {\n        defineRefPropWarningGetter(props, displayName);\n      }\n    }\n  }\n\n  return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n  return newElement;\n}\n/**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://reactjs.org/docs/react-api.html#cloneelement\n */\n\nfunction cloneElement(element, config, children) {\n  if (element === null || element === undefined) {\n    throw new Error(\"React.cloneElement(...): The argument must be a React element, but you passed \" + element + \".\");\n  }\n\n  var propName; // Original props are copied\n\n  var props = assign({}, element.props); // Reserved names are extracted\n\n  var key = element.key;\n  var ref = element.ref; // Self is preserved since the owner is preserved.\n\n  var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a\n  // transpiler, and the original source is probably a better indicator of the\n  // true owner.\n\n  var source = element._source; // Owner will be preserved, unless ref is overridden\n\n  var owner = element._owner;\n\n  if (config != null) {\n    if (hasValidRef(config)) {\n      // Silently steal the ref from the parent.\n      ref = config.ref;\n      owner = ReactCurrentOwner.current;\n    }\n\n    if (hasValidKey(config)) {\n      {\n        checkKeyStringCoercion(config.key);\n      }\n\n      key = '' + config.key;\n    } // Remaining properties override existing props\n\n\n    var defaultProps;\n\n    if (element.type && element.type.defaultProps) {\n      defaultProps = element.type.defaultProps;\n    }\n\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        if (config[propName] === undefined && defaultProps !== undefined) {\n          // Resolve default props\n          props[propName] = defaultProps[propName];\n        } else {\n          props[propName] = config[propName];\n        }\n      }\n    }\n  } // Children can be more than one argument, and those are transferred onto\n  // the newly allocated props object.\n\n\n  var childrenLength = arguments.length - 2;\n\n  if (childrenLength === 1) {\n    props.children = children;\n  } else if (childrenLength > 1) {\n    var childArray = Array(childrenLength);\n\n    for (var i = 0; i < childrenLength; i++) {\n      childArray[i] = arguments[i + 2];\n    }\n\n    props.children = childArray;\n  }\n\n  return ReactElement(element.type, key, ref, self, source, owner, props);\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\nfunction isValidElement(object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\n\nfunction escape(key) {\n  var escapeRegex = /[=:]/g;\n  var escaperLookup = {\n    '=': '=0',\n    ':': '=2'\n  };\n  var escapedString = key.replace(escapeRegex, function (match) {\n    return escaperLookup[match];\n  });\n  return '$' + escapedString;\n}\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\n\nvar didWarnAboutMaps = false;\nvar userProvidedKeyEscapeRegex = /\\/+/g;\n\nfunction escapeUserProvidedKey(text) {\n  return text.replace(userProvidedKeyEscapeRegex, '$&/');\n}\n/**\n * Generate a key string that identifies a element within a set.\n *\n * @param {*} element A element that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\n\n\nfunction getElementKey(element, index) {\n  // Do some typechecking here since we call this blindly. We want to ensure\n  // that we don't block potential future ES APIs.\n  if (typeof element === 'object' && element !== null && element.key != null) {\n    // Explicit key\n    {\n      checkKeyStringCoercion(element.key);\n    }\n\n    return escape('' + element.key);\n  } // Implicit key determined by the index in the set\n\n\n  return index.toString(36);\n}\n\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n  var type = typeof children;\n\n  if (type === 'undefined' || type === 'boolean') {\n    // All of the above are perceived as null.\n    children = null;\n  }\n\n  var invokeCallback = false;\n\n  if (children === null) {\n    invokeCallback = true;\n  } else {\n    switch (type) {\n      case 'string':\n      case 'number':\n        invokeCallback = true;\n        break;\n\n      case 'object':\n        switch (children.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            invokeCallback = true;\n        }\n\n    }\n  }\n\n  if (invokeCallback) {\n    var _child = children;\n    var mappedChild = callback(_child); // If it's the only child, treat the name as if it was wrapped in an array\n    // so that it's consistent if the number of children grows:\n\n    var childKey = nameSoFar === '' ? SEPARATOR + getElementKey(_child, 0) : nameSoFar;\n\n    if (isArray(mappedChild)) {\n      var escapedChildKey = '';\n\n      if (childKey != null) {\n        escapedChildKey = escapeUserProvidedKey(childKey) + '/';\n      }\n\n      mapIntoArray(mappedChild, array, escapedChildKey, '', function (c) {\n        return c;\n      });\n    } else if (mappedChild != null) {\n      if (isValidElement(mappedChild)) {\n        {\n          // The `if` statement here prevents auto-disabling of the safe\n          // coercion ESLint rule, so we must manually disable it below.\n          // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key\n          if (mappedChild.key && (!_child || _child.key !== mappedChild.key)) {\n            checkKeyStringCoercion(mappedChild.key);\n          }\n        }\n\n        mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as\n        // traverseAllChildren used to do for objects as children\n        escapedPrefix + ( // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key\n        mappedChild.key && (!_child || _child.key !== mappedChild.key) ? // $FlowFixMe Flow incorrectly thinks existing element's key can be a number\n        // eslint-disable-next-line react-internal/safe-string-coercion\n        escapeUserProvidedKey('' + mappedChild.key) + '/' : '') + childKey);\n      }\n\n      array.push(mappedChild);\n    }\n\n    return 1;\n  }\n\n  var child;\n  var nextName;\n  var subtreeCount = 0; // Count of children found in the current subtree.\n\n  var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n  if (isArray(children)) {\n    for (var i = 0; i < children.length; i++) {\n      child = children[i];\n      nextName = nextNamePrefix + getElementKey(child, i);\n      subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);\n    }\n  } else {\n    var iteratorFn = getIteratorFn(children);\n\n    if (typeof iteratorFn === 'function') {\n      var iterableChildren = children;\n\n      {\n        // Warn about using Maps as children\n        if (iteratorFn === iterableChildren.entries) {\n          if (!didWarnAboutMaps) {\n            warn('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');\n          }\n\n          didWarnAboutMaps = true;\n        }\n      }\n\n      var iterator = iteratorFn.call(iterableChildren);\n      var step;\n      var ii = 0;\n\n      while (!(step = iterator.next()).done) {\n        child = step.value;\n        nextName = nextNamePrefix + getElementKey(child, ii++);\n        subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);\n      }\n    } else if (type === 'object') {\n      // eslint-disable-next-line react-internal/safe-string-coercion\n      var childrenString = String(children);\n      throw new Error(\"Objects are not valid as a React child (found: \" + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + \"). \" + 'If you meant to render a collection of children, use an array ' + 'instead.');\n    }\n  }\n\n  return subtreeCount;\n}\n\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenmap\n *\n * The provided mapFunction(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\nfunction mapChildren(children, func, context) {\n  if (children == null) {\n    return children;\n  }\n\n  var result = [];\n  var count = 0;\n  mapIntoArray(children, result, '', '', function (child) {\n    return func.call(context, child, count++);\n  });\n  return result;\n}\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrencount\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\n\n\nfunction countChildren(children) {\n  var n = 0;\n  mapChildren(children, function () {\n    n++; // Don't return anything\n  });\n  return n;\n}\n\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenforeach\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n  mapChildren(children, function () {\n    forEachFunc.apply(this, arguments); // Don't return anything.\n  }, forEachContext);\n}\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrentoarray\n */\n\n\nfunction toArray(children) {\n  return mapChildren(children, function (child) {\n    return child;\n  }) || [];\n}\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenonly\n *\n * The current implementation of this function assumes that a single child gets\n * passed without a wrapper, but the purpose of this helper function is to\n * abstract away the particular structure of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\n\n\nfunction onlyChild(children) {\n  if (!isValidElement(children)) {\n    throw new Error('React.Children.only expected to receive a single React element child.');\n  }\n\n  return children;\n}\n\nfunction createContext(defaultValue) {\n  // TODO: Second argument used to be an optional `calculateChangedBits`\n  // function. Warn to reserve for future use?\n  var context = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    // As a workaround to support multiple concurrent renderers, we categorize\n    // some renderers as primary and others as secondary. We only expect\n    // there to be two concurrent renderers at most: React Native (primary) and\n    // Fabric (secondary); React DOM (primary) and React ART (secondary).\n    // Secondary renderers store their context values on separate fields.\n    _currentValue: defaultValue,\n    _currentValue2: defaultValue,\n    // Used to track how many concurrent renderers this context currently\n    // supports within in a single renderer. Such as parallel server rendering.\n    _threadCount: 0,\n    // These are circular\n    Provider: null,\n    Consumer: null,\n    // Add these to use same hidden class in VM as ServerContext\n    _defaultValue: null,\n    _globalName: null\n  };\n  context.Provider = {\n    $$typeof: REACT_PROVIDER_TYPE,\n    _context: context\n  };\n  var hasWarnedAboutUsingNestedContextConsumers = false;\n  var hasWarnedAboutUsingConsumerProvider = false;\n  var hasWarnedAboutDisplayNameOnConsumer = false;\n\n  {\n    // A separate object, but proxies back to the original context object for\n    // backwards compatibility. It has a different $$typeof, so we can properly\n    // warn for the incorrect usage of Context as a Consumer.\n    var Consumer = {\n      $$typeof: REACT_CONTEXT_TYPE,\n      _context: context\n    }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here\n\n    Object.defineProperties(Consumer, {\n      Provider: {\n        get: function () {\n          if (!hasWarnedAboutUsingConsumerProvider) {\n            hasWarnedAboutUsingConsumerProvider = true;\n\n            error('Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');\n          }\n\n          return context.Provider;\n        },\n        set: function (_Provider) {\n          context.Provider = _Provider;\n        }\n      },\n      _currentValue: {\n        get: function () {\n          return context._currentValue;\n        },\n        set: function (_currentValue) {\n          context._currentValue = _currentValue;\n        }\n      },\n      _currentValue2: {\n        get: function () {\n          return context._currentValue2;\n        },\n        set: function (_currentValue2) {\n          context._currentValue2 = _currentValue2;\n        }\n      },\n      _threadCount: {\n        get: function () {\n          return context._threadCount;\n        },\n        set: function (_threadCount) {\n          context._threadCount = _threadCount;\n        }\n      },\n      Consumer: {\n        get: function () {\n          if (!hasWarnedAboutUsingNestedContextConsumers) {\n            hasWarnedAboutUsingNestedContextConsumers = true;\n\n            error('Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n          }\n\n          return context.Consumer;\n        }\n      },\n      displayName: {\n        get: function () {\n          return context.displayName;\n        },\n        set: function (displayName) {\n          if (!hasWarnedAboutDisplayNameOnConsumer) {\n            warn('Setting `displayName` on Context.Consumer has no effect. ' + \"You should set it directly on the context with Context.displayName = '%s'.\", displayName);\n\n            hasWarnedAboutDisplayNameOnConsumer = true;\n          }\n        }\n      }\n    }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty\n\n    context.Consumer = Consumer;\n  }\n\n  {\n    context._currentRenderer = null;\n    context._currentRenderer2 = null;\n  }\n\n  return context;\n}\n\nvar Uninitialized = -1;\nvar Pending = 0;\nvar Resolved = 1;\nvar Rejected = 2;\n\nfunction lazyInitializer(payload) {\n  if (payload._status === Uninitialized) {\n    var ctor = payload._result;\n    var thenable = ctor(); // Transition to the next state.\n    // This might throw either because it's missing or throws. If so, we treat it\n    // as still uninitialized and try again next time. Which is the same as what\n    // happens if the ctor or any wrappers processing the ctor throws. This might\n    // end up fixing it if the resolution was a concurrency bug.\n\n    thenable.then(function (moduleObject) {\n      if (payload._status === Pending || payload._status === Uninitialized) {\n        // Transition to the next state.\n        var resolved = payload;\n        resolved._status = Resolved;\n        resolved._result = moduleObject;\n      }\n    }, function (error) {\n      if (payload._status === Pending || payload._status === Uninitialized) {\n        // Transition to the next state.\n        var rejected = payload;\n        rejected._status = Rejected;\n        rejected._result = error;\n      }\n    });\n\n    if (payload._status === Uninitialized) {\n      // In case, we're still uninitialized, then we're waiting for the thenable\n      // to resolve. Set it as pending in the meantime.\n      var pending = payload;\n      pending._status = Pending;\n      pending._result = thenable;\n    }\n  }\n\n  if (payload._status === Resolved) {\n    var moduleObject = payload._result;\n\n    {\n      if (moduleObject === undefined) {\n        error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\\n\\nYour code should look like: \\n  ' + // Break up imports to avoid accidentally parsing them as dependencies.\n        'const MyComponent = lazy(() => imp' + \"ort('./MyComponent'))\\n\\n\" + 'Did you accidentally put curly braces around the import?', moduleObject);\n      }\n    }\n\n    {\n      if (!('default' in moduleObject)) {\n        error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\\n\\nYour code should look like: \\n  ' + // Break up imports to avoid accidentally parsing them as dependencies.\n        'const MyComponent = lazy(() => imp' + \"ort('./MyComponent'))\", moduleObject);\n      }\n    }\n\n    return moduleObject.default;\n  } else {\n    throw payload._result;\n  }\n}\n\nfunction lazy(ctor) {\n  var payload = {\n    // We use these fields to store the result.\n    _status: Uninitialized,\n    _result: ctor\n  };\n  var lazyType = {\n    $$typeof: REACT_LAZY_TYPE,\n    _payload: payload,\n    _init: lazyInitializer\n  };\n\n  {\n    // In production, this would just set it on the object.\n    var defaultProps;\n    var propTypes; // $FlowFixMe\n\n    Object.defineProperties(lazyType, {\n      defaultProps: {\n        configurable: true,\n        get: function () {\n          return defaultProps;\n        },\n        set: function (newDefaultProps) {\n          error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n\n          defaultProps = newDefaultProps; // Match production behavior more closely:\n          // $FlowFixMe\n\n          Object.defineProperty(lazyType, 'defaultProps', {\n            enumerable: true\n          });\n        }\n      },\n      propTypes: {\n        configurable: true,\n        get: function () {\n          return propTypes;\n        },\n        set: function (newPropTypes) {\n          error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n\n          propTypes = newPropTypes; // Match production behavior more closely:\n          // $FlowFixMe\n\n          Object.defineProperty(lazyType, 'propTypes', {\n            enumerable: true\n          });\n        }\n      }\n    });\n  }\n\n  return lazyType;\n}\n\nfunction forwardRef(render) {\n  {\n    if (render != null && render.$$typeof === REACT_MEMO_TYPE) {\n      error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');\n    } else if (typeof render !== 'function') {\n      error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);\n    } else {\n      if (render.length !== 0 && render.length !== 2) {\n        error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.');\n      }\n    }\n\n    if (render != null) {\n      if (render.defaultProps != null || render.propTypes != null) {\n        error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');\n      }\n    }\n  }\n\n  var elementType = {\n    $$typeof: REACT_FORWARD_REF_TYPE,\n    render: render\n  };\n\n  {\n    var ownName;\n    Object.defineProperty(elementType, 'displayName', {\n      enumerable: false,\n      configurable: true,\n      get: function () {\n        return ownName;\n      },\n      set: function (name) {\n        ownName = name; // The inner component shouldn't inherit this display name in most cases,\n        // because the component may be used elsewhere.\n        // But it's nice for anonymous functions to inherit the name,\n        // so that our component-stack generation logic will display their frames.\n        // An anonymous function generally suggests a pattern like:\n        //   React.forwardRef((props, ref) => {...});\n        // This kind of inner function is not used elsewhere so the side effect is okay.\n\n        if (!render.name && !render.displayName) {\n          render.displayName = name;\n        }\n      }\n    });\n  }\n\n  return elementType;\n}\n\nvar REACT_MODULE_REFERENCE;\n\n{\n  REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n  if (typeof type === 'string' || typeof type === 'function') {\n    return true;\n  } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n  if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing  || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden  || type === REACT_OFFSCREEN_TYPE || enableScopeAPI  || enableCacheElement  || enableTransitionTracing ) {\n    return true;\n  }\n\n  if (typeof type === 'object' && type !== null) {\n    if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n    // types supported by any Flight configuration anywhere since\n    // we don't know which Flight build this will end up being used\n    // with.\n    type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction memo(type, compare) {\n  {\n    if (!isValidElementType(type)) {\n      error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);\n    }\n  }\n\n  var elementType = {\n    $$typeof: REACT_MEMO_TYPE,\n    type: type,\n    compare: compare === undefined ? null : compare\n  };\n\n  {\n    var ownName;\n    Object.defineProperty(elementType, 'displayName', {\n      enumerable: false,\n      configurable: true,\n      get: function () {\n        return ownName;\n      },\n      set: function (name) {\n        ownName = name; // The inner component shouldn't inherit this display name in most cases,\n        // because the component may be used elsewhere.\n        // But it's nice for anonymous functions to inherit the name,\n        // so that our component-stack generation logic will display their frames.\n        // An anonymous function generally suggests a pattern like:\n        //   React.memo((props) => {...});\n        // This kind of inner function is not used elsewhere so the side effect is okay.\n\n        if (!type.name && !type.displayName) {\n          type.displayName = name;\n        }\n      }\n    });\n  }\n\n  return elementType;\n}\n\nfunction resolveDispatcher() {\n  var dispatcher = ReactCurrentDispatcher.current;\n\n  {\n    if (dispatcher === null) {\n      error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\\n' + '2. You might be breaking the Rules of Hooks\\n' + '3. You might have more than one copy of React in the same app\\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.');\n    }\n  } // Will result in a null access error if accessed outside render phase. We\n  // intentionally don't throw our own error because this is in a hot path.\n  // Also helps ensure this is inlined.\n\n\n  return dispatcher;\n}\nfunction useContext(Context) {\n  var dispatcher = resolveDispatcher();\n\n  {\n    // TODO: add a more generic warning for invalid values.\n    if (Context._context !== undefined) {\n      var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs\n      // and nobody should be using this in existing code.\n\n      if (realContext.Consumer === Context) {\n        error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');\n      } else if (realContext.Provider === Context) {\n        error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');\n      }\n    }\n  }\n\n  return dispatcher.useContext(Context);\n}\nfunction useState(initialState) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useState(initialState);\n}\nfunction useReducer(reducer, initialArg, init) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useReducer(reducer, initialArg, init);\n}\nfunction useRef(initialValue) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useRef(initialValue);\n}\nfunction useEffect(create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useEffect(create, deps);\n}\nfunction useInsertionEffect(create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useInsertionEffect(create, deps);\n}\nfunction useLayoutEffect(create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useLayoutEffect(create, deps);\n}\nfunction useCallback(callback, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useCallback(callback, deps);\n}\nfunction useMemo(create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useMemo(create, deps);\n}\nfunction useImperativeHandle(ref, create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useImperativeHandle(ref, create, deps);\n}\nfunction useDebugValue(value, formatterFn) {\n  {\n    var dispatcher = resolveDispatcher();\n    return dispatcher.useDebugValue(value, formatterFn);\n  }\n}\nfunction useTransition() {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useTransition();\n}\nfunction useDeferredValue(value) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useDeferredValue(value);\n}\nfunction useId() {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useId();\n}\nfunction useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n  {\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      prevLog = console.log;\n      prevInfo = console.info;\n      prevWarn = console.warn;\n      prevError = console.error;\n      prevGroup = console.group;\n      prevGroupCollapsed = console.groupCollapsed;\n      prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n      var props = {\n        configurable: true,\n        enumerable: true,\n        value: disabledLog,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        info: props,\n        log: props,\n        warn: props,\n        error: props,\n        group: props,\n        groupCollapsed: props,\n        groupEnd: props\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    disabledDepth++;\n  }\n}\nfunction reenableLogs() {\n  {\n    disabledDepth--;\n\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      var props = {\n        configurable: true,\n        enumerable: true,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        log: assign({}, props, {\n          value: prevLog\n        }),\n        info: assign({}, props, {\n          value: prevInfo\n        }),\n        warn: assign({}, props, {\n          value: prevWarn\n        }),\n        error: assign({}, props, {\n          value: prevError\n        }),\n        group: assign({}, props, {\n          value: prevGroup\n        }),\n        groupCollapsed: assign({}, props, {\n          value: prevGroupCollapsed\n        }),\n        groupEnd: assign({}, props, {\n          value: prevGroupEnd\n        })\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    if (disabledDepth < 0) {\n      error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n    }\n  }\n}\n\nvar ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n  {\n    if (prefix === undefined) {\n      // Extract the VM specific prefix used by each line.\n      try {\n        throw Error();\n      } catch (x) {\n        var match = x.stack.trim().match(/\\n( *(at )?)/);\n        prefix = match && match[1] || '';\n      }\n    } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n    return '\\n' + prefix + name;\n  }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n  var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n  componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n  // If something asked for a stack inside a fake render, it should get ignored.\n  if ( !fn || reentry) {\n    return '';\n  }\n\n  {\n    var frame = componentFrameCache.get(fn);\n\n    if (frame !== undefined) {\n      return frame;\n    }\n  }\n\n  var control;\n  reentry = true;\n  var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n  Error.prepareStackTrace = undefined;\n  var previousDispatcher;\n\n  {\n    previousDispatcher = ReactCurrentDispatcher$1.current; // Set the dispatcher in DEV because this might be call in the render function\n    // for warnings.\n\n    ReactCurrentDispatcher$1.current = null;\n    disableLogs();\n  }\n\n  try {\n    // This should throw.\n    if (construct) {\n      // Something should be setting the props in the constructor.\n      var Fake = function () {\n        throw Error();\n      }; // $FlowFixMe\n\n\n      Object.defineProperty(Fake.prototype, 'props', {\n        set: function () {\n          // We use a throwing setter instead of frozen or non-writable props\n          // because that won't throw in a non-strict mode function.\n          throw Error();\n        }\n      });\n\n      if (typeof Reflect === 'object' && Reflect.construct) {\n        // We construct a different control for this case to include any extra\n        // frames added by the construct call.\n        try {\n          Reflect.construct(Fake, []);\n        } catch (x) {\n          control = x;\n        }\n\n        Reflect.construct(fn, [], Fake);\n      } else {\n        try {\n          Fake.call();\n        } catch (x) {\n          control = x;\n        }\n\n        fn.call(Fake.prototype);\n      }\n    } else {\n      try {\n        throw Error();\n      } catch (x) {\n        control = x;\n      }\n\n      fn();\n    }\n  } catch (sample) {\n    // This is inlined manually because closure doesn't do it for us.\n    if (sample && control && typeof sample.stack === 'string') {\n      // This extracts the first frame from the sample that isn't also in the control.\n      // Skipping one frame that we assume is the frame that calls the two.\n      var sampleLines = sample.stack.split('\\n');\n      var controlLines = control.stack.split('\\n');\n      var s = sampleLines.length - 1;\n      var c = controlLines.length - 1;\n\n      while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n        // We expect at least one stack frame to be shared.\n        // Typically this will be the root most one. However, stack frames may be\n        // cut off due to maximum stack limits. In this case, one maybe cut off\n        // earlier than the other. We assume that the sample is longer or the same\n        // and there for cut off earlier. So we should find the root most frame in\n        // the sample somewhere in the control.\n        c--;\n      }\n\n      for (; s >= 1 && c >= 0; s--, c--) {\n        // Next we find the first one that isn't the same which should be the\n        // frame that called our sample function and the control.\n        if (sampleLines[s] !== controlLines[c]) {\n          // In V8, the first line is describing the message but other VMs don't.\n          // If we're about to return the first line, and the control is also on the same\n          // line, that's a pretty good indicator that our sample threw at same line as\n          // the control. I.e. before we entered the sample frame. So we ignore this result.\n          // This can happen if you passed a class to function component, or non-function.\n          if (s !== 1 || c !== 1) {\n            do {\n              s--;\n              c--; // We may still have similar intermediate frames from the construct call.\n              // The next one that isn't the same should be our match though.\n\n              if (c < 0 || sampleLines[s] !== controlLines[c]) {\n                // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n                var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n                // but we have a user-provided \"displayName\"\n                // splice it in to make the stack more readable.\n\n\n                if (fn.displayName && _frame.includes('<anonymous>')) {\n                  _frame = _frame.replace('<anonymous>', fn.displayName);\n                }\n\n                {\n                  if (typeof fn === 'function') {\n                    componentFrameCache.set(fn, _frame);\n                  }\n                } // Return the line we found.\n\n\n                return _frame;\n              }\n            } while (s >= 1 && c >= 0);\n          }\n\n          break;\n        }\n      }\n    }\n  } finally {\n    reentry = false;\n\n    {\n      ReactCurrentDispatcher$1.current = previousDispatcher;\n      reenableLogs();\n    }\n\n    Error.prepareStackTrace = previousPrepareStackTrace;\n  } // Fallback to just using the name if we couldn't make it throw.\n\n\n  var name = fn ? fn.displayName || fn.name : '';\n  var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n  {\n    if (typeof fn === 'function') {\n      componentFrameCache.set(fn, syntheticFrame);\n    }\n  }\n\n  return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n  {\n    return describeNativeComponentFrame(fn, false);\n  }\n}\n\nfunction shouldConstruct(Component) {\n  var prototype = Component.prototype;\n  return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n  if (type == null) {\n    return '';\n  }\n\n  if (typeof type === 'function') {\n    {\n      return describeNativeComponentFrame(type, shouldConstruct(type));\n    }\n  }\n\n  if (typeof type === 'string') {\n    return describeBuiltInComponentFrame(type);\n  }\n\n  switch (type) {\n    case REACT_SUSPENSE_TYPE:\n      return describeBuiltInComponentFrame('Suspense');\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return describeBuiltInComponentFrame('SuspenseList');\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_FORWARD_REF_TYPE:\n        return describeFunctionComponentFrame(type.render);\n\n      case REACT_MEMO_TYPE:\n        // Memo may contain any component type so we recursively resolve it.\n        return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            // Lazy may contain any component type so we recursively resolve it.\n            return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n          } catch (x) {}\n        }\n    }\n  }\n\n  return '';\n}\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n    }\n  }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n  {\n    // $FlowFixMe This is okay but Flow doesn't know it.\n    var has = Function.call.bind(hasOwnProperty);\n\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            // eslint-disable-next-line react-internal/prod-error-codes\n            var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n\n          error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n        } catch (ex) {\n          error$1 = ex;\n        }\n\n        if (error$1 && !(error$1 instanceof Error)) {\n          setCurrentlyValidatingElement(element);\n\n          error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n          setCurrentlyValidatingElement(null);\n        }\n\n        if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error$1.message] = true;\n          setCurrentlyValidatingElement(element);\n\n          error('Failed %s type: %s', location, error$1.message);\n\n          setCurrentlyValidatingElement(null);\n        }\n      }\n    }\n  }\n}\n\nfunction setCurrentlyValidatingElement$1(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      setExtraStackFrame(stack);\n    } else {\n      setExtraStackFrame(null);\n    }\n  }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n  propTypesMisspellWarningShown = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n  if (ReactCurrentOwner.current) {\n    var name = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n    if (name) {\n      return '\\n\\nCheck the render method of `' + name + '`.';\n    }\n  }\n\n  return '';\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n  if (source !== undefined) {\n    var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n    var lineNumber = source.lineNumber;\n    return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n  }\n\n  return '';\n}\n\nfunction getSourceInfoErrorAddendumForProps(elementProps) {\n  if (elementProps !== null && elementProps !== undefined) {\n    return getSourceInfoErrorAddendum(elementProps.__source);\n  }\n\n  return '';\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n  var info = getDeclarationErrorAddendum();\n\n  if (!info) {\n    var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n    if (parentName) {\n      info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n    }\n  }\n\n  return info;\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n  if (!element._store || element._store.validated || element.key != null) {\n    return;\n  }\n\n  element._store.validated = true;\n  var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n  if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n    return;\n  }\n\n  ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n  // property, it may be the creator of the child that's responsible for\n  // assigning it a key.\n\n  var childOwner = '';\n\n  if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n    // Give the component that originally created this child.\n    childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n  }\n\n  {\n    setCurrentlyValidatingElement$1(element);\n\n    error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n    setCurrentlyValidatingElement$1(null);\n  }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n  if (typeof node !== 'object') {\n    return;\n  }\n\n  if (isArray(node)) {\n    for (var i = 0; i < node.length; i++) {\n      var child = node[i];\n\n      if (isValidElement(child)) {\n        validateExplicitKey(child, parentType);\n      }\n    }\n  } else if (isValidElement(node)) {\n    // This element was passed in a valid location.\n    if (node._store) {\n      node._store.validated = true;\n    }\n  } else if (node) {\n    var iteratorFn = getIteratorFn(node);\n\n    if (typeof iteratorFn === 'function') {\n      // Entry iterators used to provide implicit keys,\n      // but now we print a separate warning for them later.\n      if (iteratorFn !== node.entries) {\n        var iterator = iteratorFn.call(node);\n        var step;\n\n        while (!(step = iterator.next()).done) {\n          if (isValidElement(step.value)) {\n            validateExplicitKey(step.value, parentType);\n          }\n        }\n      }\n    }\n  }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n  {\n    var type = element.type;\n\n    if (type === null || type === undefined || typeof type === 'string') {\n      return;\n    }\n\n    var propTypes;\n\n    if (typeof type === 'function') {\n      propTypes = type.propTypes;\n    } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n    // Inner props are checked in the reconciler.\n    type.$$typeof === REACT_MEMO_TYPE)) {\n      propTypes = type.propTypes;\n    } else {\n      return;\n    }\n\n    if (propTypes) {\n      // Intentionally inside to avoid triggering lazy initializers:\n      var name = getComponentNameFromType(type);\n      checkPropTypes(propTypes, element.props, 'prop', name, element);\n    } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n      propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n      var _name = getComponentNameFromType(type);\n\n      error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n    }\n\n    if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n      error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n    }\n  }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n  {\n    var keys = Object.keys(fragment.props);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n\n      if (key !== 'children' && key !== 'key') {\n        setCurrentlyValidatingElement$1(fragment);\n\n        error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n        setCurrentlyValidatingElement$1(null);\n        break;\n      }\n    }\n\n    if (fragment.ref !== null) {\n      setCurrentlyValidatingElement$1(fragment);\n\n      error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n      setCurrentlyValidatingElement$1(null);\n    }\n  }\n}\nfunction createElementWithValidation(type, props, children) {\n  var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n  // succeed and there will likely be errors in render.\n\n  if (!validType) {\n    var info = '';\n\n    if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n      info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n    }\n\n    var sourceInfo = getSourceInfoErrorAddendumForProps(props);\n\n    if (sourceInfo) {\n      info += sourceInfo;\n    } else {\n      info += getDeclarationErrorAddendum();\n    }\n\n    var typeString;\n\n    if (type === null) {\n      typeString = 'null';\n    } else if (isArray(type)) {\n      typeString = 'array';\n    } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n      typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n      info = ' Did you accidentally export a JSX literal instead of a component?';\n    } else {\n      typeString = typeof type;\n    }\n\n    {\n      error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n    }\n  }\n\n  var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.\n  // TODO: Drop this when these are no longer allowed as the type argument.\n\n  if (element == null) {\n    return element;\n  } // Skip key warning if the type isn't valid since our key validation logic\n  // doesn't expect a non-string/function type and can throw confusing errors.\n  // We don't want exception behavior to differ between dev and prod.\n  // (Rendering will throw with a helpful message and as soon as the type is\n  // fixed, the key warnings will appear.)\n\n\n  if (validType) {\n    for (var i = 2; i < arguments.length; i++) {\n      validateChildKeys(arguments[i], type);\n    }\n  }\n\n  if (type === REACT_FRAGMENT_TYPE) {\n    validateFragmentProps(element);\n  } else {\n    validatePropTypes(element);\n  }\n\n  return element;\n}\nvar didWarnAboutDeprecatedCreateFactory = false;\nfunction createFactoryWithValidation(type) {\n  var validatedFactory = createElementWithValidation.bind(null, type);\n  validatedFactory.type = type;\n\n  {\n    if (!didWarnAboutDeprecatedCreateFactory) {\n      didWarnAboutDeprecatedCreateFactory = true;\n\n      warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');\n    } // Legacy hook: remove it\n\n\n    Object.defineProperty(validatedFactory, 'type', {\n      enumerable: false,\n      get: function () {\n        warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');\n\n        Object.defineProperty(this, 'type', {\n          value: type\n        });\n        return type;\n      }\n    });\n  }\n\n  return validatedFactory;\n}\nfunction cloneElementWithValidation(element, props, children) {\n  var newElement = cloneElement.apply(this, arguments);\n\n  for (var i = 2; i < arguments.length; i++) {\n    validateChildKeys(arguments[i], newElement.type);\n  }\n\n  validatePropTypes(newElement);\n  return newElement;\n}\n\nfunction startTransition(scope, options) {\n  var prevTransition = ReactCurrentBatchConfig.transition;\n  ReactCurrentBatchConfig.transition = {};\n  var currentTransition = ReactCurrentBatchConfig.transition;\n\n  {\n    ReactCurrentBatchConfig.transition._updatedFibers = new Set();\n  }\n\n  try {\n    scope();\n  } finally {\n    ReactCurrentBatchConfig.transition = prevTransition;\n\n    {\n      if (prevTransition === null && currentTransition._updatedFibers) {\n        var updatedFibersCount = currentTransition._updatedFibers.size;\n\n        if (updatedFibersCount > 10) {\n          warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.');\n        }\n\n        currentTransition._updatedFibers.clear();\n      }\n    }\n  }\n}\n\nvar didWarnAboutMessageChannel = false;\nvar enqueueTaskImpl = null;\nfunction enqueueTask(task) {\n  if (enqueueTaskImpl === null) {\n    try {\n      // read require off the module object to get around the bundlers.\n      // we don't want them to detect a require and bundle a Node polyfill.\n      var requireString = ('require' + Math.random()).slice(0, 7);\n      var nodeRequire = module && module[requireString]; // assuming we're in node, let's try to get node's\n      // version of setImmediate, bypassing fake timers if any.\n\n      enqueueTaskImpl = nodeRequire.call(module, 'timers').setImmediate;\n    } catch (_err) {\n      // we're in a browser\n      // we can't use regular timers because they may still be faked\n      // so we try MessageChannel+postMessage instead\n      enqueueTaskImpl = function (callback) {\n        {\n          if (didWarnAboutMessageChannel === false) {\n            didWarnAboutMessageChannel = true;\n\n            if (typeof MessageChannel === 'undefined') {\n              error('This browser does not have a MessageChannel implementation, ' + 'so enqueuing tasks via await act(async () => ...) will fail. ' + 'Please file an issue at https://github.com/facebook/react/issues ' + 'if you encounter this warning.');\n            }\n          }\n        }\n\n        var channel = new MessageChannel();\n        channel.port1.onmessage = callback;\n        channel.port2.postMessage(undefined);\n      };\n    }\n  }\n\n  return enqueueTaskImpl(task);\n}\n\nvar actScopeDepth = 0;\nvar didWarnNoAwaitAct = false;\nfunction act(callback) {\n  {\n    // `act` calls can be nested, so we track the depth. This represents the\n    // number of `act` scopes on the stack.\n    var prevActScopeDepth = actScopeDepth;\n    actScopeDepth++;\n\n    if (ReactCurrentActQueue.current === null) {\n      // This is the outermost `act` scope. Initialize the queue. The reconciler\n      // will detect the queue and use it instead of Scheduler.\n      ReactCurrentActQueue.current = [];\n    }\n\n    var prevIsBatchingLegacy = ReactCurrentActQueue.isBatchingLegacy;\n    var result;\n\n    try {\n      // Used to reproduce behavior of `batchedUpdates` in legacy mode. Only\n      // set to `true` while the given callback is executed, not for updates\n      // triggered during an async event, because this is how the legacy\n      // implementation of `act` behaved.\n      ReactCurrentActQueue.isBatchingLegacy = true;\n      result = callback(); // Replicate behavior of original `act` implementation in legacy mode,\n      // which flushed updates immediately after the scope function exits, even\n      // if it's an async function.\n\n      if (!prevIsBatchingLegacy && ReactCurrentActQueue.didScheduleLegacyUpdate) {\n        var queue = ReactCurrentActQueue.current;\n\n        if (queue !== null) {\n          ReactCurrentActQueue.didScheduleLegacyUpdate = false;\n          flushActQueue(queue);\n        }\n      }\n    } catch (error) {\n      popActScope(prevActScopeDepth);\n      throw error;\n    } finally {\n      ReactCurrentActQueue.isBatchingLegacy = prevIsBatchingLegacy;\n    }\n\n    if (result !== null && typeof result === 'object' && typeof result.then === 'function') {\n      var thenableResult = result; // The callback is an async function (i.e. returned a promise). Wait\n      // for it to resolve before exiting the current scope.\n\n      var wasAwaited = false;\n      var thenable = {\n        then: function (resolve, reject) {\n          wasAwaited = true;\n          thenableResult.then(function (returnValue) {\n            popActScope(prevActScopeDepth);\n\n            if (actScopeDepth === 0) {\n              // We've exited the outermost act scope. Recursively flush the\n              // queue until there's no remaining work.\n              recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n            } else {\n              resolve(returnValue);\n            }\n          }, function (error) {\n            // The callback threw an error.\n            popActScope(prevActScopeDepth);\n            reject(error);\n          });\n        }\n      };\n\n      {\n        if (!didWarnNoAwaitAct && typeof Promise !== 'undefined') {\n          // eslint-disable-next-line no-undef\n          Promise.resolve().then(function () {}).then(function () {\n            if (!wasAwaited) {\n              didWarnNoAwaitAct = true;\n\n              error('You called act(async () => ...) without await. ' + 'This could lead to unexpected testing behaviour, ' + 'interleaving multiple act calls and mixing their ' + 'scopes. ' + 'You should - await act(async () => ...);');\n            }\n          });\n        }\n      }\n\n      return thenable;\n    } else {\n      var returnValue = result; // The callback is not an async function. Exit the current scope\n      // immediately, without awaiting.\n\n      popActScope(prevActScopeDepth);\n\n      if (actScopeDepth === 0) {\n        // Exiting the outermost act scope. Flush the queue.\n        var _queue = ReactCurrentActQueue.current;\n\n        if (_queue !== null) {\n          flushActQueue(_queue);\n          ReactCurrentActQueue.current = null;\n        } // Return a thenable. If the user awaits it, we'll flush again in\n        // case additional work was scheduled by a microtask.\n\n\n        var _thenable = {\n          then: function (resolve, reject) {\n            // Confirm we haven't re-entered another `act` scope, in case\n            // the user does something weird like await the thenable\n            // multiple times.\n            if (ReactCurrentActQueue.current === null) {\n              // Recursively flush the queue until there's no remaining work.\n              ReactCurrentActQueue.current = [];\n              recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n            } else {\n              resolve(returnValue);\n            }\n          }\n        };\n        return _thenable;\n      } else {\n        // Since we're inside a nested `act` scope, the returned thenable\n        // immediately resolves. The outer scope will flush the queue.\n        var _thenable2 = {\n          then: function (resolve, reject) {\n            resolve(returnValue);\n          }\n        };\n        return _thenable2;\n      }\n    }\n  }\n}\n\nfunction popActScope(prevActScopeDepth) {\n  {\n    if (prevActScopeDepth !== actScopeDepth - 1) {\n      error('You seem to have overlapping act() calls, this is not supported. ' + 'Be sure to await previous act() calls before making a new one. ');\n    }\n\n    actScopeDepth = prevActScopeDepth;\n  }\n}\n\nfunction recursivelyFlushAsyncActWork(returnValue, resolve, reject) {\n  {\n    var queue = ReactCurrentActQueue.current;\n\n    if (queue !== null) {\n      try {\n        flushActQueue(queue);\n        enqueueTask(function () {\n          if (queue.length === 0) {\n            // No additional work was scheduled. Finish.\n            ReactCurrentActQueue.current = null;\n            resolve(returnValue);\n          } else {\n            // Keep flushing work until there's none left.\n            recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n          }\n        });\n      } catch (error) {\n        reject(error);\n      }\n    } else {\n      resolve(returnValue);\n    }\n  }\n}\n\nvar isFlushing = false;\n\nfunction flushActQueue(queue) {\n  {\n    if (!isFlushing) {\n      // Prevent re-entrance.\n      isFlushing = true;\n      var i = 0;\n\n      try {\n        for (; i < queue.length; i++) {\n          var callback = queue[i];\n\n          do {\n            callback = callback(true);\n          } while (callback !== null);\n        }\n\n        queue.length = 0;\n      } catch (error) {\n        // If something throws, leave the remaining callbacks on the queue.\n        queue = queue.slice(i + 1);\n        throw error;\n      } finally {\n        isFlushing = false;\n      }\n    }\n  }\n}\n\nvar createElement$1 =  createElementWithValidation ;\nvar cloneElement$1 =  cloneElementWithValidation ;\nvar createFactory =  createFactoryWithValidation ;\nvar Children = {\n  map: mapChildren,\n  forEach: forEachChildren,\n  count: countChildren,\n  toArray: toArray,\n  only: onlyChild\n};\n\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals;\nexports.act = act;\nexports.cloneElement = cloneElement$1;\nexports.createContext = createContext;\nexports.createElement = createElement$1;\nexports.createFactory = createFactory;\nexports.createRef = createRef;\nexports.forwardRef = forwardRef;\nexports.isValidElement = isValidElement;\nexports.lazy = lazy;\nexports.memo = memo;\nexports.startTransition = startTransition;\nexports.unstable_act = act;\nexports.useCallback = useCallback;\nexports.useContext = useContext;\nexports.useDebugValue = useDebugValue;\nexports.useDeferredValue = useDeferredValue;\nexports.useEffect = useEffect;\nexports.useId = useId;\nexports.useImperativeHandle = useImperativeHandle;\nexports.useInsertionEffect = useInsertionEffect;\nexports.useLayoutEffect = useLayoutEffect;\nexports.useMemo = useMemo;\nexports.useReducer = useReducer;\nexports.useRef = useRef;\nexports.useState = useState;\nexports.useSyncExternalStore = useSyncExternalStore;\nexports.useTransition = useTransition;\nexports.version = ReactVersion;\n          /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n    'function'\n) {\n  __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n        \n  })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.min.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * scheduler.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n\n          'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n    'function'\n) {\n  __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n          var enableSchedulerDebugging = false;\nvar enableProfiling = false;\nvar frameYieldMs = 5;\n\nfunction push(heap, node) {\n  var index = heap.length;\n  heap.push(node);\n  siftUp(heap, node, index);\n}\nfunction peek(heap) {\n  return heap.length === 0 ? null : heap[0];\n}\nfunction pop(heap) {\n  if (heap.length === 0) {\n    return null;\n  }\n\n  var first = heap[0];\n  var last = heap.pop();\n\n  if (last !== first) {\n    heap[0] = last;\n    siftDown(heap, last, 0);\n  }\n\n  return first;\n}\n\nfunction siftUp(heap, node, i) {\n  var index = i;\n\n  while (index > 0) {\n    var parentIndex = index - 1 >>> 1;\n    var parent = heap[parentIndex];\n\n    if (compare(parent, node) > 0) {\n      // The parent is larger. Swap positions.\n      heap[parentIndex] = node;\n      heap[index] = parent;\n      index = parentIndex;\n    } else {\n      // The parent is smaller. Exit.\n      return;\n    }\n  }\n}\n\nfunction siftDown(heap, node, i) {\n  var index = i;\n  var length = heap.length;\n  var halfLength = length >>> 1;\n\n  while (index < halfLength) {\n    var leftIndex = (index + 1) * 2 - 1;\n    var left = heap[leftIndex];\n    var rightIndex = leftIndex + 1;\n    var right = heap[rightIndex]; // If the left or right node is smaller, swap with the smaller of those.\n\n    if (compare(left, node) < 0) {\n      if (rightIndex < length && compare(right, left) < 0) {\n        heap[index] = right;\n        heap[rightIndex] = node;\n        index = rightIndex;\n      } else {\n        heap[index] = left;\n        heap[leftIndex] = node;\n        index = leftIndex;\n      }\n    } else if (rightIndex < length && compare(right, node) < 0) {\n      heap[index] = right;\n      heap[rightIndex] = node;\n      index = rightIndex;\n    } else {\n      // Neither child is smaller. Exit.\n      return;\n    }\n  }\n}\n\nfunction compare(a, b) {\n  // Compare sort index first, then task id.\n  var diff = a.sortIndex - b.sortIndex;\n  return diff !== 0 ? diff : a.id - b.id;\n}\n\n// TODO: Use symbols?\nvar ImmediatePriority = 1;\nvar UserBlockingPriority = 2;\nvar NormalPriority = 3;\nvar LowPriority = 4;\nvar IdlePriority = 5;\n\nfunction markTaskErrored(task, ms) {\n}\n\n/* eslint-disable no-var */\n\nvar hasPerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';\n\nif (hasPerformanceNow) {\n  var localPerformance = performance;\n\n  exports.unstable_now = function () {\n    return localPerformance.now();\n  };\n} else {\n  var localDate = Date;\n  var initialTime = localDate.now();\n\n  exports.unstable_now = function () {\n    return localDate.now() - initialTime;\n  };\n} // Max 31 bit integer. The max integer size in V8 for 32-bit systems.\n// Math.pow(2, 30) - 1\n// 0b111111111111111111111111111111\n\n\nvar maxSigned31BitInt = 1073741823; // Times out immediately\n\nvar IMMEDIATE_PRIORITY_TIMEOUT = -1; // Eventually times out\n\nvar USER_BLOCKING_PRIORITY_TIMEOUT = 250;\nvar NORMAL_PRIORITY_TIMEOUT = 5000;\nvar LOW_PRIORITY_TIMEOUT = 10000; // Never times out\n\nvar IDLE_PRIORITY_TIMEOUT = maxSigned31BitInt; // Tasks are stored on a min heap\n\nvar taskQueue = [];\nvar timerQueue = []; // Incrementing id counter. Used to maintain insertion order.\n\nvar taskIdCounter = 1; // Pausing the scheduler is useful for debugging.\nvar currentTask = null;\nvar currentPriorityLevel = NormalPriority; // This is set while performing work, to prevent re-entrance.\n\nvar isPerformingWork = false;\nvar isHostCallbackScheduled = false;\nvar isHostTimeoutScheduled = false; // Capture local references to native APIs, in case a polyfill overrides them.\n\nvar localSetTimeout = typeof setTimeout === 'function' ? setTimeout : null;\nvar localClearTimeout = typeof clearTimeout === 'function' ? clearTimeout : null;\nvar localSetImmediate = typeof setImmediate !== 'undefined' ? setImmediate : null; // IE and Node.js + jsdom\n\nvar isInputPending = typeof navigator !== 'undefined' && navigator.scheduling !== undefined && navigator.scheduling.isInputPending !== undefined ? navigator.scheduling.isInputPending.bind(navigator.scheduling) : null;\n\nfunction advanceTimers(currentTime) {\n  // Check for tasks that are no longer delayed and add them to the queue.\n  var timer = peek(timerQueue);\n\n  while (timer !== null) {\n    if (timer.callback === null) {\n      // Timer was cancelled.\n      pop(timerQueue);\n    } else if (timer.startTime <= currentTime) {\n      // Timer fired. Transfer to the task queue.\n      pop(timerQueue);\n      timer.sortIndex = timer.expirationTime;\n      push(taskQueue, timer);\n    } else {\n      // Remaining timers are pending.\n      return;\n    }\n\n    timer = peek(timerQueue);\n  }\n}\n\nfunction handleTimeout(currentTime) {\n  isHostTimeoutScheduled = false;\n  advanceTimers(currentTime);\n\n  if (!isHostCallbackScheduled) {\n    if (peek(taskQueue) !== null) {\n      isHostCallbackScheduled = true;\n      requestHostCallback(flushWork);\n    } else {\n      var firstTimer = peek(timerQueue);\n\n      if (firstTimer !== null) {\n        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n      }\n    }\n  }\n}\n\nfunction flushWork(hasTimeRemaining, initialTime) {\n\n\n  isHostCallbackScheduled = false;\n\n  if (isHostTimeoutScheduled) {\n    // We scheduled a timeout but it's no longer needed. Cancel it.\n    isHostTimeoutScheduled = false;\n    cancelHostTimeout();\n  }\n\n  isPerformingWork = true;\n  var previousPriorityLevel = currentPriorityLevel;\n\n  try {\n    if (enableProfiling) {\n      try {\n        return workLoop(hasTimeRemaining, initialTime);\n      } catch (error) {\n        if (currentTask !== null) {\n          var currentTime = exports.unstable_now();\n          markTaskErrored(currentTask, currentTime);\n          currentTask.isQueued = false;\n        }\n\n        throw error;\n      }\n    } else {\n      // No catch in prod code path.\n      return workLoop(hasTimeRemaining, initialTime);\n    }\n  } finally {\n    currentTask = null;\n    currentPriorityLevel = previousPriorityLevel;\n    isPerformingWork = false;\n  }\n}\n\nfunction workLoop(hasTimeRemaining, initialTime) {\n  var currentTime = initialTime;\n  advanceTimers(currentTime);\n  currentTask = peek(taskQueue);\n\n  while (currentTask !== null && !(enableSchedulerDebugging )) {\n    if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || shouldYieldToHost())) {\n      // This currentTask hasn't expired, and we've reached the deadline.\n      break;\n    }\n\n    var callback = currentTask.callback;\n\n    if (typeof callback === 'function') {\n      currentTask.callback = null;\n      currentPriorityLevel = currentTask.priorityLevel;\n      var didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n\n      var continuationCallback = callback(didUserCallbackTimeout);\n      currentTime = exports.unstable_now();\n\n      if (typeof continuationCallback === 'function') {\n        currentTask.callback = continuationCallback;\n      } else {\n\n        if (currentTask === peek(taskQueue)) {\n          pop(taskQueue);\n        }\n      }\n\n      advanceTimers(currentTime);\n    } else {\n      pop(taskQueue);\n    }\n\n    currentTask = peek(taskQueue);\n  } // Return whether there's additional work\n\n\n  if (currentTask !== null) {\n    return true;\n  } else {\n    var firstTimer = peek(timerQueue);\n\n    if (firstTimer !== null) {\n      requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n    }\n\n    return false;\n  }\n}\n\nfunction unstable_runWithPriority(priorityLevel, eventHandler) {\n  switch (priorityLevel) {\n    case ImmediatePriority:\n    case UserBlockingPriority:\n    case NormalPriority:\n    case LowPriority:\n    case IdlePriority:\n      break;\n\n    default:\n      priorityLevel = NormalPriority;\n  }\n\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n}\n\nfunction unstable_next(eventHandler) {\n  var priorityLevel;\n\n  switch (currentPriorityLevel) {\n    case ImmediatePriority:\n    case UserBlockingPriority:\n    case NormalPriority:\n      // Shift down to normal priority\n      priorityLevel = NormalPriority;\n      break;\n\n    default:\n      // Anything lower than normal priority should remain at the current level.\n      priorityLevel = currentPriorityLevel;\n      break;\n  }\n\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n}\n\nfunction unstable_wrapCallback(callback) {\n  var parentPriorityLevel = currentPriorityLevel;\n  return function () {\n    // This is a fork of runWithPriority, inlined for performance.\n    var previousPriorityLevel = currentPriorityLevel;\n    currentPriorityLevel = parentPriorityLevel;\n\n    try {\n      return callback.apply(this, arguments);\n    } finally {\n      currentPriorityLevel = previousPriorityLevel;\n    }\n  };\n}\n\nfunction unstable_scheduleCallback(priorityLevel, callback, options) {\n  var currentTime = exports.unstable_now();\n  var startTime;\n\n  if (typeof options === 'object' && options !== null) {\n    var delay = options.delay;\n\n    if (typeof delay === 'number' && delay > 0) {\n      startTime = currentTime + delay;\n    } else {\n      startTime = currentTime;\n    }\n  } else {\n    startTime = currentTime;\n  }\n\n  var timeout;\n\n  switch (priorityLevel) {\n    case ImmediatePriority:\n      timeout = IMMEDIATE_PRIORITY_TIMEOUT;\n      break;\n\n    case UserBlockingPriority:\n      timeout = USER_BLOCKING_PRIORITY_TIMEOUT;\n      break;\n\n    case IdlePriority:\n      timeout = IDLE_PRIORITY_TIMEOUT;\n      break;\n\n    case LowPriority:\n      timeout = LOW_PRIORITY_TIMEOUT;\n      break;\n\n    case NormalPriority:\n    default:\n      timeout = NORMAL_PRIORITY_TIMEOUT;\n      break;\n  }\n\n  var expirationTime = startTime + timeout;\n  var newTask = {\n    id: taskIdCounter++,\n    callback: callback,\n    priorityLevel: priorityLevel,\n    startTime: startTime,\n    expirationTime: expirationTime,\n    sortIndex: -1\n  };\n\n  if (startTime > currentTime) {\n    // This is a delayed task.\n    newTask.sortIndex = startTime;\n    push(timerQueue, newTask);\n\n    if (peek(taskQueue) === null && newTask === peek(timerQueue)) {\n      // All tasks are delayed, and this is the task with the earliest delay.\n      if (isHostTimeoutScheduled) {\n        // Cancel an existing timeout.\n        cancelHostTimeout();\n      } else {\n        isHostTimeoutScheduled = true;\n      } // Schedule a timeout.\n\n\n      requestHostTimeout(handleTimeout, startTime - currentTime);\n    }\n  } else {\n    newTask.sortIndex = expirationTime;\n    push(taskQueue, newTask);\n    // wait until the next time we yield.\n\n\n    if (!isHostCallbackScheduled && !isPerformingWork) {\n      isHostCallbackScheduled = true;\n      requestHostCallback(flushWork);\n    }\n  }\n\n  return newTask;\n}\n\nfunction unstable_pauseExecution() {\n}\n\nfunction unstable_continueExecution() {\n\n  if (!isHostCallbackScheduled && !isPerformingWork) {\n    isHostCallbackScheduled = true;\n    requestHostCallback(flushWork);\n  }\n}\n\nfunction unstable_getFirstCallbackNode() {\n  return peek(taskQueue);\n}\n\nfunction unstable_cancelCallback(task) {\n  // remove from the queue because you can't remove arbitrary nodes from an\n  // array based heap, only the first one.)\n\n\n  task.callback = null;\n}\n\nfunction unstable_getCurrentPriorityLevel() {\n  return currentPriorityLevel;\n}\n\nvar isMessageLoopRunning = false;\nvar scheduledHostCallback = null;\nvar taskTimeoutID = -1; // Scheduler periodically yields in case there is other work on the main\n// thread, like user events. By default, it yields multiple times per frame.\n// It does not attempt to align with frame boundaries, since most tasks don't\n// need to be frame aligned; for those that do, use requestAnimationFrame.\n\nvar frameInterval = frameYieldMs;\nvar startTime = -1;\n\nfunction shouldYieldToHost() {\n  var timeElapsed = exports.unstable_now() - startTime;\n\n  if (timeElapsed < frameInterval) {\n    // The main thread has only been blocked for a really short amount of time;\n    // smaller than a single frame. Don't yield yet.\n    return false;\n  } // The main thread has been blocked for a non-negligible amount of time. We\n\n\n  return true;\n}\n\nfunction requestPaint() {\n\n}\n\nfunction forceFrameRate(fps) {\n  if (fps < 0 || fps > 125) {\n    // Using console['error'] to evade Babel and ESLint\n    console['error']('forceFrameRate takes a positive int between 0 and 125, ' + 'forcing frame rates higher than 125 fps is not supported');\n    return;\n  }\n\n  if (fps > 0) {\n    frameInterval = Math.floor(1000 / fps);\n  } else {\n    // reset the framerate\n    frameInterval = frameYieldMs;\n  }\n}\n\nvar performWorkUntilDeadline = function () {\n  if (scheduledHostCallback !== null) {\n    var currentTime = exports.unstable_now(); // Keep track of the start time so we can measure how long the main thread\n    // has been blocked.\n\n    startTime = currentTime;\n    var hasTimeRemaining = true; // If a scheduler task throws, exit the current browser task so the\n    // error can be observed.\n    //\n    // Intentionally not using a try-catch, since that makes some debugging\n    // techniques harder. Instead, if `scheduledHostCallback` errors, then\n    // `hasMoreWork` will remain true, and we'll continue the work loop.\n\n    var hasMoreWork = true;\n\n    try {\n      hasMoreWork = scheduledHostCallback(hasTimeRemaining, currentTime);\n    } finally {\n      if (hasMoreWork) {\n        // If there's more work, schedule the next message event at the end\n        // of the preceding one.\n        schedulePerformWorkUntilDeadline();\n      } else {\n        isMessageLoopRunning = false;\n        scheduledHostCallback = null;\n      }\n    }\n  } else {\n    isMessageLoopRunning = false;\n  } // Yielding to the browser will give it a chance to paint, so we can\n};\n\nvar schedulePerformWorkUntilDeadline;\n\nif (typeof localSetImmediate === 'function') {\n  // Node.js and old IE.\n  // There's a few reasons for why we prefer setImmediate.\n  //\n  // Unlike MessageChannel, it doesn't prevent a Node.js process from exiting.\n  // (Even though this is a DOM fork of the Scheduler, you could get here\n  // with a mix of Node.js 15+, which has a MessageChannel, and jsdom.)\n  // https://github.com/facebook/react/issues/20756\n  //\n  // But also, it runs earlier which is the semantic we want.\n  // If other browsers ever implement it, it's better to use it.\n  // Although both of these would be inferior to native scheduling.\n  schedulePerformWorkUntilDeadline = function () {\n    localSetImmediate(performWorkUntilDeadline);\n  };\n} else if (typeof MessageChannel !== 'undefined') {\n  // DOM and Worker environments.\n  // We prefer MessageChannel because of the 4ms setTimeout clamping.\n  var channel = new MessageChannel();\n  var port = channel.port2;\n  channel.port1.onmessage = performWorkUntilDeadline;\n\n  schedulePerformWorkUntilDeadline = function () {\n    port.postMessage(null);\n  };\n} else {\n  // We should only fallback here in non-browser environments.\n  schedulePerformWorkUntilDeadline = function () {\n    localSetTimeout(performWorkUntilDeadline, 0);\n  };\n}\n\nfunction requestHostCallback(callback) {\n  scheduledHostCallback = callback;\n\n  if (!isMessageLoopRunning) {\n    isMessageLoopRunning = true;\n    schedulePerformWorkUntilDeadline();\n  }\n}\n\nfunction requestHostTimeout(callback, ms) {\n  taskTimeoutID = localSetTimeout(function () {\n    callback(exports.unstable_now());\n  }, ms);\n}\n\nfunction cancelHostTimeout() {\n  localClearTimeout(taskTimeoutID);\n  taskTimeoutID = -1;\n}\n\nvar unstable_requestPaint = requestPaint;\nvar unstable_Profiling =  null;\n\nexports.unstable_IdlePriority = IdlePriority;\nexports.unstable_ImmediatePriority = ImmediatePriority;\nexports.unstable_LowPriority = LowPriority;\nexports.unstable_NormalPriority = NormalPriority;\nexports.unstable_Profiling = unstable_Profiling;\nexports.unstable_UserBlockingPriority = UserBlockingPriority;\nexports.unstable_cancelCallback = unstable_cancelCallback;\nexports.unstable_continueExecution = unstable_continueExecution;\nexports.unstable_forceFrameRate = forceFrameRate;\nexports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel;\nexports.unstable_getFirstCallbackNode = unstable_getFirstCallbackNode;\nexports.unstable_next = unstable_next;\nexports.unstable_pauseExecution = unstable_pauseExecution;\nexports.unstable_requestPaint = unstable_requestPaint;\nexports.unstable_runWithPriority = unstable_runWithPriority;\nexports.unstable_scheduleCallback = unstable_scheduleCallback;\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = unstable_wrapCallback;\n          /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n    'function'\n) {\n  __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n        \n  })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","export default function ascending(a, b) {\n  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n  return a == null || b == null ? NaN\n    : b < a ? -1\n    : b > a ? 1\n    : b >= a ? 0\n    : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n  let compare1, compare2, delta;\n\n  // If an accessor is specified, promote it to a comparator. In this case we\n  // can test whether the search value is (self-) comparable. We can’t do this\n  // for a comparator (except for specific, known comparators) because we can’t\n  // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n  // used to test whether a single value is comparable.\n  if (f.length !== 2) {\n    compare1 = ascending;\n    compare2 = (d, x) => ascending(f(d), x);\n    delta = (d, x) => f(d) - x;\n  } else {\n    compare1 = f === ascending || f === descending ? f : zero;\n    compare2 = f;\n    delta = f;\n  }\n\n  function left(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function right(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) <= 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function center(a, x, lo = 0, hi = a.length) {\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction zero() {\n  return 0;\n}\n","export default function number(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export function blur(values, r) {\n  if (!((r = +r) >= 0)) throw new RangeError(\"invalid r\");\n  let length = values.length;\n  if (!((length = Math.floor(length)) >= 0)) throw new RangeError(\"invalid length\");\n  if (!length || !r) return values;\n  const blur = blurf(r);\n  const temp = values.slice();\n  blur(values, temp, 0, length, 1);\n  blur(temp, values, 0, length, 1);\n  blur(values, temp, 0, length, 1);\n  return values;\n}\n\nexport const blur2 = Blur2(blurf);\n\nexport const blurImage = Blur2(blurfImage);\n\nfunction Blur2(blur) {\n  return function(data, rx, ry = rx) {\n    if (!((rx = +rx) >= 0)) throw new RangeError(\"invalid rx\");\n    if (!((ry = +ry) >= 0)) throw new RangeError(\"invalid ry\");\n    let {data: values, width, height} = data;\n    if (!((width = Math.floor(width)) >= 0)) throw new RangeError(\"invalid width\");\n    if (!((height = Math.floor(height !== undefined ? height : values.length / width)) >= 0)) throw new RangeError(\"invalid height\");\n    if (!width || !height || (!rx && !ry)) return data;\n    const blurx = rx && blur(rx);\n    const blury = ry && blur(ry);\n    const temp = values.slice();\n    if (blurx && blury) {\n      blurh(blurx, temp, values, width, height);\n      blurh(blurx, values, temp, width, height);\n      blurh(blurx, temp, values, width, height);\n      blurv(blury, values, temp, width, height);\n      blurv(blury, temp, values, width, height);\n      blurv(blury, values, temp, width, height);\n    } else if (blurx) {\n      blurh(blurx, values, temp, width, height);\n      blurh(blurx, temp, values, width, height);\n      blurh(blurx, values, temp, width, height);\n    } else if (blury) {\n      blurv(blury, values, temp, width, height);\n      blurv(blury, temp, values, width, height);\n      blurv(blury, values, temp, width, height);\n    }\n    return data;\n  };\n}\n\nfunction blurh(blur, T, S, w, h) {\n  for (let y = 0, n = w * h; y < n;) {\n    blur(T, S, y, y += w, 1);\n  }\n}\n\nfunction blurv(blur, T, S, w, h) {\n  for (let x = 0, n = w * h; x < w; ++x) {\n    blur(T, S, x, x + n, w);\n  }\n}\n\nfunction blurfImage(radius) {\n  const blur = blurf(radius);\n  return (T, S, start, stop, step) => {\n    start <<= 2, stop <<= 2, step <<= 2;\n    blur(T, S, start + 0, stop + 0, step);\n    blur(T, S, start + 1, stop + 1, step);\n    blur(T, S, start + 2, stop + 2, step);\n    blur(T, S, start + 3, stop + 3, step);\n  };\n}\n\n// Given a target array T, a source array S, sets each value T[i] to the average\n// of {S[i - r], …, S[i], …, S[i + r]}, where r = ⌊radius⌋, start <= i < stop,\n// for each i, i + step, i + 2 * step, etc., and where S[j] is clamped between\n// S[start] (inclusive) and S[stop] (exclusive). If the given radius is not an\n// integer, S[i - r - 1] and S[i + r + 1] are added to the sum, each weighted\n// according to r - ⌊radius⌋.\nfunction blurf(radius) {\n  const radius0 = Math.floor(radius);\n  if (radius0 === radius) return bluri(radius);\n  const t = radius - radius0;\n  const w = 2 * radius + 1;\n  return (T, S, start, stop, step) => { // stop must be aligned!\n    if (!((stop -= step) >= start)) return; // inclusive stop\n    let sum = radius0 * S[start];\n    const s0 = step * radius0;\n    const s1 = s0 + step;\n    for (let i = start, j = start + s0; i < j; i += step) {\n      sum += S[Math.min(stop, i)];\n    }\n    for (let i = start, j = stop; i <= j; i += step) {\n      sum += S[Math.min(stop, i + s0)];\n      T[i] = (sum + t * (S[Math.max(start, i - s1)] + S[Math.min(stop, i + s1)])) / w;\n      sum -= S[Math.max(start, i - s0)];\n    }\n  };\n}\n\n// Like blurf, but optimized for integer radius.\nfunction bluri(radius) {\n  const w = 2 * radius + 1;\n  return (T, S, start, stop, step) => { // stop must be aligned!\n    if (!((stop -= step) >= start)) return; // inclusive stop\n    let sum = radius * S[start];\n    const s = step * radius;\n    for (let i = start, j = start + s; i < j; i += step) {\n      sum += S[Math.min(stop, i)];\n    }\n    for (let i = start, j = stop; i <= j; i += step) {\n      sum += S[Math.min(stop, i + s)];\n      T[i] = sum / w;\n      sum -= S[Math.max(start, i - s)];\n    }\n  };\n}\n","export default function count(values, valueof) {\n  let count = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        ++count;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        ++count;\n      }\n    }\n  }\n  return count;\n}\n","function length(array) {\n  return array.length | 0;\n}\n\nfunction empty(length) {\n  return !(length > 0);\n}\n\nfunction arrayify(values) {\n  return typeof values !== \"object\" || \"length\" in values ? values : Array.from(values);\n}\n\nfunction reducer(reduce) {\n  return values => reduce(...values);\n}\n\nexport default function cross(...values) {\n  const reduce = typeof values[values.length - 1] === \"function\" && reducer(values.pop());\n  values = values.map(arrayify);\n  const lengths = values.map(length);\n  const j = values.length - 1;\n  const index = new Array(j + 1).fill(0);\n  const product = [];\n  if (j < 0 || lengths.some(empty)) return product;\n  while (true) {\n    product.push(index.map((j, i) => values[i][j]));\n    let i = j;\n    while (++index[i] === lengths[i]) {\n      if (i === 0) return reduce ? product.map(reduce) : product;\n      index[i--] = 0;\n    }\n  }\n}\n","export default function cumsum(values, valueof) {\n  var sum = 0, index = 0;\n  return Float64Array.from(values, valueof === undefined\n    ? v => (sum += +v || 0)\n    : v => (sum += +valueof(v, index++, values) || 0));\n}","export default function variance(values, valueof) {\n  let count = 0;\n  let delta;\n  let mean = 0;\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        delta = value - mean;\n        mean += delta / ++count;\n        sum += delta * (value - mean);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        delta = value - mean;\n        mean += delta / ++count;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n  if (count > 1) return sum / (count - 1);\n}\n","import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n  const v = variance(values, valueof);\n  return v ? Math.sqrt(v) : v;\n}\n","export default function extent(values, valueof) {\n  let min;\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  }\n  return [min, max];\n}\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n  constructor() {\n    this._partials = new Float64Array(32);\n    this._n = 0;\n  }\n  add(x) {\n    const p = this._partials;\n    let i = 0;\n    for (let j = 0; j < this._n && j < 32; j++) {\n      const y = p[j],\n        hi = x + y,\n        lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n      if (lo) p[i++] = lo;\n      x = hi;\n    }\n    p[i] = x;\n    this._n = i + 1;\n    return this;\n  }\n  valueOf() {\n    const p = this._partials;\n    let n = this._n, x, y, lo, hi = 0;\n    if (n > 0) {\n      hi = p[--n];\n      while (n > 0) {\n        x = hi;\n        y = p[--n];\n        hi = x + y;\n        lo = y - (hi - x);\n        if (lo) break;\n      }\n      if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n        y = lo * 2;\n        x = hi + y;\n        if (y == x - hi) hi = x;\n      }\n    }\n    return hi;\n  }\n}\n\nexport function fsum(values, valueof) {\n  const adder = new Adder();\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        adder.add(value);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        adder.add(value);\n      }\n    }\n  }\n  return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n  const adder = new Adder();\n  let index = -1;\n  return Float64Array.from(values, valueof === undefined\n      ? v => adder.add(+v || 0)\n      : v => adder.add(+valueof(v, ++index, values) || 0)\n  );\n}\n","export class InternMap extends Map {\n  constructor(entries, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (entries != null) for (const [key, value] of entries) this.set(key, value);\n  }\n  get(key) {\n    return super.get(intern_get(this, key));\n  }\n  has(key) {\n    return super.has(intern_get(this, key));\n  }\n  set(key, value) {\n    return super.set(intern_set(this, key), value);\n  }\n  delete(key) {\n    return super.delete(intern_delete(this, key));\n  }\n}\n\nexport class InternSet extends Set {\n  constructor(values, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (values != null) for (const value of values) this.add(value);\n  }\n  has(value) {\n    return super.has(intern_get(this, value));\n  }\n  add(value) {\n    return super.add(intern_set(this, value));\n  }\n  delete(value) {\n    return super.delete(intern_delete(this, value));\n  }\n}\n\nfunction intern_get({_intern, _key}, value) {\n  const key = _key(value);\n  return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) return _intern.get(key);\n  _intern.set(key, value);\n  return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) {\n    value = _intern.get(key);\n    _intern.delete(key);\n  }\n  return value;\n}\n\nfunction keyof(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","export default function identity(x) {\n  return x;\n}\n","import {InternMap} from \"internmap\";\nimport identity from \"./identity.js\";\n\nexport default function group(values, ...keys) {\n  return nest(values, identity, identity, keys);\n}\n\nexport function groups(values, ...keys) {\n  return nest(values, Array.from, identity, keys);\n}\n\nfunction flatten(groups, keys) {\n  for (let i = 1, n = keys.length; i < n; ++i) {\n    groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value]));\n  }\n  return groups;\n}\n\nexport function flatGroup(values, ...keys) {\n  return flatten(groups(values, ...keys), keys);\n}\n\nexport function flatRollup(values, reduce, ...keys) {\n  return flatten(rollups(values, reduce, ...keys), keys);\n}\n\nexport function rollup(values, reduce, ...keys) {\n  return nest(values, identity, reduce, keys);\n}\n\nexport function rollups(values, reduce, ...keys) {\n  return nest(values, Array.from, reduce, keys);\n}\n\nexport function index(values, ...keys) {\n  return nest(values, identity, unique, keys);\n}\n\nexport function indexes(values, ...keys) {\n  return nest(values, Array.from, unique, keys);\n}\n\nfunction unique(values) {\n  if (values.length !== 1) throw new Error(\"duplicate key\");\n  return values[0];\n}\n\nfunction nest(values, map, reduce, keys) {\n  return (function regroup(values, i) {\n    if (i >= keys.length) return reduce(values);\n    const groups = new InternMap();\n    const keyof = keys[i++];\n    let index = -1;\n    for (const value of values) {\n      const key = keyof(value, ++index, values);\n      const group = groups.get(key);\n      if (group) group.push(value);\n      else groups.set(key, [value]);\n    }\n    for (const [key, values] of groups) {\n      groups.set(key, regroup(values, i));\n    }\n    return map(groups);\n  })(values, 0);\n}\n","export default function permute(source, keys) {\n  return Array.from(keys, key => source[key]);\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  values = Array.from(values);\n  let [f] = F;\n  if ((f && f.length !== 2) || F.length > 1) {\n    const index = Uint32Array.from(values, (d, i) => i);\n    if (F.length > 1) {\n      F = F.map(f => values.map(f));\n      index.sort((i, j) => {\n        for (const f of F) {\n          const c = ascendingDefined(f[i], f[j]);\n          if (c) return c;\n        }\n      });\n    } else {\n      f = values.map(f);\n      index.sort((i, j) => ascendingDefined(f[i], f[j]));\n    }\n    return permute(values, index);\n  }\n  return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n  if (compare === ascending) return ascendingDefined;\n  if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n  return (a, b) => {\n    const x = compare(a, b);\n    if (x || x === 0) return x;\n    return (compare(b, b) === 0) - (compare(a, a) === 0);\n  };\n}\n\nexport function ascendingDefined(a, b) {\n  return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","import ascending from \"./ascending.js\";\nimport group, {rollup} from \"./group.js\";\nimport sort from \"./sort.js\";\n\nexport default function groupSort(values, reduce, key) {\n  return (reduce.length !== 2\n    ? sort(rollup(values, reduce, key), (([ak, av], [bk, bv]) => ascending(av, bv) || ascending(ak, bk)))\n    : sort(group(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || ascending(ak, bk))))\n    .map(([key]) => key);\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function constant(x) {\n  return () => x;\n}\n","const e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n  const step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log10(step)),\n      error = step / Math.pow(10, power),\n      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n  let i1, i2, inc;\n  if (power < 0) {\n    inc = Math.pow(10, -power) / factor;\n    i1 = Math.round(start * inc);\n    i2 = Math.round(stop * inc);\n    if (i1 / inc < start) ++i1;\n    if (i2 / inc > stop) --i2;\n    inc = -inc;\n  } else {\n    inc = Math.pow(10, power) * factor;\n    i1 = Math.round(start / inc);\n    i2 = Math.round(stop / inc);\n    if (i1 * inc < start) ++i1;\n    if (i2 * inc > stop) --i2;\n  }\n  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n  return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  if (!(count > 0)) return [];\n  if (start === stop) return [start];\n  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n  if (!(i2 >= i1)) return [];\n  const n = i2 - i1 + 1, ticks = new Array(n);\n  if (reverse) {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n  } else {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n  }\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","import {tickIncrement} from \"./ticks.js\";\n\nexport default function nice(start, stop, count) {\n  let prestep;\n  while (true) {\n    const step = tickIncrement(start, stop, count);\n    if (step === prestep || step === 0 || !isFinite(step)) {\n      return [start, stop];\n    } else if (step > 0) {\n      start = Math.floor(start / step) * step;\n      stop = Math.ceil(stop / step) * step;\n    } else if (step < 0) {\n      start = Math.ceil(start * step) / step;\n      stop = Math.floor(stop * step) / step;\n    }\n    prestep = step;\n  }\n}\n","import count from \"../count.js\";\n\nexport default function thresholdSturges(values) {\n  return Math.max(1, Math.ceil(Math.log(count(values)) / Math.LN2) + 1);\n}\n","import {slice} from \"./array.js\";\nimport bisect from \"./bisect.js\";\nimport constant from \"./constant.js\";\nimport extent from \"./extent.js\";\nimport identity from \"./identity.js\";\nimport nice from \"./nice.js\";\nimport ticks, {tickIncrement} from \"./ticks.js\";\nimport sturges from \"./threshold/sturges.js\";\n\nexport default function bin() {\n  var value = identity,\n      domain = extent,\n      threshold = sturges;\n\n  function histogram(data) {\n    if (!Array.isArray(data)) data = Array.from(data);\n\n    var i,\n        n = data.length,\n        x,\n        step,\n        values = new Array(n);\n\n    for (i = 0; i < n; ++i) {\n      values[i] = value(data[i], i, data);\n    }\n\n    var xz = domain(values),\n        x0 = xz[0],\n        x1 = xz[1],\n        tz = threshold(values, x0, x1);\n\n    // Convert number of thresholds into uniform thresholds, and nice the\n    // default domain accordingly.\n    if (!Array.isArray(tz)) {\n      const max = x1, tn = +tz;\n      if (domain === extent) [x0, x1] = nice(x0, x1, tn);\n      tz = ticks(x0, x1, tn);\n\n      // If the domain is aligned with the first tick (which it will by\n      // default), then we can use quantization rather than bisection to bin\n      // values, which is substantially faster.\n      if (tz[0] <= x0) step = tickIncrement(x0, x1, tn);\n\n      // If the last threshold is coincident with the domain’s upper bound, the\n      // last bin will be zero-width. If the default domain is used, and this\n      // last threshold is coincident with the maximum input value, we can\n      // extend the niced upper bound by one tick to ensure uniform bin widths;\n      // otherwise, we simply remove the last threshold. Note that we don’t\n      // coerce values or the domain to numbers, and thus must be careful to\n      // compare order (>=) rather than strict equality (===)!\n      if (tz[tz.length - 1] >= x1) {\n        if (max >= x1 && domain === extent) {\n          const step = tickIncrement(x0, x1, tn);\n          if (isFinite(step)) {\n            if (step > 0) {\n              x1 = (Math.floor(x1 / step) + 1) * step;\n            } else if (step < 0) {\n              x1 = (Math.ceil(x1 * -step) + 1) / -step;\n            }\n          }\n        } else {\n          tz.pop();\n        }\n      }\n    }\n\n    // Remove any thresholds outside the domain.\n    // Be careful not to mutate an array owned by the user!\n    var m = tz.length, a = 0, b = m;\n    while (tz[a] <= x0) ++a;\n    while (tz[b - 1] > x1) --b;\n    if (a || b < m) tz = tz.slice(a, b), m = b - a;\n\n    var bins = new Array(m + 1),\n        bin;\n\n    // Initialize bins.\n    for (i = 0; i <= m; ++i) {\n      bin = bins[i] = [];\n      bin.x0 = i > 0 ? tz[i - 1] : x0;\n      bin.x1 = i < m ? tz[i] : x1;\n    }\n\n    // Assign data to bins by value, ignoring any outside the domain.\n    if (isFinite(step)) {\n      if (step > 0) {\n        for (i = 0; i < n; ++i) {\n          if ((x = values[i]) != null && x0 <= x && x <= x1) {\n            bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]);\n          }\n        }\n      } else if (step < 0) {\n        for (i = 0; i < n; ++i) {\n          if ((x = values[i]) != null && x0 <= x && x <= x1) {\n            const j = Math.floor((x0 - x) * step);\n            bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding\n          }\n        }\n      }\n    } else {\n      for (i = 0; i < n; ++i) {\n        if ((x = values[i]) != null && x0 <= x && x <= x1) {\n          bins[bisect(tz, x, 0, m)].push(data[i]);\n        }\n      }\n    }\n\n    return bins;\n  }\n\n  histogram.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n  };\n\n  histogram.domain = function(_) {\n    return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n  };\n\n  histogram.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : constant(Array.isArray(_) ? slice.call(_) : _), histogram) : threshold;\n  };\n\n  return histogram;\n}\n","export default function max(values, valueof) {\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  }\n  return max;\n}\n","export default function maxIndex(values, valueof) {\n  let max;\n  let maxIndex = -1;\n  let index = -1;\n  if (valueof === undefined) {\n    for (const value of values) {\n      ++index;\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value, maxIndex = index;\n      }\n    }\n  } else {\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value, maxIndex = index;\n      }\n    }\n  }\n  return maxIndex;\n}\n","export default function min(values, valueof) {\n  let min;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  }\n  return min;\n}\n","export default function minIndex(values, valueof) {\n  let min;\n  let minIndex = -1;\n  let index = -1;\n  if (valueof === undefined) {\n    for (const value of values) {\n      ++index;\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value, minIndex = index;\n      }\n    }\n  } else {\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value, minIndex = index;\n      }\n    }\n  }\n  return minIndex;\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n  k = Math.floor(k);\n  left = Math.floor(Math.max(0, left));\n  right = Math.floor(Math.min(array.length - 1, right));\n\n  if (!(left <= k && k <= right)) return array;\n\n  compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n  while (right > left) {\n    if (right - left > 600) {\n      const n = right - left + 1;\n      const m = k - left + 1;\n      const z = Math.log(n);\n      const s = 0.5 * Math.exp(2 * z / 3);\n      const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n      const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n      const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n      quickselect(array, k, newLeft, newRight, compare);\n    }\n\n    const t = array[k];\n    let i = left;\n    let j = right;\n\n    swap(array, left, k);\n    if (compare(array[right], t) > 0) swap(array, left, right);\n\n    while (i < j) {\n      swap(array, i, j), ++i, --j;\n      while (compare(array[i], t) < 0) ++i;\n      while (compare(array[j], t) > 0) --j;\n    }\n\n    if (compare(array[left], t) === 0) swap(array, left, j);\n    else ++j, swap(array, j, right);\n\n    if (j <= k) left = j + 1;\n    if (k <= j) right = j - 1;\n  }\n\n  return array;\n}\n\nfunction swap(array, i, j) {\n  const t = array[i];\n  array[i] = array[j];\n  array[j] = t;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function greatest(values, compare = ascending) {\n  let max;\n  let defined = false;\n  if (compare.length === 1) {\n    let maxValue;\n    for (const element of values) {\n      const value = compare(element);\n      if (defined\n          ? ascending(value, maxValue) > 0\n          : ascending(value, value) === 0) {\n        max = element;\n        maxValue = value;\n        defined = true;\n      }\n    }\n  } else {\n    for (const value of values) {\n      if (defined\n          ? compare(value, max) > 0\n          : compare(value, value) === 0) {\n        max = value;\n        defined = true;\n      }\n    }\n  }\n  return max;\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n  values = Float64Array.from(numbers(values, valueof));\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return min(values);\n  if (p >= 1) return max(values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n      value1 = min(values.subarray(i0 + 1));\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n  if (isNaN(p = +p)) return;\n  numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n  if (p <= 0) return minIndex(numbers);\n  if (p >= 1) return maxIndex(numbers);\n  var numbers,\n      index = Uint32Array.from(values, (_, i) => i),\n      j = numbers.length - 1,\n      i = Math.floor(j * p);\n  quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n  i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n  return i >= 0 ? i : -1;\n}\n","import count from \"../count.js\";\nimport quantile from \"../quantile.js\";\n\nexport default function thresholdFreedmanDiaconis(values, min, max) {\n  const c = count(values), d = quantile(values, 0.75) - quantile(values, 0.25);\n  return c && d ? Math.ceil((max - min) / (2 * d * Math.pow(c, -1 / 3))) : 1;\n}\n","import count from \"../count.js\";\nimport deviation from \"../deviation.js\";\n\nexport default function thresholdScott(values, min, max) {\n  const c = count(values), d = deviation(values);\n  return c && d ? Math.ceil((max - min) * Math.cbrt(c) / (3.49 * d)) : 1;\n}\n","export default function mean(values, valueof) {\n  let count = 0;\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  }\n  if (count) return sum / count;\n}\n","import quantile, {quantileIndex} from \"./quantile.js\";\n\nexport default function median(values, valueof) {\n  return quantile(values, 0.5, valueof);\n}\n\nexport function medianIndex(values, valueof) {\n  return quantileIndex(values, 0.5, valueof);\n}\n","function* flatten(arrays) {\n  for (const array of arrays) {\n    yield* array;\n  }\n}\n\nexport default function merge(arrays) {\n  return Array.from(flatten(arrays));\n}\n","import {InternMap} from \"internmap\";\n\nexport default function mode(values, valueof) {\n  const counts = new InternMap();\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && value >= value) {\n        counts.set(value, (counts.get(value) || 0) + 1);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && value >= value) {\n        counts.set(value, (counts.get(value) || 0) + 1);\n      }\n    }\n  }\n  let modeValue;\n  let modeCount = 0;\n  for (const [value, count] of counts) {\n    if (count > modeCount) {\n      modeCount = count;\n      modeValue = value;\n    }\n  }\n  return modeValue;\n}\n","export default function pairs(values, pairof = pair) {\n  const pairs = [];\n  let previous;\n  let first = false;\n  for (const value of values) {\n    if (first) pairs.push(pairof(previous, value));\n    previous = value;\n    first = true;\n  }\n  return pairs;\n}\n\nexport function pair(a, b) {\n  return [a, b];\n}\n","export default function range(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n","import ascending from \"./ascending.js\";\nimport {ascendingDefined, compareDefined} from \"./sort.js\";\n\nexport default function rank(values, valueof = ascending) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  let V = Array.from(values);\n  const R = new Float64Array(V.length);\n  if (valueof.length !== 2) V = V.map(valueof), valueof = ascending;\n  const compareIndex = (i, j) => valueof(V[i], V[j]);\n  let k, r;\n  values = Uint32Array.from(V, (_, i) => i);\n  // Risky chaining due to Safari 14 https://github.com/d3/d3-array/issues/123\n  values.sort(valueof === ascending ? (i, j) => ascendingDefined(V[i], V[j]) : compareDefined(compareIndex));\n  values.forEach((j, i) => {\n      const c = compareIndex(j, k === undefined ? j : k);\n      if (c >= 0) {\n        if (k === undefined || c > 0) k = j, r = i;\n        R[j] = r;\n      } else {\n        R[j] = NaN;\n      }\n    });\n  return R;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function least(values, compare = ascending) {\n  let min;\n  let defined = false;\n  if (compare.length === 1) {\n    let minValue;\n    for (const element of values) {\n      const value = compare(element);\n      if (defined\n          ? ascending(value, minValue) < 0\n          : ascending(value, value) === 0) {\n        min = element;\n        minValue = value;\n        defined = true;\n      }\n    }\n  } else {\n    for (const value of values) {\n      if (defined\n          ? compare(value, min) < 0\n          : compare(value, value) === 0) {\n        min = value;\n        defined = true;\n      }\n    }\n  }\n  return min;\n}\n","import ascending from \"./ascending.js\";\nimport minIndex from \"./minIndex.js\";\n\nexport default function leastIndex(values, compare = ascending) {\n  if (compare.length === 1) return minIndex(values, compare);\n  let minValue;\n  let min = -1;\n  let index = -1;\n  for (const value of values) {\n    ++index;\n    if (min < 0\n        ? compare(value, value) === 0\n        : compare(value, minValue) < 0) {\n      minValue = value;\n      min = index;\n    }\n  }\n  return min;\n}\n","import ascending from \"./ascending.js\";\nimport maxIndex from \"./maxIndex.js\";\n\nexport default function greatestIndex(values, compare = ascending) {\n  if (compare.length === 1) return maxIndex(values, compare);\n  let maxValue;\n  let max = -1;\n  let index = -1;\n  for (const value of values) {\n    ++index;\n    if (max < 0\n        ? compare(value, value) === 0\n        : compare(value, maxValue) > 0) {\n      maxValue = value;\n      max = index;\n    }\n  }\n  return max;\n}\n","import leastIndex from \"./leastIndex.js\";\n\nexport default function scan(values, compare) {\n  const index = leastIndex(values, compare);\n  return index < 0 ? undefined : index;\n}\n","export default shuffler(Math.random);\n\nexport function shuffler(random) {\n  return function shuffle(array, i0 = 0, i1 = array.length) {\n    let m = i1 - (i0 = +i0);\n    while (m) {\n      const i = random() * m-- | 0, t = array[m + i0];\n      array[m + i0] = array[i + i0];\n      array[i + i0] = t;\n    }\n    return array;\n  };\n}\n","export default function sum(values, valueof) {\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        sum += value;\n      }\n    }\n  }\n  return sum;\n}\n","import min from \"./min.js\";\n\nexport default function transpose(matrix) {\n  if (!(n = matrix.length)) return [];\n  for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n    for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n      row[j] = matrix[j][i];\n    }\n  }\n  return transpose;\n}\n\nfunction length(d) {\n  return d.length;\n}\n","import transpose from \"./transpose.js\";\n\nexport default function zip() {\n  return transpose(arguments);\n}\n","export default function every(values, test) {\n  if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n  let index = -1;\n  for (const value of values) {\n    if (!test(value, ++index, values)) {\n      return false;\n    }\n  }\n  return true;\n}\n","export default function some(values, test) {\n  if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n  let index = -1;\n  for (const value of values) {\n    if (test(value, ++index, values)) {\n      return true;\n    }\n  }\n  return false;\n}\n","export default function filter(values, test) {\n  if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n  const array = [];\n  let index = -1;\n  for (const value of values) {\n    if (test(value, ++index, values)) {\n      array.push(value);\n    }\n  }\n  return array;\n}\n","export default function map(values, mapper) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  if (typeof mapper !== \"function\") throw new TypeError(\"mapper is not a function\");\n  return Array.from(values, (value, index) => mapper(value, index, values));\n}\n","export default function reduce(values, reducer, value) {\n  if (typeof reducer !== \"function\") throw new TypeError(\"reducer is not a function\");\n  const iterator = values[Symbol.iterator]();\n  let done, next, index = -1;\n  if (arguments.length < 3) {\n    ({done, value} = iterator.next());\n    if (done) return;\n    ++index;\n  }\n  while (({done, value: next} = iterator.next()), !done) {\n    value = reducer(value, next, ++index, values);\n  }\n  return value;\n}\n","export default function reverse(values) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  return Array.from(values).reverse();\n}\n","import {InternSet} from \"internmap\";\n\nexport default function difference(values, ...others) {\n  values = new InternSet(values);\n  for (const other of others) {\n    for (const value of other) {\n      values.delete(value);\n    }\n  }\n  return values;\n}\n","import {InternSet} from \"internmap\";\n\nexport default function disjoint(values, other) {\n  const iterator = other[Symbol.iterator](), set = new InternSet();\n  for (const v of values) {\n    if (set.has(v)) return false;\n    let value, done;\n    while (({value, done} = iterator.next())) {\n      if (done) break;\n      if (Object.is(v, value)) return false;\n      set.add(value);\n    }\n  }\n  return true;\n}\n","import {InternSet} from \"internmap\";\n\nexport default function intersection(values, ...others) {\n  values = new InternSet(values);\n  others = others.map(set);\n  out: for (const value of values) {\n    for (const other of others) {\n      if (!other.has(value)) {\n        values.delete(value);\n        continue out;\n      }\n    }\n  }\n  return values;\n}\n\nfunction set(values) {\n  return values instanceof InternSet ? values : new InternSet(values);\n}\n","export default function superset(values, other) {\n  const iterator = values[Symbol.iterator](), set = new Set();\n  for (const o of other) {\n    const io = intern(o);\n    if (set.has(io)) continue;\n    let value, done;\n    while (({value, done} = iterator.next())) {\n      if (done) return false;\n      const ivalue = intern(value);\n      set.add(ivalue);\n      if (Object.is(io, ivalue)) break;\n    }\n  }\n  return true;\n}\n\nfunction intern(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","import superset from \"./superset.js\";\n\nexport default function subset(values, other) {\n  return superset(other, values);\n}\n","import {InternSet} from \"internmap\";\n\nexport default function union(...others) {\n  const set = new InternSet();\n  for (const other of others) {\n    for (const o of other) {\n      set.add(o);\n    }\n  }\n  return set;\n}\n","export default function(x) {\n  return x;\n}\n","import identity from \"./identity.js\";\n\nvar top = 1,\n    right = 2,\n    bottom = 3,\n    left = 4,\n    epsilon = 1e-6;\n\nfunction translateX(x) {\n  return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n  return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n  return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n  offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n  if (scale.round()) offset = Math.round(offset);\n  return d => +scale(d) + offset;\n}\n\nfunction entering() {\n  return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n  var tickArguments = [],\n      tickValues = null,\n      tickFormat = null,\n      tickSizeInner = 6,\n      tickSizeOuter = 6,\n      tickPadding = 3,\n      offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n      k = orient === top || orient === left ? -1 : 1,\n      x = orient === left || orient === right ? \"x\" : \"y\",\n      transform = orient === top || orient === bottom ? translateX : translateY;\n\n  function axis(context) {\n    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n        spacing = Math.max(tickSizeInner, 0) + tickPadding,\n        range = scale.range(),\n        range0 = +range[0] + offset,\n        range1 = +range[range.length - 1] + offset,\n        position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n        selection = context.selection ? context.selection() : context,\n        path = selection.selectAll(\".domain\").data([null]),\n        tick = selection.selectAll(\".tick\").data(values, scale).order(),\n        tickExit = tick.exit(),\n        tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n        line = tick.select(\"line\"),\n        text = tick.select(\"text\");\n\n    path = path.merge(path.enter().insert(\"path\", \".tick\")\n        .attr(\"class\", \"domain\")\n        .attr(\"stroke\", \"currentColor\"));\n\n    tick = tick.merge(tickEnter);\n\n    line = line.merge(tickEnter.append(\"line\")\n        .attr(\"stroke\", \"currentColor\")\n        .attr(x + \"2\", k * tickSizeInner));\n\n    text = text.merge(tickEnter.append(\"text\")\n        .attr(\"fill\", \"currentColor\")\n        .attr(x, k * spacing)\n        .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n    if (context !== selection) {\n      path = path.transition(context);\n      tick = tick.transition(context);\n      line = line.transition(context);\n      text = text.transition(context);\n\n      tickExit = tickExit.transition(context)\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n      tickEnter\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n    }\n\n    tickExit.remove();\n\n    path\n        .attr(\"d\", orient === left || orient === right\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n    tick\n        .attr(\"opacity\", 1)\n        .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n    line\n        .attr(x + \"2\", k * tickSizeInner);\n\n    text\n        .attr(x, k * spacing)\n        .text(format);\n\n    selection.filter(entering)\n        .attr(\"fill\", \"none\")\n        .attr(\"font-size\", 10)\n        .attr(\"font-family\", \"sans-serif\")\n        .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n    selection\n        .each(function() { this.__axis = position; });\n  }\n\n  axis.scale = function(_) {\n    return arguments.length ? (scale = _, axis) : scale;\n  };\n\n  axis.ticks = function() {\n    return tickArguments = Array.from(arguments), axis;\n  };\n\n  axis.tickArguments = function(_) {\n    return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n  };\n\n  axis.tickValues = function(_) {\n    return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n  };\n\n  axis.tickFormat = function(_) {\n    return arguments.length ? (tickFormat = _, axis) : tickFormat;\n  };\n\n  axis.tickSize = function(_) {\n    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeInner = function(_) {\n    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeOuter = function(_) {\n    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n  };\n\n  axis.tickPadding = function(_) {\n    return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n  };\n\n  axis.offset = function(_) {\n    return arguments.length ? (offset = +_, axis) : offset;\n  };\n\n  return axis;\n}\n\nexport function axisTop(scale) {\n  return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n  return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n  return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n  return axis(left, scale);\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\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];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n","export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nexport function childMatcher(selector) {\n  return function(node) {\n    return node.matches(selector);\n  };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n  return function() {\n    return find.call(this.children, match);\n  };\n}\n\nfunction childFirst() {\n  return this.firstElementChild;\n}\n\nexport default function(match) {\n  return this.select(match == null ? childFirst\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n  return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n  return function() {\n    return filter.call(this.children, match);\n  };\n}\n\nexport default function(match) {\n  return this.selectAll(match == null ? children\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","export default function(update) {\n  return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = new Map,\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n      if (nodeByKeyValue.has(keyValue)) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue.set(keyValue, node);\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = key.call(parent, data[i], i, data) + \"\";\n    if (node = nodeByKeyValue.get(keyValue)) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue.delete(keyValue);\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction datum(node) {\n  return node.__data__;\n}\n\nexport default function(value, key) {\n  if (!arguments.length) return Array.from(this, datum);\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n  return typeof data === \"object\" && \"length\" in data\n    ? data // Array, TypedArray, NodeList, array-like\n    : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n","function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n","function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n","function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n","function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n","function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n","function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n","function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","function contextListener(listener) {\n  return function(event) {\n    listener.call(this, event, this.__data__);\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, options) {\n  return function() {\n    var on = this.__on, o, listener = contextListener(value);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, options);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, options) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n  return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n  return this;\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  selectChild: selection_selectChild,\n  selectChildren: selection_selectChildren,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  selection: selection_selection,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch,\n  [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n  return function() {\n    return array(select.apply(this, arguments));\n  };\n}\n\nexport default function(select) {\n  if (typeof select === \"function\") select = arrayAll(select);\n  else select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  if (typeof onenter === \"function\") {\n    enter = onenter(enter);\n    if (enter) enter = enter.selection();\n  } else {\n    enter = enter.append(onenter + \"\");\n  }\n  if (onupdate != null) {\n    update = onupdate(update);\n    if (update) update = update.selection();\n  }\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n  var selection = context.selection ? context.selection() : context;\n\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) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n","export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n","export default function() {\n  return Array.from(this);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n","export default function() {\n  let size = 0;\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\n  return size;\n}\n","export default function() {\n  return !this.node();\n}\n","export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n","export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n","export default function*() {\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) yield node;\n    }\n  }\n}\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n  } else {\n    root.__noselect = root.style.MozUserSelect;\n    root.style.MozUserSelect = \"none\";\n  }\n}\n\nexport function yesdrag(view, noclick) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", null);\n  if (noclick) {\n    selection.on(\"click.drag\", noevent, nonpassivecapture);\n    setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n  }\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", null);\n  } else {\n    root.style.MozUserSelect = root.__noselect;\n    delete root.__noselect;\n  }\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\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\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\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)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function(event) {\n  let sourceEvent;\n  while (sourceEvent = event.sourceEvent) event = sourceEvent;\n  return event;\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n  event = sourceEvent(event);\n  if (node === undefined) node = event.currentTarget;\n  if (node) {\n    var svg = node.ownerSVGElement || node;\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      point.x = event.clientX, point.y = event.clientY;\n      point = point.matrixTransform(node.getScreenCTM().inverse());\n      return [point.x, point.y];\n    }\n    if (node.getBoundingClientRect) {\n      var rect = node.getBoundingClientRect();\n      return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n    }\n  }\n  return [event.pageX, event.pageY];\n}\n","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  selectChild: selection_prototype.selectChild,\n  selectChildren: selection_prototype.selectChildren,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  easeVarying: transition_easeVarying,\n  end: transition_end,\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\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) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n","function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n","function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (typeof v !== \"function\") throw new Error;\n    set(this, id).ease = v;\n  };\n}\n\nexport default function(value) {\n  if (typeof value !== \"function\") throw new Error;\n  return this.each(easeVarying(this._id, value));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we’re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n\n    // The selection was empty, resolve end immediately\n    if (size === 0) resolve();\n  });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      throw new Error(`transition ${id} not found`);\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n","import {Transition} from \"./transition/index.js\";\nimport {SCHEDULED} from \"./transition/schedule.js\";\n\nvar root = [null];\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      i;\n\n  if (schedules) {\n    name = name == null ? null : name + \"\";\n    for (i in schedules) {\n      if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n        return new Transition([[node]], root, name, +i);\n      }\n    }\n  }\n\n  return null;\n}\n","export default x => () => x;\n","export default function BrushEvent(type, {\n  sourceEvent,\n  target,\n  selection,\n  mode,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    selection: {value: selection, enumerable: true, configurable: true},\n    mode: {value: mode, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n","export function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {pointer, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n    MODE_SPACE = {name: \"space\"},\n    MODE_HANDLE = {name: \"handle\"},\n    MODE_CENTER = {name: \"center\"};\n\nconst {abs, max, min} = Math;\n\nfunction number1(e) {\n  return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n  return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n  name: \"x\",\n  handles: [\"w\", \"e\"].map(type),\n  input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n  name: \"y\",\n  handles: [\"n\", \"s\"].map(type),\n  input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n  name: \"xy\",\n  handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n  input: function(xy) { return xy == null ? null : number2(xy); },\n  output: function(xy) { return xy; }\n};\n\nvar cursors = {\n  overlay: \"crosshair\",\n  selection: \"move\",\n  n: \"ns-resize\",\n  e: \"ew-resize\",\n  s: \"ns-resize\",\n  w: \"ew-resize\",\n  nw: \"nwse-resize\",\n  ne: \"nesw-resize\",\n  se: \"nwse-resize\",\n  sw: \"nesw-resize\"\n};\n\nvar flipX = {\n  e: \"w\",\n  w: \"e\",\n  nw: \"ne\",\n  ne: \"nw\",\n  se: \"sw\",\n  sw: \"se\"\n};\n\nvar flipY = {\n  n: \"s\",\n  s: \"n\",\n  nw: \"sw\",\n  ne: \"se\",\n  se: \"ne\",\n  sw: \"nw\"\n};\n\nvar signsX = {\n  overlay: +1,\n  selection: +1,\n  n: null,\n  e: +1,\n  s: null,\n  w: -1,\n  nw: -1,\n  ne: +1,\n  se: +1,\n  sw: -1\n};\n\nvar signsY = {\n  overlay: +1,\n  selection: +1,\n  n: -1,\n  e: null,\n  s: +1,\n  w: null,\n  nw: -1,\n  ne: -1,\n  se: +1,\n  sw: +1\n};\n\nfunction type(t) {\n  return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n  var svg = this.ownerSVGElement || this;\n  if (svg.hasAttribute(\"viewBox\")) {\n    svg = svg.viewBox.baseVal;\n    return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n  }\n  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local(node) {\n  while (!node.__brush) if (!(node = node.parentNode)) return;\n  return node.__brush;\n}\n\nfunction empty(extent) {\n  return extent[0][0] === extent[1][0]\n      || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n  var state = node.__brush;\n  return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n  return brush(X);\n}\n\nexport function brushY() {\n  return brush(Y);\n}\n\nexport default function() {\n  return brush(XY);\n}\n\nfunction brush(dim) {\n  var extent = defaultExtent,\n      filter = defaultFilter,\n      touchable = defaultTouchable,\n      keys = true,\n      listeners = dispatch(\"start\", \"brush\", \"end\"),\n      handleSize = 6,\n      touchending;\n\n  function brush(group) {\n    var overlay = group\n        .property(\"__brush\", initialize)\n      .selectAll(\".overlay\")\n      .data([type(\"overlay\")]);\n\n    overlay.enter().append(\"rect\")\n        .attr(\"class\", \"overlay\")\n        .attr(\"pointer-events\", \"all\")\n        .attr(\"cursor\", cursors.overlay)\n      .merge(overlay)\n        .each(function() {\n          var extent = local(this).extent;\n          select(this)\n              .attr(\"x\", extent[0][0])\n              .attr(\"y\", extent[0][1])\n              .attr(\"width\", extent[1][0] - extent[0][0])\n              .attr(\"height\", extent[1][1] - extent[0][1]);\n        });\n\n    group.selectAll(\".selection\")\n      .data([type(\"selection\")])\n      .enter().append(\"rect\")\n        .attr(\"class\", \"selection\")\n        .attr(\"cursor\", cursors.selection)\n        .attr(\"fill\", \"#777\")\n        .attr(\"fill-opacity\", 0.3)\n        .attr(\"stroke\", \"#fff\")\n        .attr(\"shape-rendering\", \"crispEdges\");\n\n    var handle = group.selectAll(\".handle\")\n      .data(dim.handles, function(d) { return d.type; });\n\n    handle.exit().remove();\n\n    handle.enter().append(\"rect\")\n        .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n        .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n    group\n        .each(redraw)\n        .attr(\"fill\", \"none\")\n        .attr(\"pointer-events\", \"all\")\n        .on(\"mousedown.brush\", started)\n      .filter(touchable)\n        .on(\"touchstart.brush\", started)\n        .on(\"touchmove.brush\", touchmoved)\n        .on(\"touchend.brush touchcancel.brush\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  brush.move = function(group, selection, event) {\n    if (group.tween) {\n      group\n          .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\n          .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\n          .tween(\"brush\", function() {\n            var that = this,\n                state = that.__brush,\n                emit = emitter(that, arguments),\n                selection0 = state.selection,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n                i = interpolate(selection0, selection1);\n\n            function tween(t) {\n              state.selection = t === 1 && selection1 === null ? null : i(t);\n              redraw.call(that);\n              emit.brush();\n            }\n\n            return selection0 !== null && selection1 !== null ? tween : tween(1);\n          });\n    } else {\n      group\n          .each(function() {\n            var that = this,\n                args = arguments,\n                state = that.__brush,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n                emit = emitter(that, args).beforestart();\n\n            interrupt(that);\n            state.selection = selection1 === null ? null : selection1;\n            redraw.call(that);\n            emit.start(event).brush(event).end(event);\n          });\n    }\n  };\n\n  brush.clear = function(group, event) {\n    brush.move(group, null, event);\n  };\n\n  function redraw() {\n    var group = select(this),\n        selection = local(this).selection;\n\n    if (selection) {\n      group.selectAll(\".selection\")\n          .style(\"display\", null)\n          .attr(\"x\", selection[0][0])\n          .attr(\"y\", selection[0][1])\n          .attr(\"width\", selection[1][0] - selection[0][0])\n          .attr(\"height\", selection[1][1] - selection[0][1]);\n\n      group.selectAll(\".handle\")\n          .style(\"display\", null)\n          .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n          .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n          .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n          .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n    }\n\n    else {\n      group.selectAll(\".selection,.handle\")\n          .style(\"display\", \"none\")\n          .attr(\"x\", null)\n          .attr(\"y\", null)\n          .attr(\"width\", null)\n          .attr(\"height\", null);\n    }\n  }\n\n  function emitter(that, args, clean) {\n    var emit = that.__brush.emitter;\n    return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n  }\n\n  function Emitter(that, args, clean) {\n    this.that = that;\n    this.args = args;\n    this.state = that.__brush;\n    this.active = 0;\n    this.clean = clean;\n  }\n\n  Emitter.prototype = {\n    beforestart: function() {\n      if (++this.active === 1) this.state.emitter = this, this.starting = true;\n      return this;\n    },\n    start: function(event, mode) {\n      if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\n      else this.emit(\"brush\", event);\n      return this;\n    },\n    brush: function(event, mode) {\n      this.emit(\"brush\", event, mode);\n      return this;\n    },\n    end: function(event, mode) {\n      if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\n      return this;\n    },\n    emit: function(type, event, mode) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new BrushEvent(type, {\n          sourceEvent: event,\n          target: brush,\n          selection: dim.output(this.state.selection),\n          mode,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function started(event) {\n    if (touchending && !event.touches) return;\n    if (!filter.apply(this, arguments)) return;\n\n    var that = this,\n        type = event.target.__data__.type,\n        mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n        signX = dim === Y ? null : signsX[type],\n        signY = dim === X ? null : signsY[type],\n        state = local(that),\n        extent = state.extent,\n        selection = state.selection,\n        W = extent[0][0], w0, w1,\n        N = extent[0][1], n0, n1,\n        E = extent[1][0], e0, e1,\n        S = extent[1][1], s0, s1,\n        dx = 0,\n        dy = 0,\n        moving,\n        shifting = signX && signY && keys && event.shiftKey,\n        lockX,\n        lockY,\n        points = Array.from(event.touches || [event], t => {\n          const i = t.identifier;\n          t = pointer(t, that);\n          t.point0 = t.slice();\n          t.identifier = i;\n          return t;\n        });\n\n    interrupt(that);\n    var emit = emitter(that, arguments, true).beforestart();\n\n    if (type === \"overlay\") {\n      if (selection) moving = true;\n      const pts = [points[0], points[1] || points[0]];\n      state.selection = selection = [[\n          w0 = dim === Y ? W : min(pts[0][0], pts[1][0]),\n          n0 = dim === X ? N : min(pts[0][1], pts[1][1])\n        ], [\n          e0 = dim === Y ? E : max(pts[0][0], pts[1][0]),\n          s0 = dim === X ? S : max(pts[0][1], pts[1][1])\n        ]];\n      if (points.length > 1) move(event);\n    } else {\n      w0 = selection[0][0];\n      n0 = selection[0][1];\n      e0 = selection[1][0];\n      s0 = selection[1][1];\n    }\n\n    w1 = w0;\n    n1 = n0;\n    e1 = e0;\n    s1 = s0;\n\n    var group = select(that)\n        .attr(\"pointer-events\", \"none\");\n\n    var overlay = group.selectAll(\".overlay\")\n        .attr(\"cursor\", cursors[type]);\n\n    if (event.touches) {\n      emit.moved = moved;\n      emit.ended = ended;\n    } else {\n      var view = select(event.view)\n          .on(\"mousemove.brush\", moved, true)\n          .on(\"mouseup.brush\", ended, true);\n      if (keys) view\n          .on(\"keydown.brush\", keydowned, true)\n          .on(\"keyup.brush\", keyupped, true)\n\n      dragDisable(event.view);\n    }\n\n    redraw.call(that);\n    emit.start(event, mode.name);\n\n    function moved(event) {\n      for (const p of event.changedTouches || [event]) {\n        for (const d of points)\n          if (d.identifier === p.identifier) d.cur = pointer(p, that);\n      }\n      if (shifting && !lockX && !lockY && points.length === 1) {\n        const point = points[0];\n        if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))\n          lockY = true;\n        else\n          lockX = true;\n      }\n      for (const point of points)\n        if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n      moving = true;\n      noevent(event);\n      move(event);\n    }\n\n    function move(event) {\n      const point = points[0], point0 = point.point0;\n      var t;\n\n      dx = point[0] - point0[0];\n      dy = point[1] - point0[1];\n\n      switch (mode) {\n        case MODE_SPACE:\n        case MODE_DRAG: {\n          if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n          if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n          break;\n        }\n        case MODE_HANDLE: {\n          if (points[1]) {\n            if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n            if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n          } else {\n            if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n            else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n            if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n            else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n          }\n          break;\n        }\n        case MODE_CENTER: {\n          if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n          if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\n          break;\n        }\n      }\n\n      if (e1 < w1) {\n        signX *= -1;\n        t = w0, w0 = e0, e0 = t;\n        t = w1, w1 = e1, e1 = t;\n        if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n      }\n\n      if (s1 < n1) {\n        signY *= -1;\n        t = n0, n0 = s0, s0 = t;\n        t = n1, n1 = s1, s1 = t;\n        if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n      }\n\n      if (state.selection) selection = state.selection; // May be set by brush.move!\n      if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n      if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n      if (selection[0][0] !== w1\n          || selection[0][1] !== n1\n          || selection[1][0] !== e1\n          || selection[1][1] !== s1) {\n        state.selection = [[w1, n1], [e1, s1]];\n        redraw.call(that);\n        emit.brush(event, mode.name);\n      }\n    }\n\n    function ended(event) {\n      nopropagation(event);\n      if (event.touches) {\n        if (event.touches.length) return;\n        if (touchending) clearTimeout(touchending);\n        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n      } else {\n        dragEnable(event.view, moving);\n        view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n      }\n      group.attr(\"pointer-events\", \"all\");\n      overlay.attr(\"cursor\", cursors.overlay);\n      if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n      if (empty(selection)) state.selection = null, redraw.call(that);\n      emit.end(event, mode.name);\n    }\n\n    function keydowned(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          shifting = signX && signY;\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_HANDLE) {\n            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n            mode = MODE_CENTER;\n            move(event);\n          }\n          break;\n        }\n        case 32: { // SPACE; takes priority over ALT\n          if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n            mode = MODE_SPACE;\n            overlay.attr(\"cursor\", cursors.selection);\n            move(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n\n    function keyupped(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          if (shifting) {\n            lockX = lockY = shifting = false;\n            move(event);\n          }\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n            mode = MODE_HANDLE;\n            move(event);\n          }\n          break;\n        }\n        case 32: { // SPACE\n          if (mode === MODE_SPACE) {\n            if (event.altKey) {\n              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n              mode = MODE_CENTER;\n            } else {\n              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n              mode = MODE_HANDLE;\n            }\n            overlay.attr(\"cursor\", cursors[type]);\n            move(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n  }\n\n  function touchmoved(event) {\n    emitter(this, arguments).moved(event);\n  }\n\n  function touchended(event) {\n    emitter(this, arguments).ended(event);\n  }\n\n  function initialize() {\n    var state = this.__brush || {selection: null};\n    state.extent = number2(extent.apply(this, arguments));\n    state.dim = dim;\n    return state;\n  }\n\n  brush.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n  };\n\n  brush.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n  };\n\n  brush.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n  };\n\n  brush.handleSize = function(_) {\n    return arguments.length ? (handleSize = +_, brush) : handleSize;\n  };\n\n  brush.keyModifiers = function(_) {\n    return arguments.length ? (keys = !!_, brush) : keys;\n  };\n\n  brush.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? brush : value;\n  };\n\n  return brush;\n}\n","export var abs = Math.abs;\nexport var cos = Math.cos;\nexport var sin = Math.sin;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = pi * 2;\nexport var max = Math.max;\nexport var epsilon = 1e-12;\n","import {max, tau} from \"./math.js\";\n\nfunction range(i, j) {\n  return Array.from({length: j - i}, (_, k) => i + k);\n}\n\nfunction compareValue(compare) {\n  return function(a, b) {\n    return compare(\n      a.source.value + a.target.value,\n      b.source.value + b.target.value\n    );\n  };\n}\n\nexport default function() {\n  return chord(false, false);\n}\n\nexport function chordTranspose() {\n  return chord(false, true);\n}\n\nexport function chordDirected() {\n  return chord(true, false);\n}\n\nfunction chord(directed, transpose) {\n  var padAngle = 0,\n      sortGroups = null,\n      sortSubgroups = null,\n      sortChords = null;\n\n  function chord(matrix) {\n    var n = matrix.length,\n        groupSums = new Array(n),\n        groupIndex = range(0, n),\n        chords = new Array(n * n),\n        groups = new Array(n),\n        k = 0, dx;\n\n    matrix = Float64Array.from({length: n * n}, transpose\n        ? (_, i) => matrix[i % n][i / n | 0]\n        : (_, i) => matrix[i / n | 0][i % n]);\n\n    // Compute the scaling factor from value to angle in [0, 2pi].\n    for (let i = 0; i < n; ++i) {\n      let x = 0;\n      for (let j = 0; j < n; ++j) x += matrix[i * n + j] + directed * matrix[j * n + i];\n      k += groupSums[i] = x;\n    }\n    k = max(0, tau - padAngle * n) / k;\n    dx = k ? padAngle : tau / n;\n\n    // Compute the angles for each group and constituent chord.\n    {\n      let x = 0;\n      if (sortGroups) groupIndex.sort((a, b) => sortGroups(groupSums[a], groupSums[b]));\n      for (const i of groupIndex) {\n        const x0 = x;\n        if (directed) {\n          const subgroupIndex = range(~n + 1, n).filter(j => j < 0 ? matrix[~j * n + i] : matrix[i * n + j]);\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]));\n          for (const j of subgroupIndex) {\n            if (j < 0) {\n              const chord = chords[~j * n + i] || (chords[~j * n + i] = {source: null, target: null});\n              chord.target = {index: i, startAngle: x, endAngle: x += matrix[~j * n + i] * k, value: matrix[~j * n + i]};\n            } else {\n              const chord = chords[i * n + j] || (chords[i * n + j] = {source: null, target: null});\n              chord.source = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n            }\n          }\n          groups[i] = {index: i, startAngle: x0, endAngle: x, value: groupSums[i]};\n        } else {\n          const subgroupIndex = range(0, n).filter(j => matrix[i * n + j] || matrix[j * n + i]);\n          if (sortSubgroups) subgroupIndex.sort((a, b) => sortSubgroups(matrix[i * n + a], matrix[i * n + b]));\n          for (const j of subgroupIndex) {\n            let chord;\n            if (i < j) {\n              chord = chords[i * n + j] || (chords[i * n + j] = {source: null, target: null});\n              chord.source = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n            } else {\n              chord = chords[j * n + i] || (chords[j * n + i] = {source: null, target: null});\n              chord.target = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n              if (i === j) chord.source = chord.target;\n            }\n            if (chord.source && chord.target && chord.source.value < chord.target.value) {\n              const source = chord.source;\n              chord.source = chord.target;\n              chord.target = source;\n            }\n          }\n          groups[i] = {index: i, startAngle: x0, endAngle: x, value: groupSums[i]};\n        }\n        x += dx;\n      }\n    }\n\n    // Remove empty chords.\n    chords = Object.values(chords);\n    chords.groups = groups;\n    return sortChords ? chords.sort(sortChords) : chords;\n  }\n\n  chord.padAngle = function(_) {\n    return arguments.length ? (padAngle = max(0, _), chord) : padAngle;\n  };\n\n  chord.sortGroups = function(_) {\n    return arguments.length ? (sortGroups = _, chord) : sortGroups;\n  };\n\n  chord.sortSubgroups = function(_) {\n    return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n  };\n\n  chord.sortChords = function(_) {\n    return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n  };\n\n  return chord;\n}\n","const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n  this._ += strings[0];\n  for (let i = 1, n = strings.length; i < n; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  let d = Math.floor(digits);\n  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  const k = 10 ** d;\n  return function(strings) {\n    this._ += strings[0];\n    for (let i = 1, n = strings.length; i < n; ++i) {\n      this._ += Math.round(arguments[i] * k) / k + strings[i];\n    }\n  };\n}\n\nexport class Path {\n  constructor(digits) {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n    this._append = digits == null ? append : appendRound(digits);\n  }\n  moveTo(x, y) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._append`Z`;\n    }\n  }\n  lineTo(x, y) {\n    this._append`L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  quadraticCurveTo(x1, y1, x, y) {\n    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  bezierCurveTo(x1, y1, x2, y2, x, y) {\n    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arcTo(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._append`M${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._append`L${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      let x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n      }\n\n      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n    }\n  }\n  arc(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._append`M${x0},${y0}`;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._append`L${x0},${y0}`;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\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}`;\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n    }\n  }\n  rect(x, y, w, h) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n  }\n  toString() {\n    return this._;\n  }\n}\n\nexport function path() {\n  return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n  return new Path(+digits);\n}\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import {path} from \"d3-path\";\nimport {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport {abs, cos, epsilon, halfPi, sin} from \"./math.js\";\n\nfunction defaultSource(d) {\n  return d.source;\n}\n\nfunction defaultTarget(d) {\n  return d.target;\n}\n\nfunction defaultRadius(d) {\n  return d.radius;\n}\n\nfunction defaultStartAngle(d) {\n  return d.startAngle;\n}\n\nfunction defaultEndAngle(d) {\n  return d.endAngle;\n}\n\nfunction defaultPadAngle() {\n  return 0;\n}\n\nfunction defaultArrowheadRadius() {\n  return 10;\n}\n\nfunction ribbon(headRadius) {\n  var source = defaultSource,\n      target = defaultTarget,\n      sourceRadius = defaultRadius,\n      targetRadius = defaultRadius,\n      startAngle = defaultStartAngle,\n      endAngle = defaultEndAngle,\n      padAngle = defaultPadAngle,\n      context = null;\n\n  function ribbon() {\n    var buffer,\n        s = source.apply(this, arguments),\n        t = target.apply(this, arguments),\n        ap = padAngle.apply(this, arguments) / 2,\n        argv = slice.call(arguments),\n        sr = +sourceRadius.apply(this, (argv[0] = s, argv)),\n        sa0 = startAngle.apply(this, argv) - halfPi,\n        sa1 = endAngle.apply(this, argv) - halfPi,\n        tr = +targetRadius.apply(this, (argv[0] = t, argv)),\n        ta0 = startAngle.apply(this, argv) - halfPi,\n        ta1 = endAngle.apply(this, argv) - halfPi;\n\n    if (!context) context = buffer = path();\n\n    if (ap > epsilon) {\n      if (abs(sa1 - sa0) > ap * 2 + epsilon) sa1 > sa0 ? (sa0 += ap, sa1 -= ap) : (sa0 -= ap, sa1 += ap);\n      else sa0 = sa1 = (sa0 + sa1) / 2;\n      if (abs(ta1 - ta0) > ap * 2 + epsilon) ta1 > ta0 ? (ta0 += ap, ta1 -= ap) : (ta0 -= ap, ta1 += ap);\n      else ta0 = ta1 = (ta0 + ta1) / 2;\n    }\n\n    context.moveTo(sr * cos(sa0), sr * sin(sa0));\n    context.arc(0, 0, sr, sa0, sa1);\n    if (sa0 !== ta0 || sa1 !== ta1) {\n      if (headRadius) {\n        var hr = +headRadius.apply(this, arguments), tr2 = tr - hr, ta2 = (ta0 + ta1) / 2;\n        context.quadraticCurveTo(0, 0, tr2 * cos(ta0), tr2 * sin(ta0));\n        context.lineTo(tr * cos(ta2), tr * sin(ta2));\n        context.lineTo(tr2 * cos(ta1), tr2 * sin(ta1));\n      } else {\n        context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\n        context.arc(0, 0, tr, ta0, ta1);\n      }\n    }\n    context.quadraticCurveTo(0, 0, sr * cos(sa0), sr * sin(sa0));\n    context.closePath();\n\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  if (headRadius) ribbon.headRadius = function(_) {\n    return arguments.length ? (headRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : headRadius;\n  };\n\n  ribbon.radius = function(_) {\n    return arguments.length ? (sourceRadius = targetRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : sourceRadius;\n  };\n\n  ribbon.sourceRadius = function(_) {\n    return arguments.length ? (sourceRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : sourceRadius;\n  };\n\n  ribbon.targetRadius = function(_) {\n    return arguments.length ? (targetRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : targetRadius;\n  };\n\n  ribbon.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : startAngle;\n  };\n\n  ribbon.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : endAngle;\n  };\n\n  ribbon.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : padAngle;\n  };\n\n  ribbon.source = function(_) {\n    return arguments.length ? (source = _, ribbon) : source;\n  };\n\n  ribbon.target = function(_) {\n    return arguments.length ? (target = _, ribbon) : target;\n  };\n\n  ribbon.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\n  };\n\n  return ribbon;\n}\n\nexport default function() {\n  return ribbon();\n}\n\nexport function ribbonArrow() {\n  return ribbon(defaultArrowheadRadius);\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n    Xn = 0.96422,\n    Yn = 1,\n    Zn = 0.82521,\n    t0 = 4 / 29,\n    t1 = 6 / 29,\n    t2 = 3 * t1 * t1,\n    t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n  if (o instanceof Hcl) return hcl2lab(o);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = rgb2lrgb(o.r),\n      g = rgb2lrgb(o.g),\n      b = rgb2lrgb(o.b),\n      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n  if (r === g && g === b) x = z = y; else {\n    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n  }\n  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n  this.l = +l;\n  this.a = +a;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n  brighter(k) {\n    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  darker(k) {\n    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  rgb() {\n    var y = (this.l + 16) / 116,\n        x = isNaN(this.a) ? y : y + this.a / 500,\n        z = isNaN(this.b) ? y : y - this.b / 200;\n    x = Xn * lab2xyz(x);\n    y = Yn * lab2xyz(y);\n    z = Zn * lab2xyz(z);\n    return new Rgb(\n      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n      this.opacity\n    );\n  }\n}));\n\nfunction xyz2lab(t) {\n  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n  return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n  if (!(o instanceof Lab)) o = labConvert(o);\n  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n  var h = Math.atan2(o.b, o.a) * degrees;\n  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n  this.h = +h;\n  this.c = +c;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n  var h = o.h * radians;\n  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n  brighter(k) {\n    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n  },\n  darker(k) {\n    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n  },\n  rgb() {\n    return hcl2lab(this).rgb();\n  }\n}));\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n    B = +1.78277,\n    C = -0.29227,\n    D = -0.90649,\n    E = +1.97294,\n    ED = E * D,\n    EB = E * B,\n    BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n      bl = b - l,\n      k = (E * (g - l) - C * bl) / D,\n      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n      h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n        l = +this.l,\n        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n        cosh = Math.cos(h),\n        sinh = Math.sin(h);\n    return new Rgb(\n      255 * (l + a * (A * cosh + B * sinh)),\n      255 * (l + a * (C * cosh + D * sinh)),\n      255 * (l + a * (E * cosh)),\n      this.opacity\n    );\n  }\n}));\n","var array = Array.prototype;\n\nexport var slice = array.slice;\n","export default function(a, b) {\n  return a - b;\n}\n","export default x => () => x;\n","export default function(ring, hole) {\n  var i = -1, n = hole.length, c;\n  while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n  return 0;\n}\n\nfunction ringContains(ring, point) {\n  var x = point[0], y = point[1], contains = -1;\n  for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n    var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n    if (segmentContains(pi, pj, point)) return 0;\n    if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n  }\n  return contains;\n}\n\nfunction segmentContains(a, b, c) {\n  var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n  return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n  return p <= q && q <= r || r <= q && q <= p;\n}\n","export default function() {}\n","import {extent, nice, thresholdSturges, ticks} from \"d3-array\";\nimport {slice} from \"./array.js\";\nimport ascending from \"./ascending.js\";\nimport area from \"./area.js\";\nimport constant from \"./constant.js\";\nimport contains from \"./contains.js\";\nimport noop from \"./noop.js\";\n\nvar cases = [\n  [],\n  [[[1.0, 1.5], [0.5, 1.0]]],\n  [[[1.5, 1.0], [1.0, 1.5]]],\n  [[[1.5, 1.0], [0.5, 1.0]]],\n  [[[1.0, 0.5], [1.5, 1.0]]],\n  [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n  [[[1.0, 0.5], [1.0, 1.5]]],\n  [[[1.0, 0.5], [0.5, 1.0]]],\n  [[[0.5, 1.0], [1.0, 0.5]]],\n  [[[1.0, 1.5], [1.0, 0.5]]],\n  [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n  [[[1.5, 1.0], [1.0, 0.5]]],\n  [[[0.5, 1.0], [1.5, 1.0]]],\n  [[[1.0, 1.5], [1.5, 1.0]]],\n  [[[0.5, 1.0], [1.0, 1.5]]],\n  []\n];\n\nexport default function() {\n  var dx = 1,\n      dy = 1,\n      threshold = thresholdSturges,\n      smooth = smoothLinear;\n\n  function contours(values) {\n    var tz = threshold(values);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      const e = extent(values, finite);\n      tz = ticks(...nice(e[0], e[1], tz), tz);\n      while (tz[tz.length - 1] >= e[1]) tz.pop();\n      while (tz[1] < e[0]) tz.shift();\n    } else {\n      tz = tz.slice().sort(ascending);\n    }\n\n    return tz.map(value => contour(values, value));\n  }\n\n  // Accumulate, smooth contour rings, assign holes to exterior rings.\n  // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n  function contour(values, value) {\n    const v = value == null ? NaN : +value;\n    if (isNaN(v)) throw new Error(`invalid value: ${value}`);\n\n    var polygons = [],\n        holes = [];\n\n    isorings(values, v, function(ring) {\n      smooth(ring, values, v);\n      if (area(ring) > 0) polygons.push([ring]);\n      else holes.push(ring);\n    });\n\n    holes.forEach(function(hole) {\n      for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n        if (contains((polygon = polygons[i])[0], hole) !== -1) {\n          polygon.push(hole);\n          return;\n        }\n      }\n    });\n\n    return {\n      type: \"MultiPolygon\",\n      value: value,\n      coordinates: polygons\n    };\n  }\n\n  // Marching squares with isolines stitched into rings.\n  // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n  function isorings(values, value, callback) {\n    var fragmentByStart = new Array,\n        fragmentByEnd = new Array,\n        x, y, t0, t1, t2, t3;\n\n    // Special case for the first row (y = -1, t2 = t3 = 0).\n    x = y = -1;\n    t1 = above(values[0], value);\n    cases[t1 << 1].forEach(stitch);\n    while (++x < dx - 1) {\n      t0 = t1, t1 = above(values[x + 1], value);\n      cases[t0 | t1 << 1].forEach(stitch);\n    }\n    cases[t1 << 0].forEach(stitch);\n\n    // General case for the intermediate rows.\n    while (++y < dy - 1) {\n      x = -1;\n      t1 = above(values[y * dx + dx], value);\n      t2 = above(values[y * dx], value);\n      cases[t1 << 1 | t2 << 2].forEach(stitch);\n      while (++x < dx - 1) {\n        t0 = t1, t1 = above(values[y * dx + dx + x + 1], value);\n        t3 = t2, t2 = above(values[y * dx + x + 1], value);\n        cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n      }\n      cases[t1 | t2 << 3].forEach(stitch);\n    }\n\n    // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n    x = -1;\n    t2 = values[y * dx] >= value;\n    cases[t2 << 2].forEach(stitch);\n    while (++x < dx - 1) {\n      t3 = t2, t2 = above(values[y * dx + x + 1], value);\n      cases[t2 << 2 | t3 << 3].forEach(stitch);\n    }\n    cases[t2 << 3].forEach(stitch);\n\n    function stitch(line) {\n      var start = [line[0][0] + x, line[0][1] + y],\n          end = [line[1][0] + x, line[1][1] + y],\n          startIndex = index(start),\n          endIndex = index(end),\n          f, g;\n      if (f = fragmentByEnd[startIndex]) {\n        if (g = fragmentByStart[endIndex]) {\n          delete fragmentByEnd[f.end];\n          delete fragmentByStart[g.start];\n          if (f === g) {\n            f.ring.push(end);\n            callback(f.ring);\n          } else {\n            fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n          }\n        } else {\n          delete fragmentByEnd[f.end];\n          f.ring.push(end);\n          fragmentByEnd[f.end = endIndex] = f;\n        }\n      } else if (f = fragmentByStart[endIndex]) {\n        if (g = fragmentByEnd[startIndex]) {\n          delete fragmentByStart[f.start];\n          delete fragmentByEnd[g.end];\n          if (f === g) {\n            f.ring.push(end);\n            callback(f.ring);\n          } else {\n            fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n          }\n        } else {\n          delete fragmentByStart[f.start];\n          f.ring.unshift(start);\n          fragmentByStart[f.start = startIndex] = f;\n        }\n      } else {\n        fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n      }\n    }\n  }\n\n  function index(point) {\n    return point[0] * 2 + point[1] * (dx + 1) * 4;\n  }\n\n  function smoothLinear(ring, values, value) {\n    ring.forEach(function(point) {\n      var x = point[0],\n          y = point[1],\n          xt = x | 0,\n          yt = y | 0,\n          v1 = valid(values[yt * dx + xt]);\n      if (x > 0 && x < dx && xt === x) {\n        point[0] = smooth1(x, valid(values[yt * dx + xt - 1]), v1, value);\n      }\n      if (y > 0 && y < dy && yt === y) {\n        point[1] = smooth1(y, valid(values[(yt - 1) * dx + xt]), v1, value);\n      }\n    });\n  }\n\n  contours.contour = contour;\n\n  contours.size = function(_) {\n    if (!arguments.length) return [dx, dy];\n    var _0 = Math.floor(_[0]), _1 = Math.floor(_[1]);\n    if (!(_0 >= 0 && _1 >= 0)) throw new Error(\"invalid size\");\n    return dx = _0, dy = _1, contours;\n  };\n\n  contours.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), contours) : threshold;\n  };\n\n  contours.smooth = function(_) {\n    return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n  };\n\n  return contours;\n}\n\n// When computing the extent, ignore infinite values (as well as invalid ones).\nfunction finite(x) {\n  return isFinite(x) ? x : NaN;\n}\n\n// Is the (possibly invalid) x greater than or equal to the (known valid) value?\n// Treat any invalid value as below negative infinity.\nfunction above(x, value) {\n  return x == null ? false : +x >= value;\n}\n\n// During smoothing, treat any invalid value as negative infinity.\nfunction valid(v) {\n  return v == null || isNaN(v = +v) ? -Infinity : v;\n}\n\nfunction smooth1(x, v0, v1, value) {\n  const a = value - v0;\n  const b = v1 - v0;\n  const d = isFinite(a) || isFinite(b) ? a / b : Math.sign(a) / Math.sign(b);\n  return isNaN(d) ? x : x + d - 0.5;\n}\n","export default function(ring) {\n  var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n  while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n  return area;\n}\n","import {blur2, max, ticks} from \"d3-array\";\nimport {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport Contours from \"./contours.js\";\n\nfunction defaultX(d) {\n  return d[0];\n}\n\nfunction defaultY(d) {\n  return d[1];\n}\n\nfunction defaultWeight() {\n  return 1;\n}\n\nexport default function() {\n  var x = defaultX,\n      y = defaultY,\n      weight = defaultWeight,\n      dx = 960,\n      dy = 500,\n      r = 20, // blur radius\n      k = 2, // log2(grid cell size)\n      o = r * 3, // grid offset, to pad for blur\n      n = (dx + o * 2) >> k, // grid width\n      m = (dy + o * 2) >> k, // grid height\n      threshold = constant(20);\n\n  function grid(data) {\n    var values = new Float32Array(n * m),\n        pow2k = Math.pow(2, -k),\n        i = -1;\n\n    for (const d of data) {\n      var xi = (x(d, ++i, data) + o) * pow2k,\n          yi = (y(d, i, data) + o) * pow2k,\n          wi = +weight(d, i, data);\n      if (wi && xi >= 0 && xi < n && yi >= 0 && yi < m) {\n        var x0 = Math.floor(xi),\n            y0 = Math.floor(yi),\n            xt = xi - x0 - 0.5,\n            yt = yi - y0 - 0.5;\n        values[x0 + y0 * n] += (1 - xt) * (1 - yt) * wi;\n        values[x0 + 1 + y0 * n] += xt * (1 - yt) * wi;\n        values[x0 + 1 + (y0 + 1) * n] += xt * yt * wi;\n        values[x0 + (y0 + 1) * n] += (1 - xt) * yt * wi;\n      }\n    }\n\n    blur2({data: values, width: n, height: m}, r * pow2k);\n    return values;\n  }\n\n  function density(data) {\n    var values = grid(data),\n        tz = threshold(values),\n        pow4k = Math.pow(2, 2 * k);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      tz = ticks(Number.MIN_VALUE, max(values) / pow4k, tz);\n    }\n\n    return Contours()\n        .size([n, m])\n        .thresholds(tz.map(d => d * pow4k))\n      (values)\n        .map((c, i) => (c.value = +tz[i], transform(c)));\n  }\n\n  density.contours = function(data) {\n    var values = grid(data),\n        contours = Contours().size([n, m]),\n        pow4k = Math.pow(2, 2 * k),\n        contour = value => {\n          value = +value;\n          var c = transform(contours.contour(values, value * pow4k));\n          c.value = value; // preserve exact threshold value\n          return c;\n        };\n    Object.defineProperty(contour, \"max\", {get: () => max(values) / pow4k});\n    return contour;\n  };\n\n  function transform(geometry) {\n    geometry.coordinates.forEach(transformPolygon);\n    return geometry;\n  }\n\n  function transformPolygon(coordinates) {\n    coordinates.forEach(transformRing);\n  }\n\n  function transformRing(coordinates) {\n    coordinates.forEach(transformPoint);\n  }\n\n  // TODO Optimize.\n  function transformPoint(coordinates) {\n    coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n    coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n  }\n\n  function resize() {\n    o = r * 3;\n    n = (dx + o * 2) >> k;\n    m = (dy + o * 2) >> k;\n    return density;\n  }\n\n  density.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), density) : x;\n  };\n\n  density.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), density) : y;\n  };\n\n  density.weight = function(_) {\n    return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant(+_), density) : weight;\n  };\n\n  density.size = function(_) {\n    if (!arguments.length) return [dx, dy];\n    var _0 = +_[0], _1 = +_[1];\n    if (!(_0 >= 0 && _1 >= 0)) throw new Error(\"invalid size\");\n    return dx = _0, dy = _1, resize();\n  };\n\n  density.cellSize = function(_) {\n    if (!arguments.length) return 1 << k;\n    if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n    return k = Math.floor(Math.log(_) / Math.LN2), resize();\n  };\n\n  density.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), density) : threshold;\n  };\n\n  density.bandwidth = function(_) {\n    if (!arguments.length) return Math.sqrt(r * (r + 1));\n    if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n    return r = (Math.sqrt(4 * _ * _ + 1) - 1) / 2, resize();\n  };\n\n  return density;\n}\n","export const epsilon = 1.1102230246251565e-16;\nexport const splitter = 134217729;\nexport const resulterrbound = (3 + 8 * epsilon) * epsilon;\n\n// fast_expansion_sum_zeroelim routine from oritinal code\nexport function sum(elen, e, flen, f, h) {\n    let Q, Qnew, hh, bvirt;\n    let enow = e[0];\n    let fnow = f[0];\n    let eindex = 0;\n    let findex = 0;\n    if ((fnow > enow) === (fnow > -enow)) {\n        Q = enow;\n        enow = e[++eindex];\n    } else {\n        Q = fnow;\n        fnow = f[++findex];\n    }\n    let hindex = 0;\n    if (eindex < elen && findex < flen) {\n        if ((fnow > enow) === (fnow > -enow)) {\n            Qnew = enow + Q;\n            hh = Q - (Qnew - enow);\n            enow = e[++eindex];\n        } else {\n            Qnew = fnow + Q;\n            hh = Q - (Qnew - fnow);\n            fnow = f[++findex];\n        }\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n        while (eindex < elen && findex < flen) {\n            if ((fnow > enow) === (fnow > -enow)) {\n                Qnew = Q + enow;\n                bvirt = Qnew - Q;\n                hh = Q - (Qnew - bvirt) + (enow - bvirt);\n                enow = e[++eindex];\n            } else {\n                Qnew = Q + fnow;\n                bvirt = Qnew - Q;\n                hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n                fnow = f[++findex];\n            }\n            Q = Qnew;\n            if (hh !== 0) {\n                h[hindex++] = hh;\n            }\n        }\n    }\n    while (eindex < elen) {\n        Qnew = Q + enow;\n        bvirt = Qnew - Q;\n        hh = Q - (Qnew - bvirt) + (enow - bvirt);\n        enow = e[++eindex];\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    while (findex < flen) {\n        Qnew = Q + fnow;\n        bvirt = Qnew - Q;\n        hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n        fnow = f[++findex];\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    if (Q !== 0 || hindex === 0) {\n        h[hindex++] = Q;\n    }\n    return hindex;\n}\n\nexport function sum_three(alen, a, blen, b, clen, c, tmp, out) {\n    return sum(sum(alen, a, blen, b, tmp), tmp, clen, c, out);\n}\n\n// scale_expansion_zeroelim routine from oritinal code\nexport function scale(elen, e, b, h) {\n    let Q, sum, hh, product1, product0;\n    let bvirt, c, ahi, alo, bhi, blo;\n\n    c = splitter * b;\n    bhi = c - (c - b);\n    blo = b - bhi;\n    let enow = e[0];\n    Q = enow * b;\n    c = splitter * enow;\n    ahi = c - (c - enow);\n    alo = enow - ahi;\n    hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);\n    let hindex = 0;\n    if (hh !== 0) {\n        h[hindex++] = hh;\n    }\n    for (let i = 1; i < elen; i++) {\n        enow = e[i];\n        product1 = enow * b;\n        c = splitter * enow;\n        ahi = c - (c - enow);\n        alo = enow - ahi;\n        product0 = alo * blo - (product1 - ahi * bhi - alo * bhi - ahi * blo);\n        sum = Q + product0;\n        bvirt = sum - Q;\n        hh = Q - (sum - bvirt) + (product0 - bvirt);\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n        Q = product1 + sum;\n        hh = sum - (Q - product1);\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    if (Q !== 0 || hindex === 0) {\n        h[hindex++] = Q;\n    }\n    return hindex;\n}\n\nexport function negate(elen, e) {\n    for (let i = 0; i < elen; i++) e[i] = -e[i];\n    return elen;\n}\n\nexport function estimate(elen, e) {\n    let Q = e[0];\n    for (let i = 1; i < elen; i++) Q += e[i];\n    return Q;\n}\n\nexport function vec(n) {\n    return new Float64Array(n);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum} from './util.js';\n\nconst ccwerrboundA = (3 + 16 * epsilon) * epsilon;\nconst ccwerrboundB = (2 + 12 * epsilon) * epsilon;\nconst ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon;\n\nconst B = vec(4);\nconst C1 = vec(8);\nconst C2 = vec(12);\nconst D = vec(16);\nconst u = vec(4);\n\nfunction orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\n    let acxtail, acytail, bcxtail, bcytail;\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    const acx = ax - cx;\n    const bcx = bx - cx;\n    const acy = ay - cy;\n    const bcy = by - cy;\n\n    s1 = acx * bcy;\n    c = splitter * acx;\n    ahi = c - (c - acx);\n    alo = acx - ahi;\n    c = splitter * bcy;\n    bhi = c - (c - bcy);\n    blo = bcy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acy * bcx;\n    c = splitter * acy;\n    ahi = c - (c - acy);\n    alo = acy - ahi;\n    c = splitter * bcx;\n    bhi = c - (c - bcx);\n    blo = bcx - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    B[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    B[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    B[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    B[3] = u3;\n\n    let det = estimate(4, B);\n    let errbound = ccwerrboundB * detsum;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - acx;\n    acxtail = ax - (acx + bvirt) + (bvirt - cx);\n    bvirt = bx - bcx;\n    bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\n    bvirt = ay - acy;\n    acytail = ay - (acy + bvirt) + (bvirt - cy);\n    bvirt = by - bcy;\n    bcytail = by - (bcy + bvirt) + (bvirt - cy);\n\n    if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\n        return det;\n    }\n\n    errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);\n    det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);\n    if (det >= errbound || -det >= errbound) return det;\n\n    s1 = acxtail * bcy;\n    c = splitter * acxtail;\n    ahi = c - (c - acxtail);\n    alo = acxtail - ahi;\n    c = splitter * bcy;\n    bhi = c - (c - bcy);\n    blo = bcy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acytail * bcx;\n    c = splitter * acytail;\n    ahi = c - (c - acytail);\n    alo = acytail - ahi;\n    c = splitter * bcx;\n    bhi = c - (c - bcx);\n    blo = bcx - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const C1len = sum(4, B, 4, u, C1);\n\n    s1 = acx * bcytail;\n    c = splitter * acx;\n    ahi = c - (c - acx);\n    alo = acx - ahi;\n    c = splitter * bcytail;\n    bhi = c - (c - bcytail);\n    blo = bcytail - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acy * bcxtail;\n    c = splitter * acy;\n    ahi = c - (c - acy);\n    alo = acy - ahi;\n    c = splitter * bcxtail;\n    bhi = c - (c - bcxtail);\n    blo = bcxtail - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const C2len = sum(C1len, C1, 4, u, C2);\n\n    s1 = acxtail * bcytail;\n    c = splitter * acxtail;\n    ahi = c - (c - acxtail);\n    alo = acxtail - ahi;\n    c = splitter * bcytail;\n    bhi = c - (c - bcytail);\n    blo = bcytail - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acytail * bcxtail;\n    c = splitter * acytail;\n    ahi = c - (c - acytail);\n    alo = acytail - ahi;\n    c = splitter * bcxtail;\n    bhi = c - (c - bcxtail);\n    blo = bcxtail - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const Dlen = sum(C2len, C2, 4, u, D);\n\n    return D[Dlen - 1];\n}\n\nexport function orient2d(ax, ay, bx, by, cx, cy) {\n    const detleft = (ay - cy) * (bx - cx);\n    const detright = (ax - cx) * (by - cy);\n    const det = detleft - detright;\n\n    const detsum = Math.abs(detleft + detright);\n    if (Math.abs(det) >= ccwerrboundA * detsum) return det;\n\n    return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\n}\n\nexport function orient2dfast(ax, ay, bx, by, cx, cy) {\n    return (ay - cy) * (bx - cx) - (ax - cx) * (by - cy);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum, scale} from './util.js';\n\nconst o3derrboundA = (7 + 56 * epsilon) * epsilon;\nconst o3derrboundB = (3 + 28 * epsilon) * epsilon;\nconst o3derrboundC = (26 + 288 * epsilon) * epsilon * epsilon;\n\nconst bc = vec(4);\nconst ca = vec(4);\nconst ab = vec(4);\nconst at_b = vec(4);\nconst at_c = vec(4);\nconst bt_c = vec(4);\nconst bt_a = vec(4);\nconst ct_a = vec(4);\nconst ct_b = vec(4);\nconst bct = vec(8);\nconst cat = vec(8);\nconst abt = vec(8);\nconst u = vec(4);\n\nconst _8 = vec(8);\nconst _8b = vec(8);\nconst _16 = vec(8);\nconst _12 = vec(12);\n\nlet fin = vec(192);\nlet fin2 = vec(192);\n\nfunction finadd(finlen, alen, a) {\n    finlen = sum(finlen, fin, alen, a, fin2);\n    const tmp = fin; fin = fin2; fin2 = tmp;\n    return finlen;\n}\n\nfunction tailinit(xtail, ytail, ax, ay, bx, by, a, b) {\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, t1, t0, u3, negate;\n    if (xtail === 0) {\n        if (ytail === 0) {\n            a[0] = 0;\n            b[0] = 0;\n            return 1;\n        } else {\n            negate = -ytail;\n            s1 = negate * ax;\n            c = splitter * negate;\n            ahi = c - (c - negate);\n            alo = negate - ahi;\n            c = splitter * ax;\n            bhi = c - (c - ax);\n            blo = ax - bhi;\n            a[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            a[1] = s1;\n            s1 = ytail * bx;\n            c = splitter * ytail;\n            ahi = c - (c - ytail);\n            alo = ytail - ahi;\n            c = splitter * bx;\n            bhi = c - (c - bx);\n            blo = bx - bhi;\n            b[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            b[1] = s1;\n            return 2;\n        }\n    } else {\n        if (ytail === 0) {\n            s1 = xtail * ay;\n            c = splitter * xtail;\n            ahi = c - (c - xtail);\n            alo = xtail - ahi;\n            c = splitter * ay;\n            bhi = c - (c - ay);\n            blo = ay - bhi;\n            a[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            a[1] = s1;\n            negate = -xtail;\n            s1 = negate * by;\n            c = splitter * negate;\n            ahi = c - (c - negate);\n            alo = negate - ahi;\n            c = splitter * by;\n            bhi = c - (c - by);\n            blo = by - bhi;\n            b[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            b[1] = s1;\n            return 2;\n        } else {\n            s1 = xtail * ay;\n            c = splitter * xtail;\n            ahi = c - (c - xtail);\n            alo = xtail - ahi;\n            c = splitter * ay;\n            bhi = c - (c - ay);\n            blo = ay - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = ytail * ax;\n            c = splitter * ytail;\n            ahi = c - (c - ytail);\n            alo = ytail - ahi;\n            c = splitter * ax;\n            bhi = c - (c - ax);\n            blo = ax - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            a[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            a[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            a[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            a[3] = u3;\n            s1 = ytail * bx;\n            c = splitter * ytail;\n            ahi = c - (c - ytail);\n            alo = ytail - ahi;\n            c = splitter * bx;\n            bhi = c - (c - bx);\n            blo = bx - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = xtail * by;\n            c = splitter * xtail;\n            ahi = c - (c - xtail);\n            alo = xtail - ahi;\n            c = splitter * by;\n            bhi = c - (c - by);\n            blo = by - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            b[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            b[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            b[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            b[3] = u3;\n            return 4;\n        }\n    }\n}\n\nfunction tailadd(finlen, a, b, k, z) {\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, u3;\n    s1 = a * b;\n    c = splitter * a;\n    ahi = c - (c - a);\n    alo = a - ahi;\n    c = splitter * b;\n    bhi = c - (c - b);\n    blo = b - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    c = splitter * k;\n    bhi = c - (c - k);\n    blo = k - bhi;\n    _i = s0 * k;\n    c = splitter * s0;\n    ahi = c - (c - s0);\n    alo = s0 - ahi;\n    u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);\n    _j = s1 * k;\n    c = splitter * s1;\n    ahi = c - (c - s1);\n    alo = s1 - ahi;\n    _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);\n    _k = _i + _0;\n    bvirt = _k - _i;\n    u[1] = _i - (_k - bvirt) + (_0 - bvirt);\n    u3 = _j + _k;\n    u[2] = _k - (u3 - _j);\n    u[3] = u3;\n    finlen = finadd(finlen, 4, u);\n    if (z !== 0) {\n        c = splitter * z;\n        bhi = c - (c - z);\n        blo = z - bhi;\n        _i = s0 * z;\n        c = splitter * s0;\n        ahi = c - (c - s0);\n        alo = s0 - ahi;\n        u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);\n        _j = s1 * z;\n        c = splitter * s1;\n        ahi = c - (c - s1);\n        alo = s1 - ahi;\n        _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);\n        _k = _i + _0;\n        bvirt = _k - _i;\n        u[1] = _i - (_k - bvirt) + (_0 - bvirt);\n        u3 = _j + _k;\n        u[2] = _k - (u3 - _j);\n        u[3] = u3;\n        finlen = finadd(finlen, 4, u);\n    }\n    return finlen;\n}\n\nfunction orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent) {\n    let finlen;\n    let adxtail, bdxtail, cdxtail;\n    let adytail, bdytail, cdytail;\n    let adztail, bdztail, cdztail;\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, t1, t0, u3;\n\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n    const adz = az - dz;\n    const bdz = bz - dz;\n    const cdz = cz - dz;\n\n    s1 = bdx * cdy;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cdx * bdy;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bc[3] = u3;\n    s1 = cdx * ady;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = adx * cdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ca[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ca[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ca[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ca[3] = u3;\n    s1 = adx * bdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bdx * ady;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ab[3] = u3;\n\n    finlen = sum(\n        sum(\n            scale(4, bc, adz, _8), _8,\n            scale(4, ca, bdz, _8b), _8b, _16), _16,\n        scale(4, ab, cdz, _8), _8, fin);\n\n    let det = estimate(finlen, fin);\n    let errbound = o3derrboundB * permanent;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - adx;\n    adxtail = ax - (adx + bvirt) + (bvirt - dx);\n    bvirt = bx - bdx;\n    bdxtail = bx - (bdx + bvirt) + (bvirt - dx);\n    bvirt = cx - cdx;\n    cdxtail = cx - (cdx + bvirt) + (bvirt - dx);\n    bvirt = ay - ady;\n    adytail = ay - (ady + bvirt) + (bvirt - dy);\n    bvirt = by - bdy;\n    bdytail = by - (bdy + bvirt) + (bvirt - dy);\n    bvirt = cy - cdy;\n    cdytail = cy - (cdy + bvirt) + (bvirt - dy);\n    bvirt = az - adz;\n    adztail = az - (adz + bvirt) + (bvirt - dz);\n    bvirt = bz - bdz;\n    bdztail = bz - (bdz + bvirt) + (bvirt - dz);\n    bvirt = cz - cdz;\n    cdztail = cz - (cdz + bvirt) + (bvirt - dz);\n\n    if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 &&\n        adytail === 0 && bdytail === 0 && cdytail === 0 &&\n        adztail === 0 && bdztail === 0 && cdztail === 0) {\n        return det;\n    }\n\n    errbound = o3derrboundC * permanent + resulterrbound * Math.abs(det);\n    det +=\n        adz * (bdx * cdytail + cdy * bdxtail - (bdy * cdxtail + cdx * bdytail)) + adztail * (bdx * cdy - bdy * cdx) +\n        bdz * (cdx * adytail + ady * cdxtail - (cdy * adxtail + adx * cdytail)) + bdztail * (cdx * ady - cdy * adx) +\n        cdz * (adx * bdytail + bdy * adxtail - (ady * bdxtail + bdx * adytail)) + cdztail * (adx * bdy - ady * bdx);\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    const at_len = tailinit(adxtail, adytail, bdx, bdy, cdx, cdy, at_b, at_c);\n    const bt_len = tailinit(bdxtail, bdytail, cdx, cdy, adx, ady, bt_c, bt_a);\n    const ct_len = tailinit(cdxtail, cdytail, adx, ady, bdx, bdy, ct_a, ct_b);\n\n    const bctlen = sum(bt_len, bt_c, ct_len, ct_b, bct);\n    finlen = finadd(finlen, scale(bctlen, bct, adz, _16), _16);\n\n    const catlen = sum(ct_len, ct_a, at_len, at_c, cat);\n    finlen = finadd(finlen, scale(catlen, cat, bdz, _16), _16);\n\n    const abtlen = sum(at_len, at_b, bt_len, bt_a, abt);\n    finlen = finadd(finlen, scale(abtlen, abt, cdz, _16), _16);\n\n    if (adztail !== 0) {\n        finlen = finadd(finlen, scale(4, bc, adztail, _12), _12);\n        finlen = finadd(finlen, scale(bctlen, bct, adztail, _16), _16);\n    }\n    if (bdztail !== 0) {\n        finlen = finadd(finlen, scale(4, ca, bdztail, _12), _12);\n        finlen = finadd(finlen, scale(catlen, cat, bdztail, _16), _16);\n    }\n    if (cdztail !== 0) {\n        finlen = finadd(finlen, scale(4, ab, cdztail, _12), _12);\n        finlen = finadd(finlen, scale(abtlen, abt, cdztail, _16), _16);\n    }\n\n    if (adxtail !== 0) {\n        if (bdytail !== 0) {\n            finlen = tailadd(finlen, adxtail, bdytail, cdz, cdztail);\n        }\n        if (cdytail !== 0) {\n            finlen = tailadd(finlen, -adxtail, cdytail, bdz, bdztail);\n        }\n    }\n    if (bdxtail !== 0) {\n        if (cdytail !== 0) {\n            finlen = tailadd(finlen, bdxtail, cdytail, adz, adztail);\n        }\n        if (adytail !== 0) {\n            finlen = tailadd(finlen, -bdxtail, adytail, cdz, cdztail);\n        }\n    }\n    if (cdxtail !== 0) {\n        if (adytail !== 0) {\n            finlen = tailadd(finlen, cdxtail, adytail, bdz, bdztail);\n        }\n        if (bdytail !== 0) {\n            finlen = tailadd(finlen, -cdxtail, bdytail, adz, adztail);\n        }\n    }\n\n    return fin[finlen - 1];\n}\n\nexport function orient3d(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz) {\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n    const adz = az - dz;\n    const bdz = bz - dz;\n    const cdz = cz - dz;\n\n    const bdxcdy = bdx * cdy;\n    const cdxbdy = cdx * bdy;\n\n    const cdxady = cdx * ady;\n    const adxcdy = adx * cdy;\n\n    const adxbdy = adx * bdy;\n    const bdxady = bdx * ady;\n\n    const det =\n        adz * (bdxcdy - cdxbdy) +\n        bdz * (cdxady - adxcdy) +\n        cdz * (adxbdy - bdxady);\n\n    const permanent =\n        (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * Math.abs(adz) +\n        (Math.abs(cdxady) + Math.abs(adxcdy)) * Math.abs(bdz) +\n        (Math.abs(adxbdy) + Math.abs(bdxady)) * Math.abs(cdz);\n\n    const errbound = o3derrboundA * permanent;\n    if (det > errbound || -det > errbound) {\n        return det;\n    }\n\n    return orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent);\n}\n\nexport function orient3dfast(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz) {\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n    const adz = az - dz;\n    const bdz = bz - dz;\n    const cdz = cz - dz;\n\n    return adx * (bdy * cdz - bdz * cdy) +\n        bdx * (cdy * adz - cdz * ady) +\n        cdx * (ady * bdz - adz * bdy);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum, sum_three, scale} from './util.js';\n\nconst iccerrboundA = (10 + 96 * epsilon) * epsilon;\nconst iccerrboundB = (4 + 48 * epsilon) * epsilon;\nconst iccerrboundC = (44 + 576 * epsilon) * epsilon * epsilon;\n\nconst bc = vec(4);\nconst ca = vec(4);\nconst ab = vec(4);\nconst aa = vec(4);\nconst bb = vec(4);\nconst cc = vec(4);\nconst u = vec(4);\nconst v = vec(4);\nconst axtbc = vec(8);\nconst aytbc = vec(8);\nconst bxtca = vec(8);\nconst bytca = vec(8);\nconst cxtab = vec(8);\nconst cytab = vec(8);\nconst abt = vec(8);\nconst bct = vec(8);\nconst cat = vec(8);\nconst abtt = vec(4);\nconst bctt = vec(4);\nconst catt = vec(4);\n\nconst _8 = vec(8);\nconst _16 = vec(16);\nconst _16b = vec(16);\nconst _16c = vec(16);\nconst _32 = vec(32);\nconst _32b = vec(32);\nconst _48 = vec(48);\nconst _64 = vec(64);\n\nlet fin = vec(1152);\nlet fin2 = vec(1152);\n\nfunction finadd(finlen, a, alen) {\n    finlen = sum(finlen, fin, a, alen, fin2);\n    const tmp = fin; fin = fin2; fin2 = tmp;\n    return finlen;\n}\n\nfunction incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {\n    let finlen;\n    let adxtail, bdxtail, cdxtail, adytail, bdytail, cdytail;\n    let axtbclen, aytbclen, bxtcalen, bytcalen, cxtablen, cytablen;\n    let abtlen, bctlen, catlen;\n    let abttlen, bcttlen, cattlen;\n    let n1, n0;\n\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n\n    s1 = bdx * cdy;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cdx * bdy;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bc[3] = u3;\n    s1 = cdx * ady;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = adx * cdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ca[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ca[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ca[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ca[3] = u3;\n    s1 = adx * bdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bdx * ady;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ab[3] = u3;\n\n    finlen = sum(\n        sum(\n            sum(\n                scale(scale(4, bc, adx, _8), _8, adx, _16), _16,\n                scale(scale(4, bc, ady, _8), _8, ady, _16b), _16b, _32), _32,\n            sum(\n                scale(scale(4, ca, bdx, _8), _8, bdx, _16), _16,\n                scale(scale(4, ca, bdy, _8), _8, bdy, _16b), _16b, _32b), _32b, _64), _64,\n        sum(\n            scale(scale(4, ab, cdx, _8), _8, cdx, _16), _16,\n            scale(scale(4, ab, cdy, _8), _8, cdy, _16b), _16b, _32), _32, fin);\n\n    let det = estimate(finlen, fin);\n    let errbound = iccerrboundB * permanent;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - adx;\n    adxtail = ax - (adx + bvirt) + (bvirt - dx);\n    bvirt = ay - ady;\n    adytail = ay - (ady + bvirt) + (bvirt - dy);\n    bvirt = bx - bdx;\n    bdxtail = bx - (bdx + bvirt) + (bvirt - dx);\n    bvirt = by - bdy;\n    bdytail = by - (bdy + bvirt) + (bvirt - dy);\n    bvirt = cx - cdx;\n    cdxtail = cx - (cdx + bvirt) + (bvirt - dx);\n    bvirt = cy - cdy;\n    cdytail = cy - (cdy + bvirt) + (bvirt - dy);\n    if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 && adytail === 0 && bdytail === 0 && cdytail === 0) {\n        return det;\n    }\n\n    errbound = iccerrboundC * permanent + resulterrbound * Math.abs(det);\n    det += ((adx * adx + ady * ady) * ((bdx * cdytail + cdy * bdxtail) - (bdy * cdxtail + cdx * bdytail)) +\n        2 * (adx * adxtail + ady * adytail) * (bdx * cdy - bdy * cdx)) +\n        ((bdx * bdx + bdy * bdy) * ((cdx * adytail + ady * cdxtail) - (cdy * adxtail + adx * cdytail)) +\n        2 * (bdx * bdxtail + bdy * bdytail) * (cdx * ady - cdy * adx)) +\n        ((cdx * cdx + cdy * cdy) * ((adx * bdytail + bdy * adxtail) - (ady * bdxtail + bdx * adytail)) +\n        2 * (cdx * cdxtail + cdy * cdytail) * (adx * bdy - ady * bdx));\n\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {\n        s1 = adx * adx;\n        c = splitter * adx;\n        ahi = c - (c - adx);\n        alo = adx - ahi;\n        s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n        t1 = ady * ady;\n        c = splitter * ady;\n        ahi = c - (c - ady);\n        alo = ady - ahi;\n        t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n        _i = s0 + t0;\n        bvirt = _i - s0;\n        aa[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n        _j = s1 + _i;\n        bvirt = _j - s1;\n        _0 = s1 - (_j - bvirt) + (_i - bvirt);\n        _i = _0 + t1;\n        bvirt = _i - _0;\n        aa[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n        u3 = _j + _i;\n        bvirt = u3 - _j;\n        aa[2] = _j - (u3 - bvirt) + (_i - bvirt);\n        aa[3] = u3;\n    }\n    if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {\n        s1 = bdx * bdx;\n        c = splitter * bdx;\n        ahi = c - (c - bdx);\n        alo = bdx - ahi;\n        s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n        t1 = bdy * bdy;\n        c = splitter * bdy;\n        ahi = c - (c - bdy);\n        alo = bdy - ahi;\n        t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n        _i = s0 + t0;\n        bvirt = _i - s0;\n        bb[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n        _j = s1 + _i;\n        bvirt = _j - s1;\n        _0 = s1 - (_j - bvirt) + (_i - bvirt);\n        _i = _0 + t1;\n        bvirt = _i - _0;\n        bb[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n        u3 = _j + _i;\n        bvirt = u3 - _j;\n        bb[2] = _j - (u3 - bvirt) + (_i - bvirt);\n        bb[3] = u3;\n    }\n    if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {\n        s1 = cdx * cdx;\n        c = splitter * cdx;\n        ahi = c - (c - cdx);\n        alo = cdx - ahi;\n        s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n        t1 = cdy * cdy;\n        c = splitter * cdy;\n        ahi = c - (c - cdy);\n        alo = cdy - ahi;\n        t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n        _i = s0 + t0;\n        bvirt = _i - s0;\n        cc[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n        _j = s1 + _i;\n        bvirt = _j - s1;\n        _0 = s1 - (_j - bvirt) + (_i - bvirt);\n        _i = _0 + t1;\n        bvirt = _i - _0;\n        cc[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n        u3 = _j + _i;\n        bvirt = u3 - _j;\n        cc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n        cc[3] = u3;\n    }\n\n    if (adxtail !== 0) {\n        axtbclen = scale(4, bc, adxtail, axtbc);\n        finlen = finadd(finlen, sum_three(\n            scale(axtbclen, axtbc, 2 * adx, _16), _16,\n            scale(scale(4, cc, adxtail, _8), _8, bdy, _16b), _16b,\n            scale(scale(4, bb, adxtail, _8), _8, -cdy, _16c), _16c, _32, _48), _48);\n    }\n    if (adytail !== 0) {\n        aytbclen = scale(4, bc, adytail, aytbc);\n        finlen = finadd(finlen, sum_three(\n            scale(aytbclen, aytbc, 2 * ady, _16), _16,\n            scale(scale(4, bb, adytail, _8), _8, cdx, _16b), _16b,\n            scale(scale(4, cc, adytail, _8), _8, -bdx, _16c), _16c, _32, _48), _48);\n    }\n    if (bdxtail !== 0) {\n        bxtcalen = scale(4, ca, bdxtail, bxtca);\n        finlen = finadd(finlen, sum_three(\n            scale(bxtcalen, bxtca, 2 * bdx, _16), _16,\n            scale(scale(4, aa, bdxtail, _8), _8, cdy, _16b), _16b,\n            scale(scale(4, cc, bdxtail, _8), _8, -ady, _16c), _16c, _32, _48), _48);\n    }\n    if (bdytail !== 0) {\n        bytcalen = scale(4, ca, bdytail, bytca);\n        finlen = finadd(finlen, sum_three(\n            scale(bytcalen, bytca, 2 * bdy, _16), _16,\n            scale(scale(4, cc, bdytail, _8), _8, adx, _16b), _16b,\n            scale(scale(4, aa, bdytail, _8), _8, -cdx, _16c), _16c, _32, _48), _48);\n    }\n    if (cdxtail !== 0) {\n        cxtablen = scale(4, ab, cdxtail, cxtab);\n        finlen = finadd(finlen, sum_three(\n            scale(cxtablen, cxtab, 2 * cdx, _16), _16,\n            scale(scale(4, bb, cdxtail, _8), _8, ady, _16b), _16b,\n            scale(scale(4, aa, cdxtail, _8), _8, -bdy, _16c), _16c, _32, _48), _48);\n    }\n    if (cdytail !== 0) {\n        cytablen = scale(4, ab, cdytail, cytab);\n        finlen = finadd(finlen, sum_three(\n            scale(cytablen, cytab, 2 * cdy, _16), _16,\n            scale(scale(4, aa, cdytail, _8), _8, bdx, _16b), _16b,\n            scale(scale(4, bb, cdytail, _8), _8, -adx, _16c), _16c, _32, _48), _48);\n    }\n\n    if (adxtail !== 0 || adytail !== 0) {\n        if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {\n            s1 = bdxtail * cdy;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * cdy;\n            bhi = c - (c - cdy);\n            blo = cdy - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = bdx * cdytail;\n            c = splitter * bdx;\n            ahi = c - (c - bdx);\n            alo = bdx - ahi;\n            c = splitter * cdytail;\n            bhi = c - (c - cdytail);\n            blo = cdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            u[3] = u3;\n            s1 = cdxtail * -bdy;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * -bdy;\n            bhi = c - (c - -bdy);\n            blo = -bdy - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = cdx * -bdytail;\n            c = splitter * cdx;\n            ahi = c - (c - cdx);\n            alo = cdx - ahi;\n            c = splitter * -bdytail;\n            bhi = c - (c - -bdytail);\n            blo = -bdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            v[3] = u3;\n            bctlen = sum(4, u, 4, v, bct);\n            s1 = bdxtail * cdytail;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * cdytail;\n            bhi = c - (c - cdytail);\n            blo = cdytail - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = cdxtail * bdytail;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * bdytail;\n            bhi = c - (c - bdytail);\n            blo = bdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            bctt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            bctt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            bctt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            bctt[3] = u3;\n            bcttlen = 4;\n        } else {\n            bct[0] = 0;\n            bctlen = 1;\n            bctt[0] = 0;\n            bcttlen = 1;\n        }\n        if (adxtail !== 0) {\n            const len = scale(bctlen, bct, adxtail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(axtbclen, axtbc, adxtail, _16), _16,\n                scale(len, _16c, 2 * adx, _32), _32, _48), _48);\n\n            const len2 = scale(bcttlen, bctt, adxtail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * adx, _16), _16,\n                scale(len2, _8, adxtail, _16b), _16b,\n                scale(len, _16c, adxtail, _32), _32, _32b, _64), _64);\n\n            if (bdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, cc, adxtail, _8), _8, bdytail, _16), _16);\n            }\n            if (cdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, bb, -adxtail, _8), _8, cdytail, _16), _16);\n            }\n        }\n        if (adytail !== 0) {\n            const len = scale(bctlen, bct, adytail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(aytbclen, aytbc, adytail, _16), _16,\n                scale(len, _16c, 2 * ady, _32), _32, _48), _48);\n\n            const len2 = scale(bcttlen, bctt, adytail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * ady, _16), _16,\n                scale(len2, _8, adytail, _16b), _16b,\n                scale(len, _16c, adytail, _32), _32, _32b, _64), _64);\n        }\n    }\n    if (bdxtail !== 0 || bdytail !== 0) {\n        if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {\n            s1 = cdxtail * ady;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * ady;\n            bhi = c - (c - ady);\n            blo = ady - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = cdx * adytail;\n            c = splitter * cdx;\n            ahi = c - (c - cdx);\n            alo = cdx - ahi;\n            c = splitter * adytail;\n            bhi = c - (c - adytail);\n            blo = adytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            u[3] = u3;\n            n1 = -cdy;\n            n0 = -cdytail;\n            s1 = adxtail * n1;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * n1;\n            bhi = c - (c - n1);\n            blo = n1 - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = adx * n0;\n            c = splitter * adx;\n            ahi = c - (c - adx);\n            alo = adx - ahi;\n            c = splitter * n0;\n            bhi = c - (c - n0);\n            blo = n0 - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            v[3] = u3;\n            catlen = sum(4, u, 4, v, cat);\n            s1 = cdxtail * adytail;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * adytail;\n            bhi = c - (c - adytail);\n            blo = adytail - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = adxtail * cdytail;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * cdytail;\n            bhi = c - (c - cdytail);\n            blo = cdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            catt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            catt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            catt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            catt[3] = u3;\n            cattlen = 4;\n        } else {\n            cat[0] = 0;\n            catlen = 1;\n            catt[0] = 0;\n            cattlen = 1;\n        }\n        if (bdxtail !== 0) {\n            const len = scale(catlen, cat, bdxtail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(bxtcalen, bxtca, bdxtail, _16), _16,\n                scale(len, _16c, 2 * bdx, _32), _32, _48), _48);\n\n            const len2 = scale(cattlen, catt, bdxtail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * bdx, _16), _16,\n                scale(len2, _8, bdxtail, _16b), _16b,\n                scale(len, _16c, bdxtail, _32), _32, _32b, _64), _64);\n\n            if (cdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, aa, bdxtail, _8), _8, cdytail, _16), _16);\n            }\n            if (adytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, cc, -bdxtail, _8), _8, adytail, _16), _16);\n            }\n        }\n        if (bdytail !== 0) {\n            const len = scale(catlen, cat, bdytail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(bytcalen, bytca, bdytail, _16), _16,\n                scale(len, _16c, 2 * bdy, _32), _32, _48), _48);\n\n            const len2 = scale(cattlen, catt, bdytail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * bdy, _16), _16,\n                scale(len2, _8, bdytail, _16b), _16b,\n                scale(len, _16c, bdytail, _32), _32,  _32b, _64), _64);\n        }\n    }\n    if (cdxtail !== 0 || cdytail !== 0) {\n        if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {\n            s1 = adxtail * bdy;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * bdy;\n            bhi = c - (c - bdy);\n            blo = bdy - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = adx * bdytail;\n            c = splitter * adx;\n            ahi = c - (c - adx);\n            alo = adx - ahi;\n            c = splitter * bdytail;\n            bhi = c - (c - bdytail);\n            blo = bdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            u[3] = u3;\n            n1 = -ady;\n            n0 = -adytail;\n            s1 = bdxtail * n1;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * n1;\n            bhi = c - (c - n1);\n            blo = n1 - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = bdx * n0;\n            c = splitter * bdx;\n            ahi = c - (c - bdx);\n            alo = bdx - ahi;\n            c = splitter * n0;\n            bhi = c - (c - n0);\n            blo = n0 - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            v[3] = u3;\n            abtlen = sum(4, u, 4, v, abt);\n            s1 = adxtail * bdytail;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * bdytail;\n            bhi = c - (c - bdytail);\n            blo = bdytail - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = bdxtail * adytail;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * adytail;\n            bhi = c - (c - adytail);\n            blo = adytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            abtt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            abtt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            abtt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            abtt[3] = u3;\n            abttlen = 4;\n        } else {\n            abt[0] = 0;\n            abtlen = 1;\n            abtt[0] = 0;\n            abttlen = 1;\n        }\n        if (cdxtail !== 0) {\n            const len = scale(abtlen, abt, cdxtail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(cxtablen, cxtab, cdxtail, _16), _16,\n                scale(len, _16c, 2 * cdx, _32), _32, _48), _48);\n\n            const len2 = scale(abttlen, abtt, cdxtail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * cdx, _16), _16,\n                scale(len2, _8, cdxtail, _16b), _16b,\n                scale(len, _16c, cdxtail, _32), _32, _32b, _64), _64);\n\n            if (adytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, bb, cdxtail, _8), _8, adytail, _16), _16);\n            }\n            if (bdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, aa, -cdxtail, _8), _8, bdytail, _16), _16);\n            }\n        }\n        if (cdytail !== 0) {\n            const len = scale(abtlen, abt, cdytail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(cytablen, cytab, cdytail, _16), _16,\n                scale(len, _16c, 2 * cdy, _32), _32, _48), _48);\n\n            const len2 = scale(abttlen, abtt, cdytail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * cdy, _16), _16,\n                scale(len2, _8, cdytail, _16b), _16b,\n                scale(len, _16c, cdytail, _32), _32, _32b, _64), _64);\n        }\n    }\n\n    return fin[finlen - 1];\n}\n\nexport function incircle(ax, ay, bx, by, cx, cy, dx, dy) {\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n\n    const bdxcdy = bdx * cdy;\n    const cdxbdy = cdx * bdy;\n    const alift = adx * adx + ady * ady;\n\n    const cdxady = cdx * ady;\n    const adxcdy = adx * cdy;\n    const blift = bdx * bdx + bdy * bdy;\n\n    const adxbdy = adx * bdy;\n    const bdxady = bdx * ady;\n    const clift = cdx * cdx + cdy * cdy;\n\n    const det =\n        alift * (bdxcdy - cdxbdy) +\n        blift * (cdxady - adxcdy) +\n        clift * (adxbdy - bdxady);\n\n    const permanent =\n        (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * alift +\n        (Math.abs(cdxady) + Math.abs(adxcdy)) * blift +\n        (Math.abs(adxbdy) + Math.abs(bdxady)) * clift;\n\n    const errbound = iccerrboundA * permanent;\n\n    if (det > errbound || -det > errbound) {\n        return det;\n    }\n    return incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent);\n}\n\nexport function incirclefast(ax, ay, bx, by, cx, cy, dx, dy) {\n    const adx = ax - dx;\n    const ady = ay - dy;\n    const bdx = bx - dx;\n    const bdy = by - dy;\n    const cdx = cx - dx;\n    const cdy = cy - dy;\n\n    const abdet = adx * bdy - bdx * ady;\n    const bcdet = bdx * cdy - cdx * bdy;\n    const cadet = cdx * ady - adx * cdy;\n    const alift = adx * adx + ady * ady;\n    const blift = bdx * bdx + bdy * bdy;\n    const clift = cdx * cdx + cdy * cdy;\n\n    return alift * bcdet + blift * cadet + clift * abdet;\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum, sum_three, scale, negate} from './util.js';\n\nconst isperrboundA = (16 + 224 * epsilon) * epsilon;\nconst isperrboundB = (5 + 72 * epsilon) * epsilon;\nconst isperrboundC = (71 + 1408 * epsilon) * epsilon * epsilon;\n\nconst ab = vec(4);\nconst bc = vec(4);\nconst cd = vec(4);\nconst de = vec(4);\nconst ea = vec(4);\nconst ac = vec(4);\nconst bd = vec(4);\nconst ce = vec(4);\nconst da = vec(4);\nconst eb = vec(4);\n\nconst abc = vec(24);\nconst bcd = vec(24);\nconst cde = vec(24);\nconst dea = vec(24);\nconst eab = vec(24);\nconst abd = vec(24);\nconst bce = vec(24);\nconst cda = vec(24);\nconst deb = vec(24);\nconst eac = vec(24);\n\nconst adet = vec(1152);\nconst bdet = vec(1152);\nconst cdet = vec(1152);\nconst ddet = vec(1152);\nconst edet = vec(1152);\nconst abdet = vec(2304);\nconst cddet = vec(2304);\nconst cdedet = vec(3456);\nconst deter = vec(5760);\n\nconst _8 = vec(8);\nconst _8b = vec(8);\nconst _8c = vec(8);\nconst _16 = vec(16);\nconst _24 = vec(24);\nconst _48 = vec(48);\nconst _48b = vec(48);\nconst _96 = vec(96);\nconst _192 = vec(192);\nconst _384x = vec(384);\nconst _384y = vec(384);\nconst _384z = vec(384);\nconst _768 = vec(768);\n\nfunction sum_three_scale(a, b, c, az, bz, cz, out) {\n    return sum_three(\n        scale(4, a, az, _8), _8,\n        scale(4, b, bz, _8b), _8b,\n        scale(4, c, cz, _8c), _8c, _16, out);\n}\n\nfunction liftexact(alen, a, blen, b, clen, c, dlen, d, x, y, z, out) {\n    const len = sum(\n        sum(alen, a, blen, b, _48), _48,\n        negate(sum(clen, c, dlen, d, _48b), _48b), _48b, _96);\n\n    return sum_three(\n        scale(scale(len, _96, x, _192), _192, x, _384x), _384x,\n        scale(scale(len, _96, y, _192), _192, y, _384y), _384y,\n        scale(scale(len, _96, z, _192), _192, z, _384z), _384z, _768, out);\n}\n\nfunction insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    s1 = ax * by;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bx * ay;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ab[3] = u3;\n    s1 = bx * cy;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cx * by;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bc[3] = u3;\n    s1 = cx * dy;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dx * cy;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    cd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    cd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    cd[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    cd[3] = u3;\n    s1 = dx * ey;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ex * dy;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    de[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    de[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    de[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    de[3] = u3;\n    s1 = ex * ay;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ax * ey;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ea[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ea[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ea[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ea[3] = u3;\n    s1 = ax * cy;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cx * ay;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ac[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ac[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ac[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ac[3] = u3;\n    s1 = bx * dy;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dx * by;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bd[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bd[3] = u3;\n    s1 = cx * ey;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ex * cy;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ce[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ce[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ce[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ce[3] = u3;\n    s1 = dx * ay;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ax * dy;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    da[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    da[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    da[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    da[3] = u3;\n    s1 = ex * by;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bx * ey;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    eb[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    eb[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    eb[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    eb[3] = u3;\n\n    const abclen = sum_three_scale(ab, bc, ac, cz, az, -bz, abc);\n    const bcdlen = sum_three_scale(bc, cd, bd, dz, bz, -cz, bcd);\n    const cdelen = sum_three_scale(cd, de, ce, ez, cz, -dz, cde);\n    const dealen = sum_three_scale(de, ea, da, az, dz, -ez, dea);\n    const eablen = sum_three_scale(ea, ab, eb, bz, ez, -az, eab);\n    const abdlen = sum_three_scale(ab, bd, da, dz, az, bz, abd);\n    const bcelen = sum_three_scale(bc, ce, eb, ez, bz, cz, bce);\n    const cdalen = sum_three_scale(cd, da, ac, az, cz, dz, cda);\n    const deblen = sum_three_scale(de, eb, bd, bz, dz, ez, deb);\n    const eaclen = sum_three_scale(ea, ac, ce, cz, ez, az, eac);\n\n    const deterlen = sum_three(\n        liftexact(cdelen, cde, bcelen, bce, deblen, deb, bcdlen, bcd, ax, ay, az, adet), adet,\n        liftexact(dealen, dea, cdalen, cda, eaclen, eac, cdelen, cde, bx, by, bz, bdet), bdet,\n        sum_three(\n            liftexact(eablen, eab, deblen, deb, abdlen, abd, dealen, dea, cx, cy, cz, cdet), cdet,\n            liftexact(abclen, abc, eaclen, eac, bcelen, bce, eablen, eab, dx, dy, dz, ddet), ddet,\n            liftexact(bcdlen, bcd, abdlen, abd, cdalen, cda, abclen, abc, ex, ey, ez, edet), edet, cddet, cdedet), cdedet, abdet, deter);\n\n    return deter[deterlen - 1];\n}\n\nconst xdet = vec(96);\nconst ydet = vec(96);\nconst zdet = vec(96);\nconst fin = vec(1152);\n\nfunction liftadapt(a, b, c, az, bz, cz, x, y, z, out) {\n    const len = sum_three_scale(a, b, c, az, bz, cz, _24);\n    return sum_three(\n        scale(scale(len, _24, x, _48), _48, x, xdet), xdet,\n        scale(scale(len, _24, y, _48), _48, y, ydet), ydet,\n        scale(scale(len, _24, z, _48), _48, z, zdet), zdet, _192, out);\n}\n\nfunction insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez, permanent) {\n    let ab3, bc3, cd3, da3, ac3, bd3;\n\n    let aextail, bextail, cextail, dextail;\n    let aeytail, beytail, ceytail, deytail;\n    let aeztail, beztail, ceztail, deztail;\n\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0;\n\n    const aex = ax - ex;\n    const bex = bx - ex;\n    const cex = cx - ex;\n    const dex = dx - ex;\n    const aey = ay - ey;\n    const bey = by - ey;\n    const cey = cy - ey;\n    const dey = dy - ey;\n    const aez = az - ez;\n    const bez = bz - ez;\n    const cez = cz - ez;\n    const dez = dz - ez;\n\n    s1 = aex * bey;\n    c = splitter * aex;\n    ahi = c - (c - aex);\n    alo = aex - ahi;\n    c = splitter * bey;\n    bhi = c - (c - bey);\n    blo = bey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bex * aey;\n    c = splitter * bex;\n    ahi = c - (c - bex);\n    alo = bex - ahi;\n    c = splitter * aey;\n    bhi = c - (c - aey);\n    blo = aey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    ab3 = _j + _i;\n    bvirt = ab3 - _j;\n    ab[2] = _j - (ab3 - bvirt) + (_i - bvirt);\n    ab[3] = ab3;\n    s1 = bex * cey;\n    c = splitter * bex;\n    ahi = c - (c - bex);\n    alo = bex - ahi;\n    c = splitter * cey;\n    bhi = c - (c - cey);\n    blo = cey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cex * bey;\n    c = splitter * cex;\n    ahi = c - (c - cex);\n    alo = cex - ahi;\n    c = splitter * bey;\n    bhi = c - (c - bey);\n    blo = bey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    bc3 = _j + _i;\n    bvirt = bc3 - _j;\n    bc[2] = _j - (bc3 - bvirt) + (_i - bvirt);\n    bc[3] = bc3;\n    s1 = cex * dey;\n    c = splitter * cex;\n    ahi = c - (c - cex);\n    alo = cex - ahi;\n    c = splitter * dey;\n    bhi = c - (c - dey);\n    blo = dey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dex * cey;\n    c = splitter * dex;\n    ahi = c - (c - dex);\n    alo = dex - ahi;\n    c = splitter * cey;\n    bhi = c - (c - cey);\n    blo = cey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    cd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    cd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    cd3 = _j + _i;\n    bvirt = cd3 - _j;\n    cd[2] = _j - (cd3 - bvirt) + (_i - bvirt);\n    cd[3] = cd3;\n    s1 = dex * aey;\n    c = splitter * dex;\n    ahi = c - (c - dex);\n    alo = dex - ahi;\n    c = splitter * aey;\n    bhi = c - (c - aey);\n    blo = aey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = aex * dey;\n    c = splitter * aex;\n    ahi = c - (c - aex);\n    alo = aex - ahi;\n    c = splitter * dey;\n    bhi = c - (c - dey);\n    blo = dey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    da[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    da[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    da3 = _j + _i;\n    bvirt = da3 - _j;\n    da[2] = _j - (da3 - bvirt) + (_i - bvirt);\n    da[3] = da3;\n    s1 = aex * cey;\n    c = splitter * aex;\n    ahi = c - (c - aex);\n    alo = aex - ahi;\n    c = splitter * cey;\n    bhi = c - (c - cey);\n    blo = cey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cex * aey;\n    c = splitter * cex;\n    ahi = c - (c - cex);\n    alo = cex - ahi;\n    c = splitter * aey;\n    bhi = c - (c - aey);\n    blo = aey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ac[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ac[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    ac3 = _j + _i;\n    bvirt = ac3 - _j;\n    ac[2] = _j - (ac3 - bvirt) + (_i - bvirt);\n    ac[3] = ac3;\n    s1 = bex * dey;\n    c = splitter * bex;\n    ahi = c - (c - bex);\n    alo = bex - ahi;\n    c = splitter * dey;\n    bhi = c - (c - dey);\n    blo = dey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dex * bey;\n    c = splitter * dex;\n    ahi = c - (c - dex);\n    alo = dex - ahi;\n    c = splitter * bey;\n    bhi = c - (c - bey);\n    blo = bey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    bd3 = _j + _i;\n    bvirt = bd3 - _j;\n    bd[2] = _j - (bd3 - bvirt) + (_i - bvirt);\n    bd[3] = bd3;\n\n    const finlen = sum(\n        sum(\n            negate(liftadapt(bc, cd, bd, dez, bez, -cez, aex, aey, aez, adet), adet), adet,\n            liftadapt(cd, da, ac, aez, cez, dez, bex, bey, bez, bdet), bdet, abdet), abdet,\n        sum(\n            negate(liftadapt(da, ab, bd, bez, dez, aez, cex, cey, cez, cdet), cdet), cdet,\n            liftadapt(ab, bc, ac, cez, aez, -bez, dex, dey, dez, ddet), ddet, cddet), cddet, fin);\n\n    let det = estimate(finlen, fin);\n    let errbound = isperrboundB * permanent;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - aex;\n    aextail = ax - (aex + bvirt) + (bvirt - ex);\n    bvirt = ay - aey;\n    aeytail = ay - (aey + bvirt) + (bvirt - ey);\n    bvirt = az - aez;\n    aeztail = az - (aez + bvirt) + (bvirt - ez);\n    bvirt = bx - bex;\n    bextail = bx - (bex + bvirt) + (bvirt - ex);\n    bvirt = by - bey;\n    beytail = by - (bey + bvirt) + (bvirt - ey);\n    bvirt = bz - bez;\n    beztail = bz - (bez + bvirt) + (bvirt - ez);\n    bvirt = cx - cex;\n    cextail = cx - (cex + bvirt) + (bvirt - ex);\n    bvirt = cy - cey;\n    ceytail = cy - (cey + bvirt) + (bvirt - ey);\n    bvirt = cz - cez;\n    ceztail = cz - (cez + bvirt) + (bvirt - ez);\n    bvirt = dx - dex;\n    dextail = dx - (dex + bvirt) + (bvirt - ex);\n    bvirt = dy - dey;\n    deytail = dy - (dey + bvirt) + (bvirt - ey);\n    bvirt = dz - dez;\n    deztail = dz - (dez + bvirt) + (bvirt - ez);\n    if (aextail === 0 && aeytail === 0 && aeztail === 0 &&\n        bextail === 0 && beytail === 0 && beztail === 0 &&\n        cextail === 0 && ceytail === 0 && ceztail === 0 &&\n        dextail === 0 && deytail === 0 && deztail === 0) {\n        return det;\n    }\n\n    errbound = isperrboundC * permanent + resulterrbound * Math.abs(det);\n\n    const abeps = (aex * beytail + bey * aextail) - (aey * bextail + bex * aeytail);\n    const bceps = (bex * ceytail + cey * bextail) - (bey * cextail + cex * beytail);\n    const cdeps = (cex * deytail + dey * cextail) - (cey * dextail + dex * ceytail);\n    const daeps = (dex * aeytail + aey * dextail) - (dey * aextail + aex * deytail);\n    const aceps = (aex * ceytail + cey * aextail) - (aey * cextail + cex * aeytail);\n    const bdeps = (bex * deytail + dey * bextail) - (bey * dextail + dex * beytail);\n    det +=\n        (((bex * bex + bey * bey + bez * bez) * ((cez * daeps + dez * aceps + aez * cdeps) +\n        (ceztail * da3 + deztail * ac3 + aeztail * cd3)) + (dex * dex + dey * dey + dez * dez) *\n        ((aez * bceps - bez * aceps + cez * abeps) + (aeztail * bc3 - beztail * ac3 + ceztail * ab3))) -\n        ((aex * aex + aey * aey + aez * aez) * ((bez * cdeps - cez * bdeps + dez * bceps) +\n        (beztail * cd3 - ceztail * bd3 + deztail * bc3)) + (cex * cex + cey * cey + cez * cez) *\n        ((dez * abeps + aez * bdeps + bez * daeps) + (deztail * ab3 + aeztail * bd3 + beztail * da3)))) +\n        2 * (((bex * bextail + bey * beytail + bez * beztail) * (cez * da3 + dez * ac3 + aez * cd3) +\n        (dex * dextail + dey * deytail + dez * deztail) * (aez * bc3 - bez * ac3 + cez * ab3)) -\n        ((aex * aextail + aey * aeytail + aez * aeztail) * (bez * cd3 - cez * bd3 + dez * bc3) +\n        (cex * cextail + cey * ceytail + cez * ceztail) * (dez * ab3 + aez * bd3 + bez * da3)));\n\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    return insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez);\n}\n\nexport function insphere(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {\n    const aex = ax - ex;\n    const bex = bx - ex;\n    const cex = cx - ex;\n    const dex = dx - ex;\n    const aey = ay - ey;\n    const bey = by - ey;\n    const cey = cy - ey;\n    const dey = dy - ey;\n    const aez = az - ez;\n    const bez = bz - ez;\n    const cez = cz - ez;\n    const dez = dz - ez;\n\n    const aexbey = aex * bey;\n    const bexaey = bex * aey;\n    const ab = aexbey - bexaey;\n    const bexcey = bex * cey;\n    const cexbey = cex * bey;\n    const bc = bexcey - cexbey;\n    const cexdey = cex * dey;\n    const dexcey = dex * cey;\n    const cd = cexdey - dexcey;\n    const dexaey = dex * aey;\n    const aexdey = aex * dey;\n    const da = dexaey - aexdey;\n    const aexcey = aex * cey;\n    const cexaey = cex * aey;\n    const ac = aexcey - cexaey;\n    const bexdey = bex * dey;\n    const dexbey = dex * bey;\n    const bd = bexdey - dexbey;\n\n    const alift = aex * aex + aey * aey + aez * aez;\n    const blift = bex * bex + bey * bey + bez * bez;\n    const clift = cex * cex + cey * cey + cez * cez;\n    const dlift = dex * dex + dey * dey + dez * dez;\n\n    const det =\n        (clift * (dez * ab + aez * bd + bez * da) - dlift * (aez * bc - bez * ac + cez * ab)) +\n        (alift * (bez * cd - cez * bd + dez * bc) - blift * (cez * da + dez * ac + aez * cd));\n\n    const aezplus = Math.abs(aez);\n    const bezplus = Math.abs(bez);\n    const cezplus = Math.abs(cez);\n    const dezplus = Math.abs(dez);\n    const aexbeyplus = Math.abs(aexbey) + Math.abs(bexaey);\n    const bexceyplus = Math.abs(bexcey) + Math.abs(cexbey);\n    const cexdeyplus = Math.abs(cexdey) + Math.abs(dexcey);\n    const dexaeyplus = Math.abs(dexaey) + Math.abs(aexdey);\n    const aexceyplus = Math.abs(aexcey) + Math.abs(cexaey);\n    const bexdeyplus = Math.abs(bexdey) + Math.abs(dexbey);\n    const permanent =\n        (cexdeyplus * bezplus + bexdeyplus * cezplus + bexceyplus * dezplus) * alift +\n        (dexaeyplus * cezplus + aexceyplus * dezplus + cexdeyplus * aezplus) * blift +\n        (aexbeyplus * dezplus + bexdeyplus * aezplus + dexaeyplus * bezplus) * clift +\n        (bexceyplus * aezplus + aexceyplus * bezplus + aexbeyplus * cezplus) * dlift;\n\n    const errbound = isperrboundA * permanent;\n    if (det > errbound || -det > errbound) {\n        return det;\n    }\n    return -insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez, permanent);\n}\n\nexport function inspherefast(pax, pay, paz, pbx, pby, pbz, pcx, pcy, pcz, pdx, pdy, pdz, pex, pey, pez) {\n    const aex = pax - pex;\n    const bex = pbx - pex;\n    const cex = pcx - pex;\n    const dex = pdx - pex;\n    const aey = pay - pey;\n    const bey = pby - pey;\n    const cey = pcy - pey;\n    const dey = pdy - pey;\n    const aez = paz - pez;\n    const bez = pbz - pez;\n    const cez = pcz - pez;\n    const dez = pdz - pez;\n\n    const ab = aex * bey - bex * aey;\n    const bc = bex * cey - cex * bey;\n    const cd = cex * dey - dex * cey;\n    const da = dex * aey - aex * dey;\n    const ac = aex * cey - cex * aey;\n    const bd = bex * dey - dex * bey;\n\n    const abc = aez * bc - bez * ac + cez * ab;\n    const bcd = bez * cd - cez * bd + dez * bc;\n    const cda = cez * da + dez * ac + aez * cd;\n    const dab = dez * ab + aez * bd + bez * da;\n\n    const alift = aex * aex + aey * aey + aez * aez;\n    const blift = bex * bex + bey * bey + bez * bez;\n    const clift = cex * cex + cey * cey + cez * cez;\n    const dlift = dex * dex + dey * dey + dez * dez;\n\n    return (clift * dab - dlift * abc) + (alift * bcd - blift * cda);\n}\n","\nconst EPSILON = Math.pow(2, -52);\nconst EDGE_STACK = new Uint32Array(512);\n\nimport {orient2d} from 'robust-predicates';\n\nexport default class Delaunator {\n\n    static from(points, getX = defaultGetX, getY = defaultGetY) {\n        const n = points.length;\n        const coords = new Float64Array(n * 2);\n\n        for (let i = 0; i < n; i++) {\n            const p = points[i];\n            coords[2 * i] = getX(p);\n            coords[2 * i + 1] = getY(p);\n        }\n\n        return new Delaunator(coords);\n    }\n\n    constructor(coords) {\n        const n = coords.length >> 1;\n        if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.');\n\n        this.coords = coords;\n\n        // arrays that will store the triangulation graph\n        const maxTriangles = Math.max(2 * n - 5, 0);\n        this._triangles = new Uint32Array(maxTriangles * 3);\n        this._halfedges = new Int32Array(maxTriangles * 3);\n\n        // temporary arrays for tracking the edges of the advancing convex hull\n        this._hashSize = Math.ceil(Math.sqrt(n));\n        this._hullPrev = new Uint32Array(n); // edge to prev edge\n        this._hullNext = new Uint32Array(n); // edge to next edge\n        this._hullTri = new Uint32Array(n); // edge to adjacent triangle\n        this._hullHash = new Int32Array(this._hashSize); // angular edge hash\n\n        // temporary arrays for sorting points\n        this._ids = new Uint32Array(n);\n        this._dists = new Float64Array(n);\n\n        this.update();\n    }\n\n    update() {\n        const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} =  this;\n        const n = coords.length >> 1;\n\n        // populate an array of point indices; calculate input data bbox\n        let minX = Infinity;\n        let minY = Infinity;\n        let maxX = -Infinity;\n        let maxY = -Infinity;\n\n        for (let i = 0; i < n; i++) {\n            const x = coords[2 * i];\n            const y = coords[2 * i + 1];\n            if (x < minX) minX = x;\n            if (y < minY) minY = y;\n            if (x > maxX) maxX = x;\n            if (y > maxY) maxY = y;\n            this._ids[i] = i;\n        }\n        const cx = (minX + maxX) / 2;\n        const cy = (minY + maxY) / 2;\n\n        let i0, i1, i2;\n\n        // pick a seed point close to the center\n        for (let i = 0, minDist = Infinity; i < n; i++) {\n            const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]);\n            if (d < minDist) {\n                i0 = i;\n                minDist = d;\n            }\n        }\n        const i0x = coords[2 * i0];\n        const i0y = coords[2 * i0 + 1];\n\n        // find the point closest to the seed\n        for (let i = 0, minDist = Infinity; i < n; i++) {\n            if (i === i0) continue;\n            const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);\n            if (d < minDist && d > 0) {\n                i1 = i;\n                minDist = d;\n            }\n        }\n        let i1x = coords[2 * i1];\n        let i1y = coords[2 * i1 + 1];\n\n        let minRadius = Infinity;\n\n        // find the third point which forms the smallest circumcircle with the first two\n        for (let i = 0; i < n; i++) {\n            if (i === i0 || i === i1) continue;\n            const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);\n            if (r < minRadius) {\n                i2 = i;\n                minRadius = r;\n            }\n        }\n        let i2x = coords[2 * i2];\n        let i2y = coords[2 * i2 + 1];\n\n        if (minRadius === Infinity) {\n            // order collinear points by dx (or dy if all x are identical)\n            // and return the list as a hull\n            for (let i = 0; i < n; i++) {\n                this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]);\n            }\n            quicksort(this._ids, this._dists, 0, n - 1);\n            const hull = new Uint32Array(n);\n            let j = 0;\n            for (let i = 0, d0 = -Infinity; i < n; i++) {\n                const id = this._ids[i];\n                const d = this._dists[id];\n                if (d > d0) {\n                    hull[j++] = id;\n                    d0 = d;\n                }\n            }\n            this.hull = hull.subarray(0, j);\n            this.triangles = new Uint32Array(0);\n            this.halfedges = new Uint32Array(0);\n            return;\n        }\n\n        // swap the order of the seed points for counter-clockwise orientation\n        if (orient2d(i0x, i0y, i1x, i1y, i2x, i2y) < 0) {\n            const i = i1;\n            const x = i1x;\n            const y = i1y;\n            i1 = i2;\n            i1x = i2x;\n            i1y = i2y;\n            i2 = i;\n            i2x = x;\n            i2y = y;\n        }\n\n        const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\n        this._cx = center.x;\n        this._cy = center.y;\n\n        for (let i = 0; i < n; i++) {\n            this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y);\n        }\n\n        // sort the points by distance from the seed triangle circumcenter\n        quicksort(this._ids, this._dists, 0, n - 1);\n\n        // set up the seed triangle as the starting hull\n        this._hullStart = i0;\n        let hullSize = 3;\n\n        hullNext[i0] = hullPrev[i2] = i1;\n        hullNext[i1] = hullPrev[i0] = i2;\n        hullNext[i2] = hullPrev[i1] = i0;\n\n        hullTri[i0] = 0;\n        hullTri[i1] = 1;\n        hullTri[i2] = 2;\n\n        hullHash.fill(-1);\n        hullHash[this._hashKey(i0x, i0y)] = i0;\n        hullHash[this._hashKey(i1x, i1y)] = i1;\n        hullHash[this._hashKey(i2x, i2y)] = i2;\n\n        this.trianglesLen = 0;\n        this._addTriangle(i0, i1, i2, -1, -1, -1);\n\n        for (let k = 0, xp, yp; k < this._ids.length; k++) {\n            const i = this._ids[k];\n            const x = coords[2 * i];\n            const y = coords[2 * i + 1];\n\n            // skip near-duplicate points\n            if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue;\n            xp = x;\n            yp = y;\n\n            // skip seed triangle points\n            if (i === i0 || i === i1 || i === i2) continue;\n\n            // find a visible edge on the convex hull using edge hash\n            let start = 0;\n            for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) {\n                start = hullHash[(key + j) % this._hashSize];\n                if (start !== -1 && start !== hullNext[start]) break;\n            }\n\n            start = hullPrev[start];\n            let e = start, q;\n            while (q = hullNext[e], orient2d(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1]) >= 0) {\n                e = q;\n                if (e === start) {\n                    e = -1;\n                    break;\n                }\n            }\n            if (e === -1) continue; // likely a near-duplicate point; skip it\n\n            // add the first triangle from the point\n            let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]);\n\n            // recursively flip triangles from the point until they satisfy the Delaunay condition\n            hullTri[i] = this._legalize(t + 2);\n            hullTri[e] = t; // keep track of boundary triangles on the hull\n            hullSize++;\n\n            // walk forward through the hull, adding more triangles and flipping recursively\n            let n = hullNext[e];\n            while (q = hullNext[n], orient2d(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1]) < 0) {\n                t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);\n                hullTri[i] = this._legalize(t + 2);\n                hullNext[n] = n; // mark as removed\n                hullSize--;\n                n = q;\n            }\n\n            // walk backward from the other side, adding more triangles and flipping\n            if (e === start) {\n                while (q = hullPrev[e], orient2d(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1]) < 0) {\n                    t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);\n                    this._legalize(t + 2);\n                    hullTri[q] = t;\n                    hullNext[e] = e; // mark as removed\n                    hullSize--;\n                    e = q;\n                }\n            }\n\n            // update the hull indices\n            this._hullStart = hullPrev[i] = e;\n            hullNext[e] = hullPrev[n] = i;\n            hullNext[i] = n;\n\n            // save the two new edges in the hash table\n            hullHash[this._hashKey(x, y)] = i;\n            hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\n        }\n\n        this.hull = new Uint32Array(hullSize);\n        for (let i = 0, e = this._hullStart; i < hullSize; i++) {\n            this.hull[i] = e;\n            e = hullNext[e];\n        }\n\n        // trim typed triangle mesh arrays\n        this.triangles = this._triangles.subarray(0, this.trianglesLen);\n        this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\n    }\n\n    _hashKey(x, y) {\n        return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\n    }\n\n    _legalize(a) {\n        const {_triangles: triangles, _halfedges: halfedges, coords} = this;\n\n        let i = 0;\n        let ar = 0;\n\n        // recursion eliminated with a fixed-size stack\n        while (true) {\n            const b = halfedges[a];\n\n            /* if the pair of triangles doesn't satisfy the Delaunay condition\n             * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n             * then do the same check/flip recursively for the new pair of triangles\n             *\n             *           pl                    pl\n             *          /||\\                  /  \\\n             *       al/ || \\bl            al/    \\a\n             *        /  ||  \\              /      \\\n             *       /  a||b  \\    flip    /___ar___\\\n             *     p0\\   ||   /p1   =>   p0\\---bl---/p1\n             *        \\  ||  /              \\      /\n             *       ar\\ || /br             b\\    /br\n             *          \\||/                  \\  /\n             *           pr                    pr\n             */\n            const a0 = a - a % 3;\n            ar = a0 + (a + 2) % 3;\n\n            if (b === -1) { // convex hull edge\n                if (i === 0) break;\n                a = EDGE_STACK[--i];\n                continue;\n            }\n\n            const b0 = b - b % 3;\n            const al = a0 + (a + 1) % 3;\n            const bl = b0 + (b + 2) % 3;\n\n            const p0 = triangles[ar];\n            const pr = triangles[a];\n            const pl = triangles[al];\n            const p1 = triangles[bl];\n\n            const illegal = inCircle(\n                coords[2 * p0], coords[2 * p0 + 1],\n                coords[2 * pr], coords[2 * pr + 1],\n                coords[2 * pl], coords[2 * pl + 1],\n                coords[2 * p1], coords[2 * p1 + 1]);\n\n            if (illegal) {\n                triangles[a] = p1;\n                triangles[b] = p0;\n\n                const hbl = halfedges[bl];\n\n                // edge swapped on the other side of the hull (rare); fix the halfedge reference\n                if (hbl === -1) {\n                    let e = this._hullStart;\n                    do {\n                        if (this._hullTri[e] === bl) {\n                            this._hullTri[e] = a;\n                            break;\n                        }\n                        e = this._hullPrev[e];\n                    } while (e !== this._hullStart);\n                }\n                this._link(a, hbl);\n                this._link(b, halfedges[ar]);\n                this._link(ar, bl);\n\n                const br = b0 + (b + 1) % 3;\n\n                // don't worry about hitting the cap: it can only happen on extremely degenerate input\n                if (i < EDGE_STACK.length) {\n                    EDGE_STACK[i++] = br;\n                }\n            } else {\n                if (i === 0) break;\n                a = EDGE_STACK[--i];\n            }\n        }\n\n        return ar;\n    }\n\n    _link(a, b) {\n        this._halfedges[a] = b;\n        if (b !== -1) this._halfedges[b] = a;\n    }\n\n    // add a new triangle given vertex indices and adjacent half-edge ids\n    _addTriangle(i0, i1, i2, a, b, c) {\n        const t = this.trianglesLen;\n\n        this._triangles[t] = i0;\n        this._triangles[t + 1] = i1;\n        this._triangles[t + 2] = i2;\n\n        this._link(t, a);\n        this._link(t + 1, b);\n        this._link(t + 2, c);\n\n        this.trianglesLen += 3;\n\n        return t;\n    }\n}\n\n// monotonically increases with real angle, but doesn't need expensive trigonometry\nfunction pseudoAngle(dx, dy) {\n    const p = dx / (Math.abs(dx) + Math.abs(dy));\n    return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\n}\n\nfunction dist(ax, ay, bx, by) {\n    const dx = ax - bx;\n    const dy = ay - by;\n    return dx * dx + dy * dy;\n}\n\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n    const dx = ax - px;\n    const dy = ay - py;\n    const ex = bx - px;\n    const ey = by - py;\n    const fx = cx - px;\n    const fy = cy - py;\n\n    const ap = dx * dx + dy * dy;\n    const bp = ex * ex + ey * ey;\n    const cp = fx * fx + fy * fy;\n\n    return dx * (ey * cp - bp * fy) -\n           dy * (ex * cp - bp * fx) +\n           ap * (ex * fy - ey * fx) < 0;\n}\n\nfunction circumradius(ax, ay, bx, by, cx, cy) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const ex = cx - ax;\n    const ey = cy - ay;\n\n    const bl = dx * dx + dy * dy;\n    const cl = ex * ex + ey * ey;\n    const d = 0.5 / (dx * ey - dy * ex);\n\n    const x = (ey * bl - dy * cl) * d;\n    const y = (dx * cl - ex * bl) * d;\n\n    return x * x + y * y;\n}\n\nfunction circumcenter(ax, ay, bx, by, cx, cy) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const ex = cx - ax;\n    const ey = cy - ay;\n\n    const bl = dx * dx + dy * dy;\n    const cl = ex * ex + ey * ey;\n    const d = 0.5 / (dx * ey - dy * ex);\n\n    const x = ax + (ey * bl - dy * cl) * d;\n    const y = ay + (dx * cl - ex * bl) * d;\n\n    return {x, y};\n}\n\nfunction quicksort(ids, dists, left, right) {\n    if (right - left <= 20) {\n        for (let i = left + 1; i <= right; i++) {\n            const temp = ids[i];\n            const tempDist = dists[temp];\n            let j = i - 1;\n            while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--];\n            ids[j + 1] = temp;\n        }\n    } else {\n        const median = (left + right) >> 1;\n        let i = left + 1;\n        let j = right;\n        swap(ids, median, i);\n        if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right);\n        if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right);\n        if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i);\n\n        const temp = ids[i];\n        const tempDist = dists[temp];\n        while (true) {\n            do i++; while (dists[ids[i]] < tempDist);\n            do j--; while (dists[ids[j]] > tempDist);\n            if (j < i) break;\n            swap(ids, i, j);\n        }\n        ids[left + 1] = ids[j];\n        ids[j] = temp;\n\n        if (right - i + 1 >= j - left) {\n            quicksort(ids, dists, i, right);\n            quicksort(ids, dists, left, j - 1);\n        } else {\n            quicksort(ids, dists, left, j - 1);\n            quicksort(ids, dists, i, right);\n        }\n    }\n}\n\nfunction swap(arr, i, j) {\n    const tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n\nfunction defaultGetX(p) {\n    return p[0];\n}\nfunction defaultGetY(p) {\n    return p[1];\n}\n","const epsilon = 1e-6;\n\nexport default class Path {\n  constructor() {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n  }\n  moveTo(x, y) {\n    this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  }\n  lineTo(x, y) {\n    this._ += `L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arc(x, y, r) {\n    x = +x, y = +y, r = +r;\n    const x0 = x + r;\n    const y0 = y;\n    if (r < 0) throw new Error(\"negative radius\");\n    if (this._x1 === null) this._ += `M${x0},${y0}`;\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += \"L\" + x0 + \",\" + y0;\n    if (!r) return;\n    this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\n  }\n  rect(x, y, w, h) {\n    this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;\n  }\n  value() {\n    return this._ || null;\n  }\n}\n","export default class Polygon {\n  constructor() {\n    this._ = [];\n  }\n  moveTo(x, y) {\n    this._.push([x, y]);\n  }\n  closePath() {\n    this._.push(this._[0].slice());\n  }\n  lineTo(x, y) {\n    this._.push([x, y]);\n  }\n  value() {\n    return this._.length ? this._ : null;\n  }\n}\n","import Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\n\nexport default class Voronoi {\n  constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\n    if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\n    this.delaunay = delaunay;\n    this._circumcenters = new Float64Array(delaunay.points.length * 2);\n    this.vectors = new Float64Array(delaunay.points.length * 2);\n    this.xmax = xmax, this.xmin = xmin;\n    this.ymax = ymax, this.ymin = ymin;\n    this._init();\n  }\n  update() {\n    this.delaunay.update();\n    this._init();\n    return this;\n  }\n  _init() {\n    const {delaunay: {points, hull, triangles}, vectors} = this;\n    let bx, by; // lazily computed barycenter of the hull\n\n    // Compute circumcenters.\n    const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\n    for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\n      const t1 = triangles[i] * 2;\n      const t2 = triangles[i + 1] * 2;\n      const t3 = triangles[i + 2] * 2;\n      const x1 = points[t1];\n      const y1 = points[t1 + 1];\n      const x2 = points[t2];\n      const y2 = points[t2 + 1];\n      const x3 = points[t3];\n      const y3 = points[t3 + 1];\n\n      const dx = x2 - x1;\n      const dy = y2 - y1;\n      const ex = x3 - x1;\n      const ey = y3 - y1;\n      const ab = (dx * ey - dy * ex) * 2;\n\n      if (Math.abs(ab) < 1e-9) {\n        // For a degenerate triangle, the circumcenter is at the infinity, in a\n        // direction orthogonal to the halfedge and away from the “center” of\n        // the diagram <bx, by>, defined as the hull’s barycenter.\n        if (bx === undefined) {\n          bx = by = 0;\n          for (const i of hull) bx += points[i * 2], by += points[i * 2 + 1];\n          bx /= hull.length, by /= hull.length;\n        }\n        const a = 1e9 * Math.sign((bx - x1) * ey - (by - y1) * ex);\n        x = (x1 + x3) / 2 - a * ey;\n        y = (y1 + y3) / 2 + a * ex;\n      } else {\n        const d = 1 / ab;\n        const bl = dx * dx + dy * dy;\n        const cl = ex * ex + ey * ey;\n        x = x1 + (ey * bl - dy * cl) * d;\n        y = y1 + (dx * cl - ex * bl) * d;\n      }\n      circumcenters[j] = x;\n      circumcenters[j + 1] = y;\n    }\n\n    // Compute exterior cell rays.\n    let h = hull[hull.length - 1];\n    let p0, p1 = h * 4;\n    let x0, x1 = points[2 * h];\n    let y0, y1 = points[2 * h + 1];\n    vectors.fill(0);\n    for (let i = 0; i < hull.length; ++i) {\n      h = hull[i];\n      p0 = p1, x0 = x1, y0 = y1;\n      p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\n      vectors[p0 + 2] = vectors[p1] = y0 - y1;\n      vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\n    }\n  }\n  render(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\n    if (hull.length <= 1) return null;\n    for (let i = 0, n = halfedges.length; i < n; ++i) {\n      const j = halfedges[i];\n      if (j < i) continue;\n      const ti = Math.floor(i / 3) * 2;\n      const tj = Math.floor(j / 3) * 2;\n      const xi = circumcenters[ti];\n      const yi = circumcenters[ti + 1];\n      const xj = circumcenters[tj];\n      const yj = circumcenters[tj + 1];\n      this._renderSegment(xi, yi, xj, yj, context);\n    }\n    let h0, h1 = hull[hull.length - 1];\n    for (let i = 0; i < hull.length; ++i) {\n      h0 = h1, h1 = hull[i];\n      const t = Math.floor(inedges[h1] / 3) * 2;\n      const x = circumcenters[t];\n      const y = circumcenters[t + 1];\n      const v = h0 * 4;\n      const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\n      if (p) this._renderSegment(x, y, p[0], p[1], context);\n    }\n    return buffer && buffer.value();\n  }\n  renderBounds(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\n    return buffer && buffer.value();\n  }\n  renderCell(i, context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const points = this._clip(i);\n    if (points === null || !points.length) return;\n    context.moveTo(points[0], points[1]);\n    let n = points.length;\n    while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\n    for (let i = 2; i < n; i += 2) {\n      if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\n        context.lineTo(points[i], points[i + 1]);\n    }\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  *cellPolygons() {\n    const {delaunay: {points}} = this;\n    for (let i = 0, n = points.length / 2; i < n; ++i) {\n      const cell = this.cellPolygon(i);\n      if (cell) cell.index = i, yield cell;\n    }\n  }\n  cellPolygon(i) {\n    const polygon = new Polygon;\n    this.renderCell(i, polygon);\n    return polygon.value();\n  }\n  _renderSegment(x0, y0, x1, y1, context) {\n    let S;\n    const c0 = this._regioncode(x0, y0);\n    const c1 = this._regioncode(x1, y1);\n    if (c0 === 0 && c1 === 0) {\n      context.moveTo(x0, y0);\n      context.lineTo(x1, y1);\n    } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\n      context.moveTo(S[0], S[1]);\n      context.lineTo(S[2], S[3]);\n    }\n  }\n  contains(i, x, y) {\n    if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\n    return this.delaunay._step(i, x, y) === i;\n  }\n  *neighbors(i) {\n    const ci = this._clip(i);\n    if (ci) for (const j of this.delaunay.neighbors(i)) {\n      const cj = this._clip(j);\n      // find the common edge\n      if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\n        for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\n          if (ci[ai] === cj[aj]\n              && ci[ai + 1] === cj[aj + 1]\n              && ci[(ai + 2) % li] === cj[(aj + lj - 2) % lj]\n              && ci[(ai + 3) % li] === cj[(aj + lj - 1) % lj]) {\n            yield j;\n            break loop;\n          }\n        }\n      }\n    }\n  }\n  _cell(i) {\n    const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\n    const e0 = inedges[i];\n    if (e0 === -1) return null; // coincident point\n    const points = [];\n    let e = e0;\n    do {\n      const t = Math.floor(e / 3);\n      points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) break; // bad triangulation\n      e = halfedges[e];\n    } while (e !== e0 && e !== -1);\n    return points;\n  }\n  _clip(i) {\n    // degenerate case (1 valid point: return the box)\n    if (i === 0 && this.delaunay.hull.length === 1) {\n      return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n    }\n    const points = this._cell(i);\n    if (points === null) return null;\n    const {vectors: V} = this;\n    const v = i * 4;\n    return this._simplify(V[v] || V[v + 1]\n        ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\n        : this._clipFinite(i, points));\n  }\n  _clipFinite(i, points) {\n    const n = points.length;\n    let P = null;\n    let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\n    let c0, c1 = this._regioncode(x1, y1);\n    let e0, e1 = 0;\n    for (let j = 0; j < n; j += 2) {\n      x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\n      c0 = c1, c1 = this._regioncode(x1, y1);\n      if (c0 === 0 && c1 === 0) {\n        e0 = e1, e1 = 0;\n        if (P) P.push(x1, y1);\n        else P = [x1, y1];\n      } else {\n        let S, sx0, sy0, sx1, sy1;\n        if (c0 === 0) {\n          if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\n          [sx0, sy0, sx1, sy1] = S;\n        } else {\n          if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\n          [sx1, sy1, sx0, sy0] = S;\n          e0 = e1, e1 = this._edgecode(sx0, sy0);\n          if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n          if (P) P.push(sx0, sy0);\n          else P = [sx0, sy0];\n        }\n        e0 = e1, e1 = this._edgecode(sx1, sy1);\n        if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n        if (P) P.push(sx1, sy1);\n        else P = [sx1, sy1];\n      }\n    }\n    if (P) {\n      e0 = e1, e1 = this._edgecode(P[0], P[1]);\n      if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n    } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n      return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n    }\n    return P;\n  }\n  _clipSegment(x0, y0, x1, y1, c0, c1) {\n    // for more robustness, always consider the segment in the same order\n    const flip = c0 < c1;\n    if (flip) [x0, y0, x1, y1, c0, c1] = [x1, y1, x0, y0, c1, c0];\n    while (true) {\n      if (c0 === 0 && c1 === 0) return flip ? [x1, y1, x0, y0] : [x0, y0, x1, y1];\n      if (c0 & c1) return null;\n      let x, y, c = c0 || c1;\n      if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\n      else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\n      else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\n      else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\n      if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\n      else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\n    }\n  }\n  _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\n    let P = Array.from(points), p;\n    if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\n    if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\n    if (P = this._clipFinite(i, P)) {\n      for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\n        c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\n        if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\n      }\n    } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n      P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\n    }\n    return P;\n  }\n  _edge(i, e0, e1, P, j) {\n    while (e0 !== e1) {\n      let x, y;\n      switch (e0) {\n        case 0b0101: e0 = 0b0100; continue; // top-left\n        case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\n        case 0b0110: e0 = 0b0010; continue; // top-right\n        case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\n        case 0b1010: e0 = 0b1000; continue; // bottom-right\n        case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\n        case 0b1001: e0 = 0b0001; continue; // bottom-left\n        case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\n      }\n      // Note: this implicitly checks for out of bounds: if P[j] or P[j+1] are\n      // undefined, the conditional statement will be executed.\n      if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\n        P.splice(j, 0, x, y), j += 2;\n      }\n    }\n    return j;\n  }\n  _project(x0, y0, vx, vy) {\n    let t = Infinity, c, x, y;\n    if (vy < 0) { // top\n      if (y0 <= this.ymin) return null;\n      if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\n    } else if (vy > 0) { // bottom\n      if (y0 >= this.ymax) return null;\n      if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\n    }\n    if (vx > 0) { // right\n      if (x0 >= this.xmax) return null;\n      if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\n    } else if (vx < 0) { // left\n      if (x0 <= this.xmin) return null;\n      if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\n    }\n    return [x, y];\n  }\n  _edgecode(x, y) {\n    return (x === this.xmin ? 0b0001\n        : x === this.xmax ? 0b0010 : 0b0000)\n        | (y === this.ymin ? 0b0100\n        : y === this.ymax ? 0b1000 : 0b0000);\n  }\n  _regioncode(x, y) {\n    return (x < this.xmin ? 0b0001\n        : x > this.xmax ? 0b0010 : 0b0000)\n        | (y < this.ymin ? 0b0100\n        : y > this.ymax ? 0b1000 : 0b0000);\n  }\n  _simplify(P) {\n    if (P && P.length > 4) {\n      for (let i = 0; i < P.length; i+= 2) {\n        const j = (i + 2) % P.length, k = (i + 4) % P.length;\n        if (P[i] === P[j] && P[j] === P[k] || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1]) {\n          P.splice(j, 2), i -= 2;\n        }\n      }\n      if (!P.length) P = null;\n    }\n    return P;\n  }\n}\n","import Delaunator from \"delaunator\";\nimport Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\nimport Voronoi from \"./voronoi.js\";\n\nconst tau = 2 * Math.PI, pow = Math.pow;\n\nfunction pointX(p) {\n  return p[0];\n}\n\nfunction pointY(p) {\n  return p[1];\n}\n\n// A triangulation is collinear if all its triangles have a non-null area\nfunction collinear(d) {\n  const {triangles, coords} = d;\n  for (let i = 0; i < triangles.length; i += 3) {\n    const a = 2 * triangles[i],\n          b = 2 * triangles[i + 1],\n          c = 2 * triangles[i + 2],\n          cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\n                - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\n    if (cross > 1e-10) return false;\n  }\n  return true;\n}\n\nfunction jitter(x, y, r) {\n  return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n}\n\nexport default class Delaunay {\n  static from(points, fx = pointX, fy = pointY, that) {\n    return new Delaunay(\"length\" in points\n        ? flatArray(points, fx, fy, that)\n        : Float64Array.from(flatIterable(points, fx, fy, that)));\n  }\n  constructor(points) {\n    this._delaunator = new Delaunator(points);\n    this.inedges = new Int32Array(points.length / 2);\n    this._hullIndex = new Int32Array(points.length / 2);\n    this.points = this._delaunator.coords;\n    this._init();\n  }\n  update() {\n    this._delaunator.update();\n    this._init();\n    return this;\n  }\n  _init() {\n    const d = this._delaunator, points = this.points;\n\n    // check for collinear\n    if (d.hull && d.hull.length > 2 && collinear(d)) {\n      this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\n        .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\n      const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\n        bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\n        r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\n      for (let i = 0, n = points.length / 2; i < n; ++i) {\n        const p = jitter(points[2 * i], points[2 * i + 1], r);\n        points[2 * i] = p[0];\n        points[2 * i + 1] = p[1];\n      }\n      this._delaunator = new Delaunator(points);\n    } else {\n      delete this.collinear;\n    }\n\n    const halfedges = this.halfedges = this._delaunator.halfedges;\n    const hull = this.hull = this._delaunator.hull;\n    const triangles = this.triangles = this._delaunator.triangles;\n    const inedges = this.inedges.fill(-1);\n    const hullIndex = this._hullIndex.fill(-1);\n\n    // Compute an index from each point to an (arbitrary) incoming halfedge\n    // Used to give the first neighbor of each point; for this reason,\n    // on the hull we give priority to exterior halfedges\n    for (let e = 0, n = halfedges.length; e < n; ++e) {\n      const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\n      if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\n    }\n    for (let i = 0, n = hull.length; i < n; ++i) {\n      hullIndex[hull[i]] = i;\n    }\n\n    // degenerate case: 1 or 2 (distinct) points\n    if (hull.length <= 2 && hull.length > 0) {\n      this.triangles = new Int32Array(3).fill(-1);\n      this.halfedges = new Int32Array(3).fill(-1);\n      this.triangles[0] = hull[0];\n      inedges[hull[0]] = 1;\n      if (hull.length === 2) {\n        inedges[hull[1]] = 0;\n        this.triangles[1] = hull[1];\n        this.triangles[2] = hull[1];\n      }\n    }\n  }\n  voronoi(bounds) {\n    return new Voronoi(this, bounds);\n  }\n  *neighbors(i) {\n    const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\n\n    // degenerate case with several collinear points\n    if (collinear) {\n      const l = collinear.indexOf(i);\n      if (l > 0) yield collinear[l - 1];\n      if (l < collinear.length - 1) yield collinear[l + 1];\n      return;\n    }\n\n    const e0 = inedges[i];\n    if (e0 === -1) return; // coincident point\n    let e = e0, p0 = -1;\n    do {\n      yield p0 = triangles[e];\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) return; // bad triangulation\n      e = halfedges[e];\n      if (e === -1) {\n        const p = hull[(_hullIndex[i] + 1) % hull.length];\n        if (p !== p0) yield p;\n        return;\n      }\n    } while (e !== e0);\n  }\n  find(x, y, i = 0) {\n    if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n    const i0 = i;\n    let c;\n    while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\n    return c;\n  }\n  _step(i, x, y) {\n    const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\n    if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n    let c = i;\n    let dc = pow(x - points[i * 2], 2) + pow(y - points[i * 2 + 1], 2);\n    const e0 = inedges[i];\n    let e = e0;\n    do {\n      let t = triangles[e];\n      const dt = pow(x - points[t * 2], 2) + pow(y - points[t * 2 + 1], 2);\n      if (dt < dc) dc = dt, c = t;\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) break; // bad triangulation\n      e = halfedges[e];\n      if (e === -1) {\n        e = hull[(_hullIndex[i] + 1) % hull.length];\n        if (e !== t) {\n          if (pow(x - points[e * 2], 2) + pow(y - points[e * 2 + 1], 2) < dc) return e;\n        }\n        break;\n      }\n    } while (e !== e0);\n    return c;\n  }\n  render(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {points, halfedges, triangles} = this;\n    for (let i = 0, n = halfedges.length; i < n; ++i) {\n      const j = halfedges[i];\n      if (j < i) continue;\n      const ti = triangles[i] * 2;\n      const tj = triangles[j] * 2;\n      context.moveTo(points[ti], points[ti + 1]);\n      context.lineTo(points[tj], points[tj + 1]);\n    }\n    this.renderHull(context);\n    return buffer && buffer.value();\n  }\n  renderPoints(context, r) {\n    if (r === undefined && (!context || typeof context.moveTo !== \"function\")) r = context, context = null;\n    r = r == undefined ? 2 : +r;\n    const buffer = context == null ? context = new Path : undefined;\n    const {points} = this;\n    for (let i = 0, n = points.length; i < n; i += 2) {\n      const x = points[i], y = points[i + 1];\n      context.moveTo(x + r, y);\n      context.arc(x, y, r, 0, tau);\n    }\n    return buffer && buffer.value();\n  }\n  renderHull(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {hull, points} = this;\n    const h = hull[0] * 2, n = hull.length;\n    context.moveTo(points[h], points[h + 1]);\n    for (let i = 1; i < n; ++i) {\n      const h = 2 * hull[i];\n      context.lineTo(points[h], points[h + 1]);\n    }\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  hullPolygon() {\n    const polygon = new Polygon;\n    this.renderHull(polygon);\n    return polygon.value();\n  }\n  renderTriangle(i, context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {points, triangles} = this;\n    const t0 = triangles[i *= 3] * 2;\n    const t1 = triangles[i + 1] * 2;\n    const t2 = triangles[i + 2] * 2;\n    context.moveTo(points[t0], points[t0 + 1]);\n    context.lineTo(points[t1], points[t1 + 1]);\n    context.lineTo(points[t2], points[t2 + 1]);\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  *trianglePolygons() {\n    const {triangles} = this;\n    for (let i = 0, n = triangles.length / 3; i < n; ++i) {\n      yield this.trianglePolygon(i);\n    }\n  }\n  trianglePolygon(i) {\n    const polygon = new Polygon;\n    this.renderTriangle(i, polygon);\n    return polygon.value();\n  }\n}\n\nfunction flatArray(points, fx, fy, that) {\n  const n = points.length;\n  const array = new Float64Array(n * 2);\n  for (let i = 0; i < n; ++i) {\n    const p = points[i];\n    array[i * 2] = fx.call(that, p, i, points);\n    array[i * 2 + 1] = fy.call(that, p, i, points);\n  }\n  return array;\n}\n\nfunction* flatIterable(points, fx, fy, that) {\n  let i = 0;\n  for (const p of points) {\n    yield fx.call(that, p, i, points);\n    yield fy.call(that, p, i, points);\n    ++i;\n  }\n}\n","export default x => () => x;\n","export default function DragEvent(type, {\n  sourceEvent,\n  subject,\n  target,\n  identifier,\n  active,\n  x, y, dx, dy,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    subject: {value: subject, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    identifier: {value: identifier, enumerable: true, configurable: true},\n    active: {value: active, enumerable: true, configurable: true},\n    x: {value: x, enumerable: true, configurable: true},\n    y: {value: y, enumerable: true, configurable: true},\n    dx: {value: dx, enumerable: true, configurable: true},\n    dy: {value: dy, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n\nDragEvent.prototype.on = function() {\n  var value = this._.on.apply(this._, arguments);\n  return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n  return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n  return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      container = defaultContainer,\n      subject = defaultSubject,\n      touchable = defaultTouchable,\n      gestures = {},\n      listeners = dispatch(\"start\", \"drag\", \"end\"),\n      active = 0,\n      mousedownx,\n      mousedowny,\n      mousemoving,\n      touchending,\n      clickDistance2 = 0;\n\n  function drag(selection) {\n    selection\n        .on(\"mousedown.drag\", mousedowned)\n      .filter(touchable)\n        .on(\"touchstart.drag\", touchstarted)\n        .on(\"touchmove.drag\", touchmoved, nonpassive)\n        .on(\"touchend.drag touchcancel.drag\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  function mousedowned(event, d) {\n    if (touchending || !filter.call(this, event, d)) return;\n    var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n    if (!gesture) return;\n    select(event.view)\n      .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n      .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n    nodrag(event.view);\n    nopropagation(event);\n    mousemoving = false;\n    mousedownx = event.clientX;\n    mousedowny = event.clientY;\n    gesture(\"start\", event);\n  }\n\n  function mousemoved(event) {\n    noevent(event);\n    if (!mousemoving) {\n      var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n      mousemoving = dx * dx + dy * dy > clickDistance2;\n    }\n    gestures.mouse(\"drag\", event);\n  }\n\n  function mouseupped(event) {\n    select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n    yesdrag(event.view, mousemoving);\n    noevent(event);\n    gestures.mouse(\"end\", event);\n  }\n\n  function touchstarted(event, d) {\n    if (!filter.call(this, event, d)) return;\n    var touches = event.changedTouches,\n        c = container.call(this, event, d),\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n        nopropagation(event);\n        gesture(\"start\", event, touches[i]);\n      }\n    }\n  }\n\n  function touchmoved(event) {\n    var touches = event.changedTouches,\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches[i].identifier]) {\n        noevent(event);\n        gesture(\"drag\", event, touches[i]);\n      }\n    }\n  }\n\n  function touchended(event) {\n    var touches = event.changedTouches,\n        n = touches.length, i, gesture;\n\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches[i].identifier]) {\n        nopropagation(event);\n        gesture(\"end\", event, touches[i]);\n      }\n    }\n  }\n\n  function beforestart(that, container, event, d, identifier, touch) {\n    var dispatch = listeners.copy(),\n        p = pointer(touch || event, container), dx, dy,\n        s;\n\n    if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n        sourceEvent: event,\n        target: drag,\n        identifier,\n        active,\n        x: p[0],\n        y: p[1],\n        dx: 0,\n        dy: 0,\n        dispatch\n      }), d)) == null) return;\n\n    dx = s.x - p[0] || 0;\n    dy = s.y - p[1] || 0;\n\n    return function gesture(type, event, touch) {\n      var p0 = p, n;\n      switch (type) {\n        case \"start\": gestures[identifier] = gesture, n = active++; break;\n        case \"end\": delete gestures[identifier], --active; // falls through\n        case \"drag\": p = pointer(touch || event, container), n = active; break;\n      }\n      dispatch.call(\n        type,\n        that,\n        new DragEvent(type, {\n          sourceEvent: event,\n          subject: s,\n          target: drag,\n          identifier,\n          active: n,\n          x: p[0] + dx,\n          y: p[1] + dy,\n          dx: p[0] - p0[0],\n          dy: p[1] - p0[1],\n          dispatch\n        }),\n        d\n      );\n    };\n  }\n\n  drag.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n  };\n\n  drag.container = function(_) {\n    return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n  };\n\n  drag.subject = function(_) {\n    return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n  };\n\n  drag.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n  };\n\n  drag.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? drag : value;\n  };\n\n  drag.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n  };\n\n  return drag;\n}\n","var EOL = {},\n    EOF = {},\n    QUOTE = 34,\n    NEWLINE = 10,\n    RETURN = 13;\n\nfunction objectConverter(columns) {\n  return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n    return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n  }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n  var object = objectConverter(columns);\n  return function(row, i) {\n    return f(object(row), i, columns);\n  };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n  var columnSet = Object.create(null),\n      columns = [];\n\n  rows.forEach(function(row) {\n    for (var column in row) {\n      if (!(column in columnSet)) {\n        columns.push(columnSet[column] = column);\n      }\n    }\n  });\n\n  return columns;\n}\n\nfunction pad(value, width) {\n  var s = value + \"\", length = s.length;\n  return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n  return year < 0 ? \"-\" + pad(-year, 6)\n    : year > 9999 ? \"+\" + pad(year, 6)\n    : pad(year, 4);\n}\n\nfunction formatDate(date) {\n  var hours = date.getUTCHours(),\n      minutes = date.getUTCMinutes(),\n      seconds = date.getUTCSeconds(),\n      milliseconds = date.getUTCMilliseconds();\n  return isNaN(date) ? \"Invalid Date\"\n      : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n      + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n      : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n      : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n      : \"\");\n}\n\nexport default function(delimiter) {\n  var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n      DELIMITER = delimiter.charCodeAt(0);\n\n  function parse(text, f) {\n    var convert, columns, rows = parseRows(text, function(row, i) {\n      if (convert) return convert(row, i - 1);\n      columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n    });\n    rows.columns = columns || [];\n    return rows;\n  }\n\n  function parseRows(text, f) {\n    var rows = [], // output rows\n        N = text.length,\n        I = 0, // current character index\n        n = 0, // current line number\n        t, // current token\n        eof = N <= 0, // current token followed by EOF?\n        eol = false; // current token followed by EOL?\n\n    // Strip the trailing newline.\n    if (text.charCodeAt(N - 1) === NEWLINE) --N;\n    if (text.charCodeAt(N - 1) === RETURN) --N;\n\n    function token() {\n      if (eof) return EOF;\n      if (eol) return eol = false, EOL;\n\n      // Unescape quotes.\n      var i, j = I, c;\n      if (text.charCodeAt(j) === QUOTE) {\n        while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n        if ((i = I) >= N) eof = true;\n        else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n      }\n\n      // Find next delimiter or newline.\n      while (I < N) {\n        if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        else if (c !== DELIMITER) continue;\n        return text.slice(j, i);\n      }\n\n      // Return last token before EOF.\n      return eof = true, text.slice(j, N);\n    }\n\n    while ((t = token()) !== EOF) {\n      var row = [];\n      while (t !== EOL && t !== EOF) row.push(t), t = token();\n      if (f && (row = f(row, n++)) == null) continue;\n      rows.push(row);\n    }\n\n    return rows;\n  }\n\n  function preformatBody(rows, columns) {\n    return rows.map(function(row) {\n      return columns.map(function(column) {\n        return formatValue(row[column]);\n      }).join(delimiter);\n    });\n  }\n\n  function format(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n  }\n\n  function formatBody(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return preformatBody(rows, columns).join(\"\\n\");\n  }\n\n  function formatRows(rows) {\n    return rows.map(formatRow).join(\"\\n\");\n  }\n\n  function formatRow(row) {\n    return row.map(formatValue).join(delimiter);\n  }\n\n  function formatValue(value) {\n    return value == null ? \"\"\n        : value instanceof Date ? formatDate(value)\n        : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n        : value;\n  }\n\n  return {\n    parse: parse,\n    parseRows: parseRows,\n    format: format,\n    formatBody: formatBody,\n    formatRows: formatRows,\n    formatRow: formatRow,\n    formatValue: formatValue\n  };\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","import dsv from \"./dsv.js\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n","export default function autoType(object) {\n  for (var key in object) {\n    var value = object[key].trim(), number, m;\n    if (!value) value = null;\n    else if (value === \"true\") value = true;\n    else if (value === \"false\") value = false;\n    else if (value === \"NaN\") value = NaN;\n    else if (!isNaN(number = +value)) value = number;\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})?)?$/)) {\n      if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, \"/\").replace(/T/, \" \");\n      value = new Date(value);\n    }\n    else continue;\n    object[key] = value;\n  }\n  return object;\n}\n\n// https://github.com/d3/d3-dsv/issues/45\nconst fixtz = new Date(\"2019-01-01T00:00\").getHours() || new Date(\"2019-07-01T00:00\").getHours();","export const linear = t => +t;\n","export function quadIn(t) {\n  return t * t;\n}\n\nexport function quadOut(t) {\n  return t * (2 - t);\n}\n\nexport function quadInOut(t) {\n  return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n  e = +e;\n\n  function polyIn(t) {\n    return Math.pow(t, e);\n  }\n\n  polyIn.exponent = custom;\n\n  return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n  e = +e;\n\n  function polyOut(t) {\n    return 1 - Math.pow(1 - t, e);\n  }\n\n  polyOut.exponent = custom;\n\n  return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n  e = +e;\n\n  function polyInOut(t) {\n    return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n  }\n\n  polyInOut.exponent = custom;\n\n  return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n    halfPi = pi / 2;\n\nexport function sinIn(t) {\n  return (+t === 1) ? 1 : 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n  return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n  return (1 - Math.cos(pi * t)) / 2;\n}\n","// tpmt is two power minus ten times t scaled to [0,1]\nexport function tpmt(x) {\n  return (Math.pow(2, -10 * x) - 0.0009765625) * 1.0009775171065494;\n}\n","import {tpmt} from \"./math.js\";\n\nexport function expIn(t) {\n  return tpmt(1 - +t);\n}\n\nexport function expOut(t) {\n  return 1 - tpmt(t);\n}\n\nexport function expInOut(t) {\n  return ((t *= 2) <= 1 ? tpmt(1 - t) : 2 - tpmt(t - 1)) / 2;\n}\n","export function circleIn(t) {\n  return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n  return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n  return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","var b1 = 4 / 11,\n    b2 = 6 / 11,\n    b3 = 8 / 11,\n    b4 = 3 / 4,\n    b5 = 9 / 11,\n    b6 = 10 / 11,\n    b7 = 15 / 16,\n    b8 = 21 / 22,\n    b9 = 63 / 64,\n    b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n  return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\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;\n}\n\nexport function bounceInOut(t) {\n  return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n  s = +s;\n\n  function backIn(t) {\n    return (t = +t) * t * (s * (t - 1) + t);\n  }\n\n  backIn.overshoot = custom;\n\n  return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n  s = +s;\n\n  function backOut(t) {\n    return --t * t * ((t + 1) * s + t) + 1;\n  }\n\n  backOut.overshoot = custom;\n\n  return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n  s = +s;\n\n  function backInOut(t) {\n    return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n  }\n\n  backInOut.overshoot = custom;\n\n  return backInOut;\n})(overshoot);\n","import {tpmt} from \"./math.js\";\n\nvar tau = 2 * Math.PI,\n    amplitude = 1,\n    period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticIn(t) {\n    return a * tpmt(-(--t)) * Math.sin((s - t) / p);\n  }\n\n  elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n  elasticIn.period = function(p) { return custom(a, p); };\n\n  return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticOut(t) {\n    return 1 - a * tpmt(t = +t) * Math.sin((t + s) / p);\n  }\n\n  elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n  elasticOut.period = function(p) { return custom(a, p); };\n\n  return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticInOut(t) {\n    return ((t = t * 2 - 1) < 0\n        ? a * tpmt(-t) * Math.sin((s - t) / p)\n        : 2 - a * tpmt(t) * Math.sin((s + t) / p)) / 2;\n  }\n\n  elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n  elasticInOut.period = function(p) { return custom(a, p); };\n\n  return elasticInOut;\n})(amplitude, period);\n","function responseBlob(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.blob();\n}\n\nexport default function(input, init) {\n  return fetch(input, init).then(responseBlob);\n}\n","function responseArrayBuffer(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.arrayBuffer();\n}\n\nexport default function(input, init) {\n  return fetch(input, init).then(responseArrayBuffer);\n}\n","function responseText(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.text();\n}\n\nexport default function(input, init) {\n  return fetch(input, init).then(responseText);\n}\n","import {csvParse, dsvFormat, tsvParse} from \"d3-dsv\";\nimport text from \"./text.js\";\n\nfunction dsvParse(parse) {\n  return function(input, init, row) {\n    if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n    return text(input, init).then(function(response) {\n      return parse(response, row);\n    });\n  };\n}\n\nexport default function dsv(delimiter, input, init, row) {\n  if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n  var format = dsvFormat(delimiter);\n  return text(input, init).then(function(response) {\n    return format.parse(response, row);\n  });\n}\n\nexport var csv = dsvParse(csvParse);\nexport var tsv = dsvParse(tsvParse);\n","export default function(input, init) {\n  return new Promise(function(resolve, reject) {\n    var image = new Image;\n    for (var key in init) image[key] = init[key];\n    image.onerror = reject;\n    image.onload = function() { resolve(image); };\n    image.src = input;\n  });\n}\n","function responseJson(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  if (response.status === 204 || response.status === 205) return;\n  return response.json();\n}\n\nexport default function(input, init) {\n  return fetch(input, init).then(responseJson);\n}\n","import text from \"./text.js\";\n\nfunction parser(type) {\n  return (input, init) => text(input, init)\n    .then(text => (new DOMParser).parseFromString(text, type));\n}\n\nexport default parser(\"application/xml\");\n\nexport var html = parser(\"text/html\");\n\nexport var svg = parser(\"image/svg+xml\");\n","export default function(x, y) {\n  var nodes, strength = 1;\n\n  if (x == null) x = 0;\n  if (y == null) y = 0;\n\n  function force() {\n    var i,\n        n = nodes.length,\n        node,\n        sx = 0,\n        sy = 0;\n\n    for (i = 0; i < n; ++i) {\n      node = nodes[i], sx += node.x, sy += node.y;\n    }\n\n    for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n      node = nodes[i], node.x -= sx, node.y -= sy;\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = +_, force) : x;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = +_, force) : y;\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = +_, force) : strength;\n  };\n\n  return force;\n}\n","export default function(d) {\n  const x = +this._x.call(null, d),\n      y = +this._y.call(null, d);\n  return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n  var parent,\n      node = tree._root,\n      leaf = {data: d},\n      x0 = tree._x0,\n      y0 = tree._y0,\n      x1 = tree._x1,\n      y1 = tree._y1,\n      xm,\n      ym,\n      xp,\n      yp,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return tree._root = leaf, tree;\n\n  // Find the existing leaf for the new point, or add it.\n  while (node.length) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n  }\n\n  // Is the new point is exactly coincident with the existing point?\n  xp = +tree._x.call(null, node.data);\n  yp = +tree._y.call(null, node.data);\n  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n  // Otherwise, split the leaf node until the old and new point are separated.\n  do {\n    parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n  return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n  var d, i, n = data.length,\n      x,\n      y,\n      xz = new Array(n),\n      yz = new Array(n),\n      x0 = Infinity,\n      y0 = Infinity,\n      x1 = -Infinity,\n      y1 = -Infinity;\n\n  // Compute the points and their extent.\n  for (i = 0; i < n; ++i) {\n    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n    xz[i] = x;\n    yz[i] = y;\n    if (x < x0) x0 = x;\n    if (x > x1) x1 = x;\n    if (y < y0) y0 = y;\n    if (y > y1) y1 = y;\n  }\n\n  // If there were no (valid) points, abort.\n  if (x0 > x1 || y0 > y1) return this;\n\n  // Expand the tree to cover the new points.\n  this.cover(x0, y0).cover(x1, y1);\n\n  // Add the new points.\n  for (i = 0; i < n; ++i) {\n    add(this, xz[i], yz[i], data[i]);\n  }\n\n  return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n  this.node = node;\n  this.x0 = x0;\n  this.y0 = y0;\n  this.x1 = x1;\n  this.y1 = y1;\n}\n","export function defaultX(d) {\n  return d[0];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n  return d[1];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n  var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n  return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n  this._x = x;\n  this._y = y;\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n  var copy = {data: leaf.data}, next = copy;\n  while (leaf = leaf.next) next = next.next = {data: leaf.data};\n  return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n      node = this._root,\n      nodes,\n      child;\n\n  if (!node) return copy;\n\n  if (!node.length) return copy._root = leaf_copy(node), copy;\n\n  nodes = [{source: node, target: copy._root = new Array(4)}];\n  while (node = nodes.pop()) {\n    for (var i = 0; i < 4; ++i) {\n      if (child = node.source[i]) {\n        if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n        else node.target[i] = leaf_copy(child);\n      }\n    }\n  }\n\n  return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function(random) {\n  return (random() - 0.5) * 1e-6;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n  return d.x + d.vx;\n}\n\nfunction y(d) {\n  return d.y + d.vy;\n}\n\nexport default function(radius) {\n  var nodes,\n      radii,\n      random,\n      strength = 1,\n      iterations = 1;\n\n  if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n  function force() {\n    var i, n = nodes.length,\n        tree,\n        node,\n        xi,\n        yi,\n        ri,\n        ri2;\n\n    for (var k = 0; k < iterations; ++k) {\n      tree = quadtree(nodes, x, y).visitAfter(prepare);\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        ri = radii[node.index], ri2 = ri * ri;\n        xi = node.x + node.vx;\n        yi = node.y + node.vy;\n        tree.visit(apply);\n      }\n    }\n\n    function apply(quad, x0, y0, x1, y1) {\n      var data = quad.data, rj = quad.r, r = ri + rj;\n      if (data) {\n        if (data.index > node.index) {\n          var x = xi - data.x - data.vx,\n              y = yi - data.y - data.vy,\n              l = x * x + y * y;\n          if (l < r * r) {\n            if (x === 0) x = jiggle(random), l += x * x;\n            if (y === 0) y = jiggle(random), l += y * y;\n            l = (r - (l = Math.sqrt(l))) / l * strength;\n            node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n            node.vy += (y *= l) * r;\n            data.vx -= x * (r = 1 - r);\n            data.vy -= y * r;\n          }\n        }\n        return;\n      }\n      return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n    }\n  }\n\n  function prepare(quad) {\n    if (quad.data) return quad.r = radii[quad.data.index];\n    for (var i = quad.r = 0; i < 4; ++i) {\n      if (quad[i] && quad[i].r > quad.r) {\n        quad.r = quad[i].r;\n      }\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length, node;\n    radii = new Array(n);\n    for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n  }\n\n  force.initialize = function(_nodes, _random) {\n    nodes = _nodes;\n    random = _random;\n    initialize();\n  };\n\n  force.iterations = function(_) {\n    return arguments.length ? (iterations = +_, force) : iterations;\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = +_, force) : strength;\n  };\n\n  force.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n  };\n\n  return force;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n  return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n  var node = nodeById.get(nodeId);\n  if (!node) throw new Error(\"node not found: \" + nodeId);\n  return node;\n}\n\nexport default function(links) {\n  var id = index,\n      strength = defaultStrength,\n      strengths,\n      distance = constant(30),\n      distances,\n      nodes,\n      count,\n      bias,\n      random,\n      iterations = 1;\n\n  if (links == null) links = [];\n\n  function defaultStrength(link) {\n    return 1 / Math.min(count[link.source.index], count[link.target.index]);\n  }\n\n  function force(alpha) {\n    for (var k = 0, n = links.length; k < iterations; ++k) {\n      for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n        link = links[i], source = link.source, target = link.target;\n        x = target.x + target.vx - source.x - source.vx || jiggle(random);\n        y = target.y + target.vy - source.y - source.vy || jiggle(random);\n        l = Math.sqrt(x * x + y * y);\n        l = (l - distances[i]) / l * alpha * strengths[i];\n        x *= l, y *= l;\n        target.vx -= x * (b = bias[i]);\n        target.vy -= y * b;\n        source.vx += x * (b = 1 - b);\n        source.vy += y * b;\n      }\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n\n    var i,\n        n = nodes.length,\n        m = links.length,\n        nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n        link;\n\n    for (i = 0, count = new Array(n); i < m; ++i) {\n      link = links[i], link.index = i;\n      if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n      if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n      count[link.source.index] = (count[link.source.index] || 0) + 1;\n      count[link.target.index] = (count[link.target.index] || 0) + 1;\n    }\n\n    for (i = 0, bias = new Array(m); i < m; ++i) {\n      link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n    }\n\n    strengths = new Array(m), initializeStrength();\n    distances = new Array(m), initializeDistance();\n  }\n\n  function initializeStrength() {\n    if (!nodes) return;\n\n    for (var i = 0, n = links.length; i < n; ++i) {\n      strengths[i] = +strength(links[i], i, links);\n    }\n  }\n\n  function initializeDistance() {\n    if (!nodes) return;\n\n    for (var i = 0, n = links.length; i < n; ++i) {\n      distances[i] = +distance(links[i], i, links);\n    }\n  }\n\n  force.initialize = function(_nodes, _random) {\n    nodes = _nodes;\n    random = _random;\n    initialize();\n  };\n\n  force.links = function(_) {\n    return arguments.length ? (links = _, initialize(), force) : links;\n  };\n\n  force.id = function(_) {\n    return arguments.length ? (id = _, force) : id;\n  };\n\n  force.iterations = function(_) {\n    return arguments.length ? (iterations = +_, force) : iterations;\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n  };\n\n  force.distance = function(_) {\n    return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n  };\n\n  return force;\n}\n","export default function(x, y) {\n  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n  var x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1;\n\n  // If the quadtree has no extent, initialize them.\n  // Integer extent are necessary so that if we later double the extent,\n  // the existing quadrant boundaries don’t change due to floating point error!\n  if (isNaN(x0)) {\n    x1 = (x0 = Math.floor(x)) + 1;\n    y1 = (y0 = Math.floor(y)) + 1;\n  }\n\n  // Otherwise, double repeatedly to cover.\n  else {\n    var z = x1 - x0 || 1,\n        node = this._root,\n        parent,\n        i;\n\n    while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n      i = (y < y0) << 1 | (x < x0);\n      parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n      switch (i) {\n        case 0: x1 = x0 + z, y1 = y0 + z; break;\n        case 1: x0 = x1 - z, y1 = y0 + z; break;\n        case 2: x1 = x0 + z, y0 = y1 - z; break;\n        case 3: x0 = x1 - z, y0 = y1 - z; break;\n      }\n    }\n\n    if (this._root && this._root.length) this._root = node;\n  }\n\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  return this;\n}\n","export default function() {\n  var data = [];\n  this.visit(function(node) {\n    if (!node.length) do data.push(node.data); while (node = node.next)\n  });\n  return data;\n}\n","export default function(_) {\n  return arguments.length\n      ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n      : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n  var data,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1,\n      y1,\n      x2,\n      y2,\n      x3 = this._x1,\n      y3 = this._y1,\n      quads = [],\n      node = this._root,\n      q,\n      i;\n\n  if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n  if (radius == null) radius = Infinity;\n  else {\n    x0 = x - radius, y0 = y - radius;\n    x3 = x + radius, y3 = y + radius;\n    radius *= radius;\n  }\n\n  while (q = quads.pop()) {\n\n    // Stop searching if this quadrant can’t contain a closer node.\n    if (!(node = q.node)\n        || (x1 = q.x0) > x3\n        || (y1 = q.y0) > y3\n        || (x2 = q.x1) < x0\n        || (y2 = q.y1) < y0) continue;\n\n    // Bisect the current quadrant.\n    if (node.length) {\n      var xm = (x1 + x2) / 2,\n          ym = (y1 + y2) / 2;\n\n      quads.push(\n        new Quad(node[3], xm, ym, x2, y2),\n        new Quad(node[2], x1, ym, xm, y2),\n        new Quad(node[1], xm, y1, x2, ym),\n        new Quad(node[0], x1, y1, xm, ym)\n      );\n\n      // Visit the closest quadrant first.\n      if (i = (y >= ym) << 1 | (x >= xm)) {\n        q = quads[quads.length - 1];\n        quads[quads.length - 1] = quads[quads.length - 1 - i];\n        quads[quads.length - 1 - i] = q;\n      }\n    }\n\n    // Visit this point. (Visiting coincident points isn’t necessary!)\n    else {\n      var dx = x - +this._x.call(null, node.data),\n          dy = y - +this._y.call(null, node.data),\n          d2 = dx * dx + dy * dy;\n      if (d2 < radius) {\n        var d = Math.sqrt(radius = d2);\n        x0 = x - d, y0 = y - d;\n        x3 = x + d, y3 = y + d;\n        data = node.data;\n      }\n    }\n  }\n\n  return data;\n}\n","export default function(d) {\n  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n  var parent,\n      node = this._root,\n      retainer,\n      previous,\n      next,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1,\n      x,\n      y,\n      xm,\n      ym,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return this;\n\n  // Find the leaf node for the point.\n  // While descending, also retain the deepest parent with a non-removed sibling.\n  if (node.length) while (true) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n    if (!node.length) break;\n    if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n  }\n\n  // Find the point to remove.\n  while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n  if (next = node.next) delete node.next;\n\n  // If there are multiple coincident points, remove just the point.\n  if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n  // If this is the root point, remove it.\n  if (!parent) return this._root = next, this;\n\n  // Remove this leaf.\n  next ? parent[i] = next : delete parent[i];\n\n  // If the parent now contains exactly one leaf, collapse superfluous parents.\n  if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n      && node === (parent[3] || parent[2] || parent[1] || parent[0])\n      && !node.length) {\n    if (retainer) retainer[j] = node;\n    else this._root = node;\n  }\n\n  return this;\n}\n\nexport function removeAll(data) {\n  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n  return this;\n}\n","export default function() {\n  return this._root;\n}\n","export default function() {\n  var size = 0;\n  this.visit(function(node) {\n    if (!node.length) do ++size; while (node = node.next)\n  });\n  return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n  var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n      var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n    }\n  }\n  return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n  var quads = [], next = [], q;\n  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    var node = q.node;\n    if (node.length) {\n      var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n    }\n    next.push(q);\n  }\n  while (q = next.pop()) {\n    callback(q.node, q.x0, q.y0, q.x1, q.y1);\n  }\n  return this;\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n  let s = 1;\n  return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n  return d.x;\n}\n\nexport function y(d) {\n  return d.y;\n}\n\nvar initialRadius = 10,\n    initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n  var simulation,\n      alpha = 1,\n      alphaMin = 0.001,\n      alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n      alphaTarget = 0,\n      velocityDecay = 0.6,\n      forces = new Map(),\n      stepper = timer(step),\n      event = dispatch(\"tick\", \"end\"),\n      random = lcg();\n\n  if (nodes == null) nodes = [];\n\n  function step() {\n    tick();\n    event.call(\"tick\", simulation);\n    if (alpha < alphaMin) {\n      stepper.stop();\n      event.call(\"end\", simulation);\n    }\n  }\n\n  function tick(iterations) {\n    var i, n = nodes.length, node;\n\n    if (iterations === undefined) iterations = 1;\n\n    for (var k = 0; k < iterations; ++k) {\n      alpha += (alphaTarget - alpha) * alphaDecay;\n\n      forces.forEach(function(force) {\n        force(alpha);\n      });\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        if (node.fx == null) node.x += node.vx *= velocityDecay;\n        else node.x = node.fx, node.vx = 0;\n        if (node.fy == null) node.y += node.vy *= velocityDecay;\n        else node.y = node.fy, node.vy = 0;\n      }\n    }\n\n    return simulation;\n  }\n\n  function initializeNodes() {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.index = i;\n      if (node.fx != null) node.x = node.fx;\n      if (node.fy != null) node.y = node.fy;\n      if (isNaN(node.x) || isNaN(node.y)) {\n        var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n        node.x = radius * Math.cos(angle);\n        node.y = radius * Math.sin(angle);\n      }\n      if (isNaN(node.vx) || isNaN(node.vy)) {\n        node.vx = node.vy = 0;\n      }\n    }\n  }\n\n  function initializeForce(force) {\n    if (force.initialize) force.initialize(nodes, random);\n    return force;\n  }\n\n  initializeNodes();\n\n  return simulation = {\n    tick: tick,\n\n    restart: function() {\n      return stepper.restart(step), simulation;\n    },\n\n    stop: function() {\n      return stepper.stop(), simulation;\n    },\n\n    nodes: function(_) {\n      return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n    },\n\n    alpha: function(_) {\n      return arguments.length ? (alpha = +_, simulation) : alpha;\n    },\n\n    alphaMin: function(_) {\n      return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n    },\n\n    alphaDecay: function(_) {\n      return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n    },\n\n    alphaTarget: function(_) {\n      return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n    },\n\n    velocityDecay: function(_) {\n      return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n    },\n\n    randomSource: function(_) {\n      return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n    },\n\n    force: function(name, _) {\n      return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n    },\n\n    find: function(x, y, radius) {\n      var i = 0,\n          n = nodes.length,\n          dx,\n          dy,\n          d2,\n          node,\n          closest;\n\n      if (radius == null) radius = Infinity;\n      else radius *= radius;\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        dx = x - node.x;\n        dy = y - node.y;\n        d2 = dx * dx + dy * dy;\n        if (d2 < radius) closest = node, radius = d2;\n      }\n\n      return closest;\n    },\n\n    on: function(name, _) {\n      return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n    }\n  };\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n  var nodes,\n      node,\n      random,\n      alpha,\n      strength = constant(-30),\n      strengths,\n      distanceMin2 = 1,\n      distanceMax2 = Infinity,\n      theta2 = 0.81;\n\n  function force(_) {\n    var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n    for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length, node;\n    strengths = new Array(n);\n    for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n  }\n\n  function accumulate(quad) {\n    var strength = 0, q, c, weight = 0, x, y, i;\n\n    // For internal nodes, accumulate forces from child quadrants.\n    if (quad.length) {\n      for (x = y = i = 0; i < 4; ++i) {\n        if ((q = quad[i]) && (c = Math.abs(q.value))) {\n          strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n        }\n      }\n      quad.x = x / weight;\n      quad.y = y / weight;\n    }\n\n    // For leaf nodes, accumulate forces from coincident quadrants.\n    else {\n      q = quad;\n      q.x = q.data.x;\n      q.y = q.data.y;\n      do strength += strengths[q.data.index];\n      while (q = q.next);\n    }\n\n    quad.value = strength;\n  }\n\n  function apply(quad, x1, _, x2) {\n    if (!quad.value) return true;\n\n    var x = quad.x - node.x,\n        y = quad.y - node.y,\n        w = x2 - x1,\n        l = x * x + y * y;\n\n    // Apply the Barnes-Hut approximation if possible.\n    // Limit forces for very close nodes; randomize direction if coincident.\n    if (w * w / theta2 < l) {\n      if (l < distanceMax2) {\n        if (x === 0) x = jiggle(random), l += x * x;\n        if (y === 0) y = jiggle(random), l += y * y;\n        if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n        node.vx += x * quad.value * alpha / l;\n        node.vy += y * quad.value * alpha / l;\n      }\n      return true;\n    }\n\n    // Otherwise, process points directly.\n    else if (quad.length || l >= distanceMax2) return;\n\n    // Limit forces for very close nodes; randomize direction if coincident.\n    if (quad.data !== node || quad.next) {\n      if (x === 0) x = jiggle(random), l += x * x;\n      if (y === 0) y = jiggle(random), l += y * y;\n      if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n    }\n\n    do if (quad.data !== node) {\n      w = strengths[quad.data.index] * alpha / l;\n      node.vx += x * w;\n      node.vy += y * w;\n    } while (quad = quad.next);\n  }\n\n  force.initialize = function(_nodes, _random) {\n    nodes = _nodes;\n    random = _random;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.distanceMin = function(_) {\n    return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n  };\n\n  force.distanceMax = function(_) {\n    return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n  };\n\n  force.theta = function(_) {\n    return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n  };\n\n  return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(radius, x, y) {\n  var nodes,\n      strength = constant(0.1),\n      strengths,\n      radiuses;\n\n  if (typeof radius !== \"function\") radius = constant(+radius);\n  if (x == null) x = 0;\n  if (y == null) y = 0;\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length; i < n; ++i) {\n      var node = nodes[i],\n          dx = node.x - x || 1e-6,\n          dy = node.y - y || 1e-6,\n          r = Math.sqrt(dx * dx + dy * dy),\n          k = (radiuses[i] - r) * strengths[i] * alpha / r;\n      node.vx += dx * k;\n      node.vy += dy * k;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    radiuses = new Array(n);\n    for (i = 0; i < n; ++i) {\n      radiuses[i] = +radius(nodes[i], i, nodes);\n      strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _, initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = +_, force) : x;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = +_, force) : y;\n  };\n\n  return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n  var strength = constant(0.1),\n      nodes,\n      strengths,\n      xz;\n\n  if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    xz = new Array(n);\n    for (i = 0; i < n; ++i) {\n      strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n  };\n\n  return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(y) {\n  var strength = constant(0.1),\n      nodes,\n      strengths,\n      yz;\n\n  if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    yz = new Array(n);\n    for (i = 0; i < n; ++i) {\n      strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n  };\n\n  return force;\n}\n","export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n","import {Adder} from \"d3-array\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = new Adder();\n\n// hello?\n\nvar areaSum = new Adder(),\n    lambda00,\n    phi00,\n    lambda0,\n    cosPhi0,\n    sinPhi0;\n\nexport var areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaRingSum = new Adder();\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    var areaRing = +areaRingSum;\n    areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n    this.lineStart = this.lineEnd = this.point = noop;\n  },\n  sphere: function() {\n    areaSum.add(tau);\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n  areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n  areaStream.point = areaPoint;\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n  // Spherical excess E for a spherical triangle with vertices: south pole,\n  // previous point, current point.  Uses a formula derived from Cagnoli’s\n  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n  var dLambda = lambda - lambda0,\n      sdLambda = dLambda >= 0 ? 1 : -1,\n      adLambda = sdLambda * dLambda,\n      cosPhi = cos(phi),\n      sinPhi = sin(phi),\n      k = sinPhi0 * sinPhi,\n      u = cosPhi0 * cosPhi + k * cos(adLambda),\n      v = k * sdLambda * sin(adLambda);\n  areaRingSum.add(atan2(v, u));\n\n  // Advance the previous points.\n  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n  areaSum = new Adder();\n  stream(object, areaStream);\n  return areaSum * 2;\n}\n","import {Adder} from \"d3-array\";\nimport {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n    lambda2, // previous lambda-coordinate\n    lambda00, phi00, // first point\n    p0, // previous 3D point\n    deltaSum,\n    ranges,\n    range;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: boundsLineStart,\n  lineEnd: boundsLineEnd,\n  polygonStart: function() {\n    boundsStream.point = boundsRingPoint;\n    boundsStream.lineStart = boundsRingStart;\n    boundsStream.lineEnd = boundsRingEnd;\n    deltaSum = new Adder();\n    areaStream.polygonStart();\n  },\n  polygonEnd: function() {\n    areaStream.polygonEnd();\n    boundsStream.point = boundsPoint;\n    boundsStream.lineStart = boundsLineStart;\n    boundsStream.lineEnd = boundsLineEnd;\n    if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n    else if (deltaSum > epsilon) phi1 = 90;\n    else if (deltaSum < -epsilon) phi0 = -90;\n    range[0] = lambda0, range[1] = lambda1;\n  },\n  sphere: function() {\n    lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n  }\n};\n\nfunction boundsPoint(lambda, phi) {\n  ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n  var p = cartesian([lambda * radians, phi * radians]);\n  if (p0) {\n    var normal = cartesianCross(p0, p),\n        equatorial = [normal[1], -normal[0], 0],\n        inflection = cartesianCross(equatorial, normal);\n    cartesianNormalizeInPlace(inflection);\n    inflection = spherical(inflection);\n    var delta = lambda - lambda2,\n        sign = delta > 0 ? 1 : -1,\n        lambdai = inflection[0] * degrees * sign,\n        phii,\n        antimeridian = abs(delta) > 180;\n    if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n      phii = inflection[1] * degrees;\n      if (phii > phi1) phi1 = phii;\n    } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n      phii = -inflection[1] * degrees;\n      if (phii < phi0) phi0 = phii;\n    } else {\n      if (phi < phi0) phi0 = phi;\n      if (phi > phi1) phi1 = phi;\n    }\n    if (antimeridian) {\n      if (lambda < lambda2) {\n        if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n      } else {\n        if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n      }\n    } else {\n      if (lambda1 >= lambda0) {\n        if (lambda < lambda0) lambda0 = lambda;\n        if (lambda > lambda1) lambda1 = lambda;\n      } else {\n        if (lambda > lambda2) {\n          if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n        } else {\n          if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n        }\n      }\n    }\n  } else {\n    ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n  }\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n  p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n  boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n  range[0] = lambda0, range[1] = lambda1;\n  boundsStream.point = boundsPoint;\n  p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n  if (p0) {\n    var delta = lambda - lambda2;\n    deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n  } else {\n    lambda00 = lambda, phi00 = phi;\n  }\n  areaStream.point(lambda, phi);\n  linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n  areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n  boundsRingPoint(lambda00, phi00);\n  areaStream.lineEnd();\n  if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n  range[0] = lambda0, range[1] = lambda1;\n  p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n  return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n  var i, n, a, b, merged, deltaMax, delta;\n\n  phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n  ranges = [];\n  stream(feature, boundsStream);\n\n  // First, sort ranges by their minimum longitudes.\n  if (n = ranges.length) {\n    ranges.sort(rangeCompare);\n\n    // Then, merge any ranges that overlap.\n    for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n      b = ranges[i];\n      if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n        if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n        if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n      } else {\n        merged.push(a = b);\n      }\n    }\n\n    // Finally, find the largest gap between the merged ranges.\n    // The final bounding box will be the inverse of this gap.\n    for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n      b = merged[i];\n      if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n    }\n  }\n\n  ranges = range = null;\n\n  return lambda0 === Infinity || phi0 === Infinity\n      ? [[NaN, NaN], [NaN, NaN]]\n      : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\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]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import {Adder} from \"d3-array\";\nimport {asin, atan2, cos, degrees, epsilon, epsilon2, hypot, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar W0, W1,\n    X0, Y0, Z0,\n    X1, Y1, Z1,\n    X2, Y2, Z2,\n    lambda00, phi00, // first point\n    x0, y0, z0; // previous point\n\nvar centroidStream = {\n  sphere: noop,\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi);\n  centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n  ++W0;\n  X0 += (x - X0) / W0;\n  Y0 += (y - Y0) / W0;\n  Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi);\n  x0 = cosPhi * cos(lambda);\n  y0 = cosPhi * sin(lambda);\n  z0 = sin(phi);\n  centroidStream.point = centroidLinePoint;\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi),\n      x = cosPhi * cos(lambda),\n      y = cosPhi * sin(lambda),\n      z = sin(phi),\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);\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n  centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n  centroidRingPoint(lambda00, phi00);\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  centroidStream.point = centroidRingPoint;\n  var cosPhi = cos(phi);\n  x0 = cosPhi * cos(lambda);\n  y0 = cosPhi * sin(lambda);\n  z0 = sin(phi);\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi),\n      x = cosPhi * cos(lambda),\n      y = cosPhi * sin(lambda),\n      z = sin(phi),\n      cx = y0 * z - z0 * y,\n      cy = z0 * x - x0 * z,\n      cz = x0 * y - y0 * x,\n      m = hypot(cx, cy, cz),\n      w = asin(m), // line weight = angle\n      v = m && -w / m; // area weight multiplier\n  X2.add(v * cx);\n  Y2.add(v * cy);\n  Z2.add(v * cz);\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n  W0 = W1 =\n  X0 = Y0 = Z0 =\n  X1 = Y1 = Z1 = 0;\n  X2 = new Adder();\n  Y2 = new Adder();\n  Z2 = new Adder();\n  stream(object, centroidStream);\n\n  var x = +X2,\n      y = +Y2,\n      z = +Z2,\n      m = hypot(x, y, z);\n\n  // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n  if (m < epsilon2) {\n    x = X1, y = Y1, z = Z1;\n    // If the feature has zero length, fall back to arithmetic mean of point vectors.\n    if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n    m = hypot(x, y, z);\n    // If the feature still has an undefined ccentroid, then return.\n    if (m < epsilon2) return [NaN, NaN];\n  }\n\n  return [atan2(y, x) * degrees, asin(z / m) * degrees];\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function(a, b) {\n\n  function compose(x, y) {\n    return x = a(x, y), b(x[0], x[1]);\n  }\n\n  if (a.invert && b.invert) compose.invert = function(x, y) {\n    return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n  };\n\n  return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n  if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n  return [lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    lambda += deltaLambda;\n    if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n    return [lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos(deltaPhi),\n      sinDeltaPhi = sin(deltaPhi),\n      cosDeltaGamma = cos(deltaGamma),\n      sinDeltaGamma = sin(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nexport default function(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  };\n\n  return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos(radius),\n      sinRadius = sin(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n  var center = constant([0, 0]),\n      radius = constant(90),\n      precision = constant(2),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees, x[1] *= degrees;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n  };\n\n  return circle;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y, m) {\n      line.push([x, y, m]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    if (pointEqual(p0, p1)) {\n      if (!p0[2] && !p1[2]) {\n        stream.lineStart();\n        for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n        stream.lineEnd();\n        return;\n      }\n      // handle degenerate cases by moving the point\n      p1[0] += 2 * epsilon;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link(subject);\n  link(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      b;\n  while (++i < n) {\n    a.n = b = array[i];\n    b.p = a;\n    a = b;\n  }\n  a.n = b = array[0];\n  b.p = a;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n  return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n  var lambda = longitude(point),\n      phi = point[1],\n      sinPhi = sin(phi),\n      normal = [sin(lambda), -cos(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  var sum = new Adder();\n\n  if (sinPhi === 1) phi = halfPi + epsilon;\n  else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = longitude(point0),\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin(phi0),\n        cosPhi0 = cos(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = longitude(point1),\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin(phi1),\n          cosPhi1 = cos(phi1),\n          delta = lambda1 - lambda0,\n          sign = delta >= 0 ? 1 : -1,\n          absDelta = sign * delta,\n          antimeridian = absDelta > pi,\n          k = sinPhi0 * sinPhi1;\n\n      sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n      angle += antimeridian ? delta + sign * tau : delta;\n\n      // Are the longitudes either side of the point’s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\n    var clip = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        clip.point = pointRing;\n        clip.lineStart = ringStart;\n        clip.lineEnd = ringEnd;\n        segments = [];\n        polygon = [];\n      },\n      polygonEnd: function() {\n        clip.point = point;\n        clip.lineStart = lineStart;\n        clip.lineEnd = lineEnd;\n        segments = merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi : -pi,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi) < epsilon) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon\n      ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n          - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi;\n    stream.point(-pi, phi);\n    stream.point(0, phi);\n    stream.point(pi, phi);\n    stream.point(pi, 0);\n    stream.point(pi, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi, -phi);\n    stream.point(-pi, 0);\n    stream.point(-pi, phi);\n  } else if (abs(from[0] - to[0]) > epsilon) {\n    var lambda = from[0] < to[0] ? pi : -pi;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n  var cr = cos(radius),\n      delta = 2 * radians,\n      smallRadius = cr > 0,\n      notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n  function interpolate(from, to, direction, stream) {\n    circleStream(stream, radius, delta, direction, from, to);\n  }\n\n  function visible(lambda, phi) {\n    return cos(lambda) * cos(phi) > cr;\n  }\n\n  // Takes a line and cuts into visible segments. Return values used for polygon\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\n  // intersections 2 - there were intersections, and the first and last segments\n  // should be rejoined.\n  function clipLine(stream) {\n    var point0, // previous point\n        c0, // code for previous point\n        v0, // visibility of previous point\n        v00, // visibility of first point\n        clean; // no intersections\n    return {\n      lineStart: function() {\n        v00 = v0 = false;\n        clean = 1;\n      },\n      point: function(lambda, phi) {\n        var point1 = [lambda, phi],\n            point2,\n            v = visible(lambda, phi),\n            c = smallRadius\n              ? v ? 0 : code(lambda, phi)\n              : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\n        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n            point1[2] = 1;\n        }\n        if (v !== v0) {\n          clean = 0;\n          if (v) {\n            // outside going in\n            stream.lineStart();\n            point2 = intersect(point1, point0);\n            stream.point(point2[0], point2[1]);\n          } else {\n            // inside going out\n            point2 = intersect(point0, point1);\n            stream.point(point2[0], point2[1], 2);\n            stream.lineEnd();\n          }\n          point0 = point2;\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\n          var t;\n          // If the codes for two points are different, or are both zero,\n          // and there this segment intersects with the small circle.\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\n            clean = 0;\n            if (smallRadius) {\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n            } else {\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1], 3);\n            }\n          }\n        }\n        if (v && (!point0 || !pointEqual(point0, point1))) {\n          stream.point(point1[0], point1[1]);\n        }\n        point0 = point1, v0 = v, c0 = c;\n      },\n      lineEnd: function() {\n        if (v0) stream.lineEnd();\n        point0 = null;\n      },\n      // Rejoin first and last segments if there were intersections and the first\n      // and last points were visible.\n      clean: function() {\n        return clean | ((v00 && v0) << 1);\n      }\n    };\n  }\n\n  // Intersects the great circle between a and b with the clip circle.\n  function intersect(a, b, two) {\n    var pa = cartesian(a),\n        pb = cartesian(b);\n\n    // We have two planes, n1.p = d1 and n2.p = d2.\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n    var n1 = [1, 0, 0], // normal\n        n2 = cartesianCross(pa, pb),\n        n2n2 = cartesianDot(n2, n2),\n        n1n2 = n2[0], // cartesianDot(n1, n2),\n        determinant = n2n2 - n1n2 * n1n2;\n\n    // Two polar points.\n    if (!determinant) return !two && a;\n\n    var c1 =  cr * n2n2 / determinant,\n        c2 = -cr * n1n2 / determinant,\n        n1xn2 = cartesianCross(n1, n2),\n        A = cartesianScale(n1, c1),\n        B = cartesianScale(n2, c2);\n    cartesianAddInPlace(A, B);\n\n    // Solve |p(t)|^2 = 1.\n    var u = n1xn2,\n        w = cartesianDot(A, u),\n        uu = cartesianDot(u, u),\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n    if (t2 < 0) return;\n\n    var t = sqrt(t2),\n        q = cartesianScale(u, (-w - t) / uu);\n    cartesianAddInPlace(q, A);\n    q = spherical(q);\n\n    if (!two) return q;\n\n    // Two intersection points.\n    var lambda0 = a[0],\n        lambda1 = b[0],\n        phi0 = a[1],\n        phi1 = b[1],\n        z;\n\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n    var delta = lambda1 - lambda0,\n        polar = abs(delta - pi) < epsilon,\n        meridian = polar || delta < epsilon;\n\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n    // Check that the first point is between a and b.\n    if (meridian\n        ? polar\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n          : phi0 <= q[1] && q[1] <= phi1\n        : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n      var q1 = cartesianScale(u, (-w + t) / uu);\n      cartesianAddInPlace(q1, A);\n      return [q, spherical(q1)];\n    }\n  }\n\n  // Generates a 4-bit vector representing the location of a point relative to\n  // the small circle's bounding box.\n  function code(lambda, phi) {\n    var r = smallRadius ? radius : pi - radius,\n        code = 0;\n    if (lambda < -r) code |= 1; // left\n    else if (lambda > r) code |= 2; // right\n    if (phi < -r) code |= 4; // below\n    else if (phi > r) code |= 8; // above\n    return code;\n  }\n\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n  function visible(x, y) {\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n  }\n\n  function interpolate(from, to, direction, stream) {\n    var a = 0, a1 = 0;\n    if (from == null\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n        || comparePoint(from, to) < 0 ^ direction > 0) {\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n      while ((a = (a + direction + 4) % 4) !== a1);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function corner(p, direction) {\n    return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n        : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n        : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n  }\n\n  function compareIntersection(a, b) {\n    return comparePoint(a.x, b.x);\n  }\n\n  function comparePoint(a, b) {\n    var ca = corner(a, 1),\n        cb = corner(b, 1);\n    return ca !== cb ? ca - cb\n        : ca === 0 ? b[1] - a[1]\n        : ca === 1 ? a[0] - b[0]\n        : ca === 2 ? a[1] - b[1]\n        : b[0] - a[0];\n  }\n\n  return function(stream) {\n    var activeStream = stream,\n        bufferStream = clipBuffer(),\n        segments,\n        polygon,\n        ring,\n        x__, y__, v__, // first point\n        x_, y_, v_, // previous point\n        first,\n        clean;\n\n    var clipStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: polygonStart,\n      polygonEnd: polygonEnd\n    };\n\n    function point(x, y) {\n      if (visible(x, y)) activeStream.point(x, y);\n    }\n\n    function polygonInside() {\n      var winding = 0;\n\n      for (var i = 0, n = polygon.length; i < n; ++i) {\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) {\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n        }\n      }\n\n      return winding;\n    }\n\n    // Buffer geometry within a polygon and then clip it en masse.\n    function polygonStart() {\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\n    }\n\n    function polygonEnd() {\n      var startInside = polygonInside(),\n          cleanInside = clean && startInside,\n          visible = (segments = merge(segments)).length;\n      if (cleanInside || visible) {\n        stream.polygonStart();\n        if (cleanInside) {\n          stream.lineStart();\n          interpolate(null, null, 1, stream);\n          stream.lineEnd();\n        }\n        if (visible) {\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n        }\n        stream.polygonEnd();\n      }\n      activeStream = stream, segments = polygon = ring = null;\n    }\n\n    function lineStart() {\n      clipStream.point = linePoint;\n      if (polygon) polygon.push(ring = []);\n      first = true;\n      v_ = false;\n      x_ = y_ = NaN;\n    }\n\n    // TODO rather than special-case polygons, simply handle them separately.\n    // Ideally, coincident intersection points should be jittered to avoid\n    // clipping issues.\n    function lineEnd() {\n      if (segments) {\n        linePoint(x__, y__);\n        if (v__ && v_) bufferStream.rejoin();\n        segments.push(bufferStream.result());\n      }\n      clipStream.point = point;\n      if (v_) activeStream.lineEnd();\n    }\n\n    function linePoint(x, y) {\n      var v = visible(x, y);\n      if (polygon) ring.push([x, y]);\n      if (first) {\n        x__ = x, y__ = y, v__ = v;\n        first = false;\n        if (v) {\n          activeStream.lineStart();\n          activeStream.point(x, y);\n        }\n      } else {\n        if (v && v_) activeStream.point(x, y);\n        else {\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n          if (clipLine(a, b, x0, y0, x1, y1)) {\n            if (!v_) {\n              activeStream.lineStart();\n              activeStream.point(a[0], a[1]);\n            }\n            activeStream.point(b[0], b[1]);\n            if (!v) activeStream.lineEnd();\n            clean = false;\n          } else if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n            clean = false;\n          }\n        }\n      }\n      x_ = x, y_ = y, v_ = v;\n    }\n\n    return clipStream;\n  };\n}\n","import {Adder} from \"d3-array\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar lengthSum,\n    lambda0,\n    sinPhi0,\n    cosPhi0;\n\nvar lengthStream = {\n  sphere: noop,\n  point: noop,\n  lineStart: lengthLineStart,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n  lengthStream.point = lengthPointFirst;\n  lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n  lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n  lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var sinPhi = sin(phi),\n      cosPhi = cos(phi),\n      delta = abs(lambda - lambda0),\n      cosDelta = cos(delta),\n      sinDelta = sin(delta),\n      x = cosPhi * sinDelta,\n      y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n      z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n  lengthSum.add(atan2(sqrt(x * x + y * y), z));\n  lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n  lengthSum = new Adder();\n  stream(object, lengthStream);\n  return +lengthSum;\n}\n","export default function(a, b, x0, y0, x1, y1) {\n  var ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n  return true;\n}\n","import clipRectangle from \"./rectangle.js\";\n\nexport default function() {\n  var x0 = 0,\n      y0 = 0,\n      x1 = 960,\n      y1 = 500,\n      cache,\n      cacheStream,\n      clip;\n\n  return clip = {\n    stream: function(stream) {\n      return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);\n    },\n    extent: function(_) {\n      return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n    }\n  };\n}\n","import length from \"./length.js\";\n\nvar coordinates = [null, null],\n    object = {type: \"LineString\", coordinates: coordinates};\n\nexport default function(a, b) {\n  coordinates[0] = a;\n  coordinates[1] = b;\n  return length(object);\n}\n","import {default as polygonContains} from \"./polygonContains.js\";\nimport {default as distance} from \"./distance.js\";\nimport {epsilon2, radians} from \"./math.js\";\n\nvar containsObjectType = {\n  Feature: function(object, point) {\n    return containsGeometry(object.geometry, point);\n  },\n  FeatureCollection: function(object, point) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;\n    return false;\n  }\n};\n\nvar containsGeometryType = {\n  Sphere: function() {\n    return true;\n  },\n  Point: function(object, point) {\n    return containsPoint(object.coordinates, point);\n  },\n  MultiPoint: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsPoint(coordinates[i], point)) return true;\n    return false;\n  },\n  LineString: function(object, point) {\n    return containsLine(object.coordinates, point);\n  },\n  MultiLineString: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsLine(coordinates[i], point)) return true;\n    return false;\n  },\n  Polygon: function(object, point) {\n    return containsPolygon(object.coordinates, point);\n  },\n  MultiPolygon: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsPolygon(coordinates[i], point)) return true;\n    return false;\n  },\n  GeometryCollection: function(object, point) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) if (containsGeometry(geometries[i], point)) return true;\n    return false;\n  }\n};\n\nfunction containsGeometry(geometry, point) {\n  return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n      ? containsGeometryType[geometry.type](geometry, point)\n      : false;\n}\n\nfunction containsPoint(coordinates, point) {\n  return distance(coordinates, point) === 0;\n}\n\nfunction containsLine(coordinates, point) {\n  var ao, bo, ab;\n  for (var i = 0, n = coordinates.length; i < n; i++) {\n    bo = distance(coordinates[i], point);\n    if (bo === 0) return true;\n    if (i > 0) {\n      ab = distance(coordinates[i], coordinates[i - 1]);\n      if (\n        ab > 0 &&\n        ao <= ab &&\n        bo <= ab &&\n        (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2 * ab\n      )\n        return true;\n    }\n    ao = bo;\n  }\n  return false;\n}\n\nfunction containsPolygon(coordinates, point) {\n  return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\n}\n\nfunction ringRadians(ring) {\n  return ring = ring.map(pointRadians), ring.pop(), ring;\n}\n\nfunction pointRadians(point) {\n  return [point[0] * radians, point[1] * radians];\n}\n\nexport default function(object, point) {\n  return (object && containsObjectType.hasOwnProperty(object.type)\n      ? containsObjectType[object.type]\n      : containsGeometry)(object, point);\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n  var y = range(y0, y1 - epsilon, dy).concat(y1);\n  return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n  var x = range(x0, x1 - epsilon, dx).concat(x1);\n  return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n  var x1, x0, X1, X0,\n      y1, y0, Y1, Y0,\n      dx = 10, dy = dx, DX = 90, DY = 360,\n      x, y, X, Y,\n      precision = 2.5;\n\n  function graticule() {\n    return {type: \"MultiLineString\", coordinates: lines()};\n  }\n\n  function lines() {\n    return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n        .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n        .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n        .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n  }\n\n  graticule.lines = function() {\n    return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n  };\n\n  graticule.outline = function() {\n    return {\n      type: \"Polygon\",\n      coordinates: [\n        X(X0).concat(\n        Y(Y1).slice(1),\n        X(X1).reverse().slice(1),\n        Y(Y0).reverse().slice(1))\n      ]\n    };\n  };\n\n  graticule.extent = function(_) {\n    if (!arguments.length) return graticule.extentMinor();\n    return graticule.extentMajor(_).extentMinor(_);\n  };\n\n  graticule.extentMajor = function(_) {\n    if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n    X0 = +_[0][0], X1 = +_[1][0];\n    Y0 = +_[0][1], Y1 = +_[1][1];\n    if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n    if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.extentMinor = function(_) {\n    if (!arguments.length) return [[x0, y0], [x1, y1]];\n    x0 = +_[0][0], x1 = +_[1][0];\n    y0 = +_[0][1], y1 = +_[1][1];\n    if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n    if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.step = function(_) {\n    if (!arguments.length) return graticule.stepMinor();\n    return graticule.stepMajor(_).stepMinor(_);\n  };\n\n  graticule.stepMajor = function(_) {\n    if (!arguments.length) return [DX, DY];\n    DX = +_[0], DY = +_[1];\n    return graticule;\n  };\n\n  graticule.stepMinor = function(_) {\n    if (!arguments.length) return [dx, dy];\n    dx = +_[0], dy = +_[1];\n    return graticule;\n  };\n\n  graticule.precision = function(_) {\n    if (!arguments.length) return precision;\n    precision = +_;\n    x = graticuleX(y0, y1, 90);\n    y = graticuleY(x0, x1, precision);\n    X = graticuleX(Y0, Y1, 90);\n    Y = graticuleY(X0, X1, precision);\n    return graticule;\n  };\n\n  return graticule\n      .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n      .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n  return graticule()();\n}\n","import {asin, atan2, cos, degrees, haversin, radians, sin, sqrt} from \"./math.js\";\n\nexport default function(a, b) {\n  var x0 = a[0] * radians,\n      y0 = a[1] * radians,\n      x1 = b[0] * radians,\n      y1 = b[1] * radians,\n      cy0 = cos(y0),\n      sy0 = sin(y0),\n      cy1 = cos(y1),\n      sy1 = sin(y1),\n      kx0 = cy0 * cos(x0),\n      ky0 = cy0 * sin(x0),\n      kx1 = cy1 * cos(x1),\n      ky1 = cy1 * sin(x1),\n      d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n      k = sin(d);\n\n  var interpolate = d ? function(t) {\n    var B = sin(t *= d) / k,\n        A = sin(d - t) / k,\n        x = A * kx0 + B * kx1,\n        y = A * ky0 + B * ky1,\n        z = A * sy0 + B * sy1;\n    return [\n      atan2(y, x) * degrees,\n      atan2(z, sqrt(x * x + y * y)) * degrees\n    ];\n  } : function() {\n    return [x0 * degrees, y0 * degrees];\n  };\n\n  interpolate.distance = d;\n\n  return interpolate;\n}\n","export default x => x;\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n    areaRingSum = new Adder(),\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n    areaSum.add(abs(areaRingSum));\n    areaRingSum = new Adder();\n  },\n  result: function() {\n    var area = areaSum / 2;\n    areaSum = new Adder();\n    return area;\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n  areaStream.point = areaPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n  areaRingSum.add(y0 * x - x0 * y);\n  x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n  areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n    y0 = x0,\n    x1 = -x0,\n    y1 = x1;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop,\n  result: function() {\n    var bounds = [[x0, y0], [x1, y1]];\n    x1 = y1 = -(y0 = x0 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint(x, y) {\n  if (x < x0) x0 = x;\n  if (x > x1) x1 = x;\n  if (y < y0) y0 = y;\n  if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n    Y0 = 0,\n    Z0 = 0,\n    X1 = 0,\n    Y1 = 0,\n    Z1 = 0,\n    X2 = 0,\n    Y2 = 0,\n    Z2 = 0,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar centroidStream = {\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.point = centroidPoint;\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  },\n  result: function() {\n    var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n        : Z1 ? [X1 / Z1, Y1 / Z1]\n        : Z0 ? [X0 / Z0, Y0 / Z0]\n        : [NaN, NaN];\n    X0 = Y0 = Z0 =\n    X1 = Y1 = Z1 =\n    X2 = Y2 = Z2 = 0;\n    return centroid;\n  }\n};\n\nfunction centroidPoint(x, y) {\n  X0 += x;\n  Y0 += y;\n  ++Z0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n  centroidStream.point = centroidPointLine;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n  var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n  centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n  centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n  centroidStream.point = centroidPointRing;\n  centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n  var dx = x - x0,\n      dy = y - y0,\n      z = sqrt(dx * dx + dy * dy);\n\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n\n  z = y0 * x - x0 * y;\n  X2 += z * (x0 + x);\n  Y2 += z * (y0 + y);\n  Z2 += z * 3;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau);\n        break;\n      }\n    }\n  },\n  result: noop\n};\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n    lengthRing,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar lengthStream = {\n  point: noop,\n  lineStart: function() {\n    lengthStream.point = lengthPointFirst;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint(x00, y00);\n    lengthStream.point = noop;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum;\n    lengthSum = new Adder();\n    return length;\n  }\n};\n\nfunction lengthPointFirst(x, y) {\n  lengthStream.point = lengthPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n  x0 -= x, y0 -= y;\n  lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n  x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nexport default class PathString {\n  constructor(digits) {\n    this._append = digits == null ? append : appendRound(digits);\n    this._radius = 4.5;\n    this._ = \"\";\n  }\n  pointRadius(_) {\n    this._radius = +_;\n    return this;\n  }\n  polygonStart() {\n    this._line = 0;\n  }\n  polygonEnd() {\n    this._line = NaN;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {\n    if (this._line === 0) this._ += \"Z\";\n    this._point = NaN;\n  }\n  point(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._append`M${x},${y}`;\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._append`L${x},${y}`;\n        break;\n      }\n      default: {\n        this._append`M${x},${y}`;\n        if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n          const r = this._radius;\n          const s = this._;\n          this._ = \"\"; // stash the old string so we can cache the circle path fragment\n          this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n          cacheRadius = r;\n          cacheAppend = this._append;\n          cacheCircle = this._;\n          this._ = s;\n        }\n        this._ += cacheCircle;\n        break;\n      }\n    }\n  }\n  result() {\n    const result = this._;\n    this._ = \"\";\n    return result.length ? result : null;\n  }\n}\n\nfunction append(strings) {\n  let i = 1;\n  this._ += strings[0];\n  for (const j = strings.length; i < j; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  const d = Math.floor(digits);\n  if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  if (d !== cacheDigits) {\n    const k = 10 ** d;\n    cacheDigits = d;\n    cacheAppend = function append(strings) {\n      let i = 1;\n      this._ += strings[0];\n      for (const j = strings.length; i < j; ++i) {\n        this._ += Math.round(arguments[i] * k) / k + strings[i];\n      }\n    };\n  }\n  return cacheAppend;\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n  let digits = 3,\n      pointRadius = 4.5,\n      projectionStream,\n      contextStream;\n\n  function path(object) {\n    if (object) {\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n      stream(object, projectionStream(contextStream));\n    }\n    return contextStream.result();\n  }\n\n  path.area = function(object) {\n    stream(object, projectionStream(pathArea));\n    return pathArea.result();\n  };\n\n  path.measure = function(object) {\n    stream(object, projectionStream(pathMeasure));\n    return pathMeasure.result();\n  };\n\n  path.bounds = function(object) {\n    stream(object, projectionStream(pathBounds));\n    return pathBounds.result();\n  };\n\n  path.centroid = function(object) {\n    stream(object, projectionStream(pathCentroid));\n    return pathCentroid.result();\n  };\n\n  path.projection = function(_) {\n    if (!arguments.length) return projection;\n    projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\n    return path;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _);\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n    return path;\n  };\n\n  path.pointRadius = function(_) {\n    if (!arguments.length) return pointRadius;\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n    return path;\n  };\n\n  path.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) digits = null;\n    else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    if (context === null) contextStream = new PathString(digits);\n    return path;\n  };\n\n  return path.projection(projection).digits(digits).context(context);\n}\n","export default function(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nexport function transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n  var clip = projection.clipExtent && projection.clipExtent();\n  projection.scale(150).translate([0, 0]);\n  if (clip != null) projection.clipExtent(null);\n  geoStream(object, projection.stream(boundsStream));\n  fitBounds(boundsStream.result());\n  if (clip != null) projection.clipExtent(clip);\n  return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n  return fit(projection, function(b) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitSize(projection, size, object) {\n  return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n  return fit(projection, function(b) {\n    var w = +width,\n        k = w / (b[1][0] - b[0][0]),\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\n        y = -k * b[0][1];\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n  return fit(projection, function(b) {\n    var h = +height,\n        k = h / (b[1][1] - b[0][1]),\n        x = -k * b[0][0],\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n  return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\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);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [dx + k * x, dy - k * y];\n  }\n  transform.invert = function(x, y) {\n    return [(x - dx) / k * sx, (dy - y) / k * sy];\n  };\n  return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n  if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n  var cosAlpha = cos(alpha),\n      sinAlpha = sin(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform.invert = function(x, y) {\n    return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n  };\n  return transform;\n}\n\nexport default function projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate angle\n      sx = 1, // reflectX\n      sy = 1, // reflectX\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees, point[1] * degrees];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n  };\n\n  projection.clipExtent = function(_) {\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]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n  };\n\n  projection.rotate = function(_) {\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];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n  };\n\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n  };\n\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n        transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n  var phi0 = 0,\n      phi1 = pi / 3,\n      m = projectionMutator(projectAt),\n      p = m(phi0, phi1);\n\n  p.parallels = function(_) {\n    return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n  };\n\n  return p;\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n  var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n  // Are the parallels symmetrical around the Equator?\n  if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n  function project(x, y) {\n    var r = sqrt(c - 2 * n * sin(y)) / n;\n    return [r * sin(x *= n), r0 - r * cos(x)];\n  }\n\n  project.invert = function(x, y) {\n    var r0y = r0 - y,\n        l = atan2(x, abs(r0y)) * sign(r0y);\n    if (r0y * n < 0)\n      l -= pi * sign(x) * sign(r0y);\n    return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicEqualAreaRaw)\n      .scale(155.424)\n      .center([0, 33.6442]);\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n  var cosPhi0 = cos(phi0);\n\n  function forward(lambda, phi) {\n    return [lambda * cosPhi0, sin(phi) / cosPhi0];\n  }\n\n  forward.invert = function(x, y) {\n    return [x / cosPhi0, asin(y * cosPhi0)];\n  };\n\n  return forward;\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n  return conicEqualArea()\n      .parallels([29.5, 45.5])\n      .scale(1070)\n      .translate([480, 250])\n      .rotate([96, 0])\n      .center([-0.6, 38.7]);\n}\n","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n  var n = streams.length;\n  return {\n    point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n    sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n    lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n    lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n    polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n    polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n  };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n  var cache,\n      cacheStream,\n      lower48 = albers(), lower48Point,\n      alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n      hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n      point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n  function albersUsa(coordinates) {\n    var x = coordinates[0], y = coordinates[1];\n    return point = null,\n        (lower48Point.point(x, y), point)\n        || (alaskaPoint.point(x, y), point)\n        || (hawaiiPoint.point(x, y), point);\n  }\n\n  albersUsa.invert = function(coordinates) {\n    var k = lower48.scale(),\n        t = lower48.translate(),\n        x = (coordinates[0] - t[0]) / k,\n        y = (coordinates[1] - t[1]) / k;\n    return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n        : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n        : lower48).invert(coordinates);\n  };\n\n  albersUsa.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n  };\n\n  albersUsa.precision = function(_) {\n    if (!arguments.length) return lower48.precision();\n    lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n    return reset();\n  };\n\n  albersUsa.scale = function(_) {\n    if (!arguments.length) return lower48.scale();\n    lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n    return albersUsa.translate(lower48.translate());\n  };\n\n  albersUsa.translate = function(_) {\n    if (!arguments.length) return lower48.translate();\n    var k = lower48.scale(), x = +_[0], y = +_[1];\n\n    lower48Point = lower48\n        .translate(_)\n        .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n        .stream(pointStream);\n\n    alaskaPoint = alaska\n        .translate([x - 0.307 * k, y + 0.201 * k])\n        .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    hawaiiPoint = hawaii\n        .translate([x - 0.205 * k, y + 0.212 * k])\n        .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    return reset();\n  };\n\n  albersUsa.fitExtent = function(extent, object) {\n    return fitExtent(albersUsa, extent, object);\n  };\n\n  albersUsa.fitSize = function(size, object) {\n    return fitSize(albersUsa, size, object);\n  };\n\n  albersUsa.fitWidth = function(width, object) {\n    return fitWidth(albersUsa, width, object);\n  };\n\n  albersUsa.fitHeight = function(height, object) {\n    return fitHeight(albersUsa, height, object);\n  };\n\n  function reset() {\n    cache = cacheStream = null;\n    return albersUsa;\n  }\n\n  return albersUsa.scale(1070);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n  return function(x, y) {\n    var cx = cos(x),\n        cy = cos(y),\n        k = scale(cx * cy);\n        if (k === Infinity) return [2, 0];\n    return [\n      k * cy * sin(x),\n      k * sin(y)\n    ];\n  }\n}\n\nexport function azimuthalInvert(angle) {\n  return function(x, y) {\n    var z = sqrt(x * x + y * y),\n        c = angle(z),\n        sc = sin(c),\n        cc = cos(c);\n    return [\n      atan2(x * sc, z * cc),\n      asin(z && y * sc / z)\n    ];\n  }\n}\n","import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n  return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n  return 2 * asin(z / 2);\n});\n\nexport default function() {\n  return projection(azimuthalEqualAreaRaw)\n      .scale(124.75)\n      .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n  return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n  return z;\n});\n\nexport default function() {\n  return projection(azimuthalEquidistantRaw)\n      .scale(79.4188)\n      .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n  return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n  return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n  return mercatorProjection(mercatorRaw)\n      .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n  var m = projection(project),\n      center = m.center,\n      scale = m.scale,\n      translate = m.translate,\n      clipExtent = m.clipExtent,\n      x0 = null, y0, x1, y1; // clip extent\n\n  m.scale = function(_) {\n    return arguments.length ? (scale(_), reclip()) : scale();\n  };\n\n  m.translate = function(_) {\n    return arguments.length ? (translate(_), reclip()) : translate();\n  };\n\n  m.center = function(_) {\n    return arguments.length ? (center(_), reclip()) : center();\n  };\n\n  m.clipExtent = function(_) {\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]];\n  };\n\n  function reclip() {\n    var k = pi * scale(),\n        t = m(rotation(m.rotate()).invert([0, 0]));\n    return clipExtent(x0 == null\n        ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n        ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n        : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n  }\n\n  return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n  return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n      f = cy0 * pow(tany(y0), n) / n;\n\n  if (!n) return mercatorRaw;\n\n  function project(x, y) {\n    if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n    else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n    var r = f / pow(tany(y), n);\n    return [r * sin(n * x), f - r * cos(n * x)];\n  }\n\n  project.invert = function(x, y) {\n    var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n      l = atan2(x, abs(fy)) * sign(fy);\n    if (fy * n < 0)\n      l -= pi * sign(x) * sign(fy);\n    return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicConformalRaw)\n      .scale(109.5)\n      .parallels([30, 30]);\n}\n","import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n  return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n  return projection(equirectangularRaw)\n      .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\n\nexport function conicEquidistantRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n      g = cy0 / n + y0;\n\n  if (abs(n) < epsilon) return equirectangularRaw;\n\n  function project(x, y) {\n    var gy = g - y, nx = n * x;\n    return [gy * sin(nx), g - gy * cos(nx)];\n  }\n\n  project.invert = function(x, y) {\n    var gy = g - y,\n        l = atan2(x, abs(gy)) * sign(gy);\n    if (gy * n < 0)\n      l -= pi * sign(x) * sign(gy);\n    return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicEquidistantRaw)\n      .scale(131.154)\n      .center([0, 13.9389]);\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n    A2 = -0.081106,\n    A3 = 0.000893,\n    A4 = 0.003796,\n    M = sqrt(3) / 2,\n    iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n  var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n  return [\n    lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n    l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n  ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n  var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n  for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n    fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n    fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n    l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n    if (abs(delta) < epsilon2) break;\n  }\n  return [\n    M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n    asin(sin(l) / M)\n  ];\n};\n\nexport default function() {\n  return projection(equalEarthRaw)\n      .scale(177.158);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function gnomonicRaw(x, y) {\n  var cy = cos(y), k = cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n  return projection(gnomonicRaw)\n      .scale(144.049)\n      .clipAngle(60);\n}\n","import clipRectangle from \"../clip/rectangle.js\";\nimport identity from \"../identity.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport {cos, degrees, radians, sin} from \"../math.js\";\n\nexport default function() {\n  var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n      alpha = 0, ca, sa, // angle\n      x0 = null, y0, x1, y1, // clip extent\n      kx = 1, ky = 1,\n      transform = transformer({\n        point: function(x, y) {\n          var p = projection([x, y])\n          this.stream.point(p[0], p[1]);\n        }\n      }),\n      postclip = identity,\n      cache,\n      cacheStream;\n\n  function reset() {\n    kx = k * sx;\n    ky = k * sy;\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  function projection (p) {\n    var x = p[0] * kx, y = p[1] * ky;\n    if (alpha) {\n      var t = y * ca - x * sa;\n      x = x * ca + y * sa;\n      y = t;\n    }    \n    return [x + tx, y + ty];\n  }\n  projection.invert = function(p) {\n    var x = p[0] - tx, y = p[1] - ty;\n    if (alpha) {\n      var t = y * ca + x * sa;\n      x = x * ca - y * sa;\n      y = t;\n    }\n    return [x / kx, y / ky];\n  };\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n  };\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n  projection.clipExtent = function(_) {\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]];\n  };\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, reset()) : k;\n  };\n  projection.translate = function(_) {\n    return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n  }\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\n  };\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n  };\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n  };\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  return projection;\n}\n","import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n  var phi2 = phi * phi, phi4 = phi2 * phi2;\n  return [\n    lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n    phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n  ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n  var phi = y, i = 25, delta;\n  do {\n    var phi2 = phi * phi, phi4 = phi2 * phi2;\n    phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n        (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n  } while (abs(delta) > epsilon && --i > 0);\n  return [\n    x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n    phi\n  ];\n};\n\nexport default function() {\n  return projection(naturalEarth1Raw)\n      .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n  return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n  return projection(orthographicRaw)\n      .scale(249.5)\n      .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n  var cy = cos(y), k = 1 + cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n  return 2 * atan(z);\n});\n\nexport default function() {\n  return projection(stereographicRaw)\n      .scale(250)\n      .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math.js\";\nimport {mercatorProjection} from \"./mercator.js\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n  return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n  return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n  var m = mercatorProjection(transverseMercatorRaw),\n      center = m.center,\n      rotate = m.rotate;\n\n  m.center = function(_) {\n    return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n  };\n\n  m.rotate = function(_) {\n    return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n  };\n\n  return rotate([0, 0, 90])\n      .scale(159.155);\n}\n","function defaultSeparation(a, b) {\n  return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n  return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n  return x + c.x;\n}\n\nfunction maxY(children) {\n  return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n  return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n  var children;\n  while (children = node.children) node = children[0];\n  return node;\n}\n\nfunction leafRight(node) {\n  var children;\n  while (children = node.children) node = children[children.length - 1];\n  return node;\n}\n\nexport default function() {\n  var separation = defaultSeparation,\n      dx = 1,\n      dy = 1,\n      nodeSize = false;\n\n  function cluster(root) {\n    var previousNode,\n        x = 0;\n\n    // First walk, computing the initial x & y values.\n    root.eachAfter(function(node) {\n      var children = node.children;\n      if (children) {\n        node.x = meanX(children);\n        node.y = maxY(children);\n      } else {\n        node.x = previousNode ? x += separation(node, previousNode) : 0;\n        node.y = 0;\n        previousNode = node;\n      }\n    });\n\n    var left = leafLeft(root),\n        right = leafRight(root),\n        x0 = left.x - separation(left, right) / 2,\n        x1 = right.x + separation(right, left) / 2;\n\n    // Second walk, normalizing x & y to the desired size.\n    return root.eachAfter(nodeSize ? function(node) {\n      node.x = (node.x - root.x) * dx;\n      node.y = (root.y - node.y) * dy;\n    } : function(node) {\n      node.x = (node.x - x0) / (x1 - x0) * dx;\n      node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n    });\n  }\n\n  cluster.separation = function(x) {\n    return arguments.length ? (separation = x, cluster) : separation;\n  };\n\n  cluster.size = function(x) {\n    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n  };\n\n  cluster.nodeSize = function(x) {\n    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n  };\n\n  return cluster;\n}\n","function count(node) {\n  var sum = 0,\n      children = node.children,\n      i = children && children.length;\n  if (!i) sum = 1;\n  else while (--i >= 0) sum += children[i].value;\n  node.value = sum;\n}\n\nexport default function() {\n  return this.eachAfter(count);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n  if (data instanceof Map) {\n    data = [undefined, data];\n    if (children === undefined) children = mapChildren;\n  } else if (children === undefined) {\n    children = objectChildren;\n  }\n\n  var root = new Node(data),\n      node,\n      nodes = [root],\n      child,\n      childs,\n      i,\n      n;\n\n  while (node = nodes.pop()) {\n    if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n      node.children = childs;\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = childs[i] = new Node(childs[i]));\n        child.parent = node;\n        child.depth = node.depth + 1;\n      }\n    }\n  }\n\n  return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n  return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n  return d.children;\n}\n\nfunction mapChildren(d) {\n  return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n  if (node.data.value !== undefined) node.value = node.data.value;\n  node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n  var height = 0;\n  do node.height = height;\n  while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n  this.data = data;\n  this.depth =\n  this.height = 0;\n  this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n  constructor: Node,\n  count: node_count,\n  each: node_each,\n  eachAfter: node_eachAfter,\n  eachBefore: node_eachBefore,\n  find: node_find,\n  sum: node_sum,\n  sort: node_sort,\n  path: node_path,\n  ancestors: node_ancestors,\n  descendants: node_descendants,\n  leaves: node_leaves,\n  links: node_links,\n  copy: node_copy,\n  [Symbol.iterator]: node_iterator\n};\n","export function optional(f) {\n  return f == null ? null : required(f);\n}\n\nexport function required(f) {\n  if (typeof f !== \"function\") throw new Error;\n  return f;\n}\n","export function constantZero() {\n  return 0;\n}\n\nexport default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function(callback, that) {\n  let index = -1;\n  for (const node of this) {\n    callback.call(that, node, ++index, this);\n  }\n  return this;\n}\n","export default function(callback, that) {\n  var node = this, nodes = [node], next = [], children, i, n, index = -1;\n  while (node = nodes.pop()) {\n    next.push(node);\n    if (children = node.children) {\n      for (i = 0, n = children.length; i < n; ++i) {\n        nodes.push(children[i]);\n      }\n    }\n  }\n  while (node = next.pop()) {\n    callback.call(that, node, ++index, this);\n  }\n  return this;\n}\n","export default function(callback, that) {\n  var node = this, nodes = [node], children, i, index = -1;\n  while (node = nodes.pop()) {\n    callback.call(that, node, ++index, this);\n    if (children = node.children) {\n      for (i = children.length - 1; i >= 0; --i) {\n        nodes.push(children[i]);\n      }\n    }\n  }\n  return this;\n}\n","export default function(callback, that) {\n  let index = -1;\n  for (const node of this) {\n    if (callback.call(that, node, ++index, this)) {\n      return node;\n    }\n  }\n}\n","export default function(value) {\n  return this.eachAfter(function(node) {\n    var sum = +value(node.data) || 0,\n        children = node.children,\n        i = children && children.length;\n    while (--i >= 0) sum += children[i].value;\n    node.value = sum;\n  });\n}\n","export default function(compare) {\n  return this.eachBefore(function(node) {\n    if (node.children) {\n      node.children.sort(compare);\n    }\n  });\n}\n","export default function(end) {\n  var start = this,\n      ancestor = leastCommonAncestor(start, end),\n      nodes = [start];\n  while (start !== ancestor) {\n    start = start.parent;\n    nodes.push(start);\n  }\n  var k = nodes.length;\n  while (end !== ancestor) {\n    nodes.splice(k, 0, end);\n    end = end.parent;\n  }\n  return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n  if (a === b) return a;\n  var aNodes = a.ancestors(),\n      bNodes = b.ancestors(),\n      c = null;\n  a = aNodes.pop();\n  b = bNodes.pop();\n  while (a === b) {\n    c = a;\n    a = aNodes.pop();\n    b = bNodes.pop();\n  }\n  return c;\n}\n","export default function() {\n  var node = this, nodes = [node];\n  while (node = node.parent) {\n    nodes.push(node);\n  }\n  return nodes;\n}\n","export default function() {\n  return Array.from(this);\n}\n","export default function() {\n  var leaves = [];\n  this.eachBefore(function(node) {\n    if (!node.children) {\n      leaves.push(node);\n    }\n  });\n  return leaves;\n}\n","export default function() {\n  var root = this, links = [];\n  root.each(function(node) {\n    if (node !== root) { // Don’t include the root’s parent, if any.\n      links.push({source: node.parent, target: node});\n    }\n  });\n  return links;\n}\n","export default function*() {\n  var node = this, current, next = [node], children, i, n;\n  do {\n    current = next.reverse(), next = [];\n    while (node = current.pop()) {\n      yield node;\n      if (children = node.children) {\n        for (i = 0, n = children.length; i < n; ++i) {\n          next.push(children[i]);\n        }\n      }\n    }\n  } while (next.length);\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n  let s = 1;\n  return () => (s = (a * s + c) % m) / m;\n}\n","import {shuffle} from \"../array.js\";\nimport lcg from \"../lcg.js\";\n\nexport default function(circles) {\n  return packEncloseRandom(circles, lcg());\n}\n\nexport function packEncloseRandom(circles, random) {\n  var i = 0, n = (circles = shuffle(Array.from(circles), random)).length, B = [], p, e;\n\n  while (i < n) {\n    p = circles[i];\n    if (e && enclosesWeak(e, p)) ++i;\n    else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n  }\n\n  return e;\n}\n\nfunction extendBasis(B, p) {\n  var i, j;\n\n  if (enclosesWeakAll(p, B)) return [p];\n\n  // If we get here then B must have at least one element.\n  for (i = 0; i < B.length; ++i) {\n    if (enclosesNot(p, B[i])\n        && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n      return [B[i], p];\n    }\n  }\n\n  // If we get here then B must have at least two elements.\n  for (i = 0; i < B.length - 1; ++i) {\n    for (j = i + 1; j < B.length; ++j) {\n      if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n          && enclosesNot(encloseBasis2(B[i], p), B[j])\n          && enclosesNot(encloseBasis2(B[j], p), B[i])\n          && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n        return [B[i], B[j], p];\n      }\n    }\n  }\n\n  // If we get here then something is very wrong.\n  throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n  var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n  return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\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;\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n  for (var i = 0; i < B.length; ++i) {\n    if (!enclosesWeak(a, B[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction encloseBasis(B) {\n  switch (B.length) {\n    case 1: return encloseBasis1(B[0]);\n    case 2: return encloseBasis2(B[0], B[1]);\n    case 3: return encloseBasis3(B[0], B[1], B[2]);\n  }\n}\n\nfunction encloseBasis1(a) {\n  return {\n    x: a.x,\n    y: a.y,\n    r: a.r\n  };\n}\n\nfunction encloseBasis2(a, b) {\n  var x1 = a.x, y1 = a.y, r1 = a.r,\n      x2 = b.x, y2 = b.y, r2 = b.r,\n      x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n      l = Math.sqrt(x21 * x21 + y21 * y21);\n  return {\n    x: (x1 + x2 + x21 / l * r21) / 2,\n    y: (y1 + y2 + y21 / l * r21) / 2,\n    r: (l + r1 + r2) / 2\n  };\n}\n\nfunction encloseBasis3(a, b, c) {\n  var x1 = a.x, y1 = a.y, r1 = a.r,\n      x2 = b.x, y2 = b.y, r2 = b.r,\n      x3 = c.x, y3 = c.y, r3 = c.r,\n      a2 = x1 - x2,\n      a3 = x1 - x3,\n      b2 = y1 - y2,\n      b3 = y1 - y3,\n      c2 = r2 - r1,\n      c3 = r3 - r1,\n      d1 = x1 * x1 + y1 * y1 - r1 * r1,\n      d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n      d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n      ab = a3 * b2 - a2 * b3,\n      xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n      xb = (b3 * c2 - b2 * c3) / ab,\n      ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n      yb = (a2 * c3 - a3 * c2) / ab,\n      A = xb * xb + yb * yb - 1,\n      B = 2 * (r1 + xa * xb + ya * yb),\n      C = xa * xa + ya * ya - r1 * r1,\n      r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n  return {\n    x: x1 + xa + xb * r,\n    y: y1 + ya + yb * r,\n    r: r\n  };\n}\n","export default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array, random) {\n  let m = array.length,\n      t,\n      i;\n\n  while (m) {\n    i = random() * m-- | 0;\n    t = array[m];\n    array[m] = array[i];\n    array[i] = t;\n  }\n\n  return array;\n}\n","import array from \"../array.js\";\nimport lcg from \"../lcg.js\";\nimport {packEncloseRandom} from \"./enclose.js\";\n\nfunction place(b, a, c) {\n  var dx = b.x - a.x, x, a2,\n      dy = b.y - a.y, y, b2,\n      d2 = dx * dx + dy * dy;\n  if (d2) {\n    a2 = a.r + c.r, a2 *= a2;\n    b2 = b.r + c.r, b2 *= b2;\n    if (a2 > b2) {\n      x = (d2 + b2 - a2) / (2 * d2);\n      y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n      c.x = b.x - x * dx - y * dy;\n      c.y = b.y - x * dy + y * dx;\n    } else {\n      x = (d2 + a2 - b2) / (2 * d2);\n      y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n      c.x = a.x + x * dx - y * dy;\n      c.y = a.y + x * dy + y * dx;\n    }\n  } else {\n    c.x = a.x + c.r;\n    c.y = a.y;\n  }\n}\n\nfunction intersects(a, b) {\n  var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n  var a = node._,\n      b = node.next._,\n      ab = a.r + b.r,\n      dx = (a.x * b.r + b.x * a.r) / ab,\n      dy = (a.y * b.r + b.y * a.r) / ab;\n  return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n  this._ = circle;\n  this.next = null;\n  this.previous = null;\n}\n\nexport function packSiblingsRandom(circles, random) {\n  if (!(n = (circles = array(circles)).length)) return 0;\n\n  var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n  // Place the first circle.\n  a = circles[0], a.x = 0, a.y = 0;\n  if (!(n > 1)) return a.r;\n\n  // Place the second circle.\n  b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n  if (!(n > 2)) return a.r + b.r;\n\n  // Place the third circle.\n  place(b, a, c = circles[2]);\n\n  // Initialize the front-chain using the first three circles a, b and c.\n  a = new Node(a), b = new Node(b), c = new Node(c);\n  a.next = c.previous = b;\n  b.next = a.previous = c;\n  c.next = b.previous = a;\n\n  // Attempt to place each remaining circle…\n  pack: for (i = 3; i < n; ++i) {\n    place(a._, b._, c = circles[i]), c = new Node(c);\n\n    // Find the closest intersecting circle on the front-chain, if any.\n    // “Closeness” is determined by linear distance along the front-chain.\n    // “Ahead” or “behind” is likewise determined by linear distance.\n    j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n    do {\n      if (sj <= sk) {\n        if (intersects(j._, c._)) {\n          b = j, a.next = b, b.previous = a, --i;\n          continue pack;\n        }\n        sj += j._.r, j = j.next;\n      } else {\n        if (intersects(k._, c._)) {\n          a = k, a.next = b, b.previous = a, --i;\n          continue pack;\n        }\n        sk += k._.r, k = k.previous;\n      }\n    } while (j !== k.next);\n\n    // Success! Insert the new circle c between a and b.\n    c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n    // Compute the new closest circle pair to the centroid.\n    aa = score(a);\n    while ((c = c.next) !== b) {\n      if ((ca = score(c)) < aa) {\n        a = c, aa = ca;\n      }\n    }\n    b = a.next;\n  }\n\n  // Compute the enclosing circle of the front chain.\n  a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = packEncloseRandom(a, random);\n\n  // Translate the circles to put the enclosing circle around the origin.\n  for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n  return c.r;\n}\n\nexport default function(circles) {\n  packSiblingsRandom(circles, lcg());\n  return circles;\n}\n","import {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\nimport lcg from \"../lcg.js\";\nimport {packSiblingsRandom} from \"./siblings.js\";\n\nfunction defaultRadius(d) {\n  return Math.sqrt(d.value);\n}\n\nexport default function() {\n  var radius = null,\n      dx = 1,\n      dy = 1,\n      padding = constantZero;\n\n  function pack(root) {\n    const random = lcg();\n    root.x = dx / 2, root.y = dy / 2;\n    if (radius) {\n      root.eachBefore(radiusLeaf(radius))\n          .eachAfter(packChildrenRandom(padding, 0.5, random))\n          .eachBefore(translateChild(1));\n    } else {\n      root.eachBefore(radiusLeaf(defaultRadius))\n          .eachAfter(packChildrenRandom(constantZero, 1, random))\n          .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))\n          .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n    }\n    return root;\n  }\n\n  pack.radius = function(x) {\n    return arguments.length ? (radius = optional(x), pack) : radius;\n  };\n\n  pack.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n  };\n\n  pack.padding = function(x) {\n    return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n  };\n\n  return pack;\n}\n\nfunction radiusLeaf(radius) {\n  return function(node) {\n    if (!node.children) {\n      node.r = Math.max(0, +radius(node) || 0);\n    }\n  };\n}\n\nfunction packChildrenRandom(padding, k, random) {\n  return function(node) {\n    if (children = node.children) {\n      var children,\n          i,\n          n = children.length,\n          r = padding(node) * k || 0,\n          e;\n\n      if (r) for (i = 0; i < n; ++i) children[i].r += r;\n      e = packSiblingsRandom(children, random);\n      if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n      node.r = e + r;\n    }\n  };\n}\n\nfunction translateChild(k) {\n  return function(node) {\n    var parent = node.parent;\n    node.r *= k;\n    if (parent) {\n      node.x = parent.x + k * node.x;\n      node.y = parent.y + k * node.y;\n    }\n  };\n}\n","export default function(node) {\n  node.x0 = Math.round(node.x0);\n  node.y0 = Math.round(node.y0);\n  node.x1 = Math.round(node.x1);\n  node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      node,\n      i = -1,\n      n = nodes.length,\n      k = parent.value && (x1 - x0) / parent.value;\n\n  while (++i < n) {\n    node = nodes[i], node.y0 = y0, node.y1 = y1;\n    node.x0 = x0, node.x1 = x0 += node.value * k;\n  }\n}\n","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n  var dx = 1,\n      dy = 1,\n      padding = 0,\n      round = false;\n\n  function partition(root) {\n    var n = root.height + 1;\n    root.x0 =\n    root.y0 = padding;\n    root.x1 = dx;\n    root.y1 = dy / n;\n    root.eachBefore(positionNode(dy, n));\n    if (round) root.eachBefore(roundNode);\n    return root;\n  }\n\n  function positionNode(dy, n) {\n    return function(node) {\n      if (node.children) {\n        treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n      }\n      var x0 = node.x0,\n          y0 = node.y0,\n          x1 = node.x1 - padding,\n          y1 = node.y1 - padding;\n      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n      node.x0 = x0;\n      node.y0 = y0;\n      node.x1 = x1;\n      node.y1 = y1;\n    };\n  }\n\n  partition.round = function(x) {\n    return arguments.length ? (round = !!x, partition) : round;\n  };\n\n  partition.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n  };\n\n  partition.padding = function(x) {\n    return arguments.length ? (padding = +x, partition) : padding;\n  };\n\n  return partition;\n}\n","import {optional} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n    ambiguous = {},\n    imputed = {};\n\nfunction defaultId(d) {\n  return d.id;\n}\n\nfunction defaultParentId(d) {\n  return d.parentId;\n}\n\nexport default function() {\n  var id = defaultId,\n      parentId = defaultParentId,\n      path;\n\n  function stratify(data) {\n    var nodes = Array.from(data),\n        currentId = id,\n        currentParentId = parentId,\n        n,\n        d,\n        i,\n        root,\n        parent,\n        node,\n        nodeId,\n        nodeKey,\n        nodeByKey = new Map;\n\n    if (path != null) {\n      const I = nodes.map((d, i) => normalize(path(d, i, data)));\n      const P = I.map(parentof);\n      const S = new Set(I).add(\"\");\n      for (const i of P) {\n        if (!S.has(i)) {\n          S.add(i);\n          I.push(i);\n          P.push(parentof(i));\n          nodes.push(imputed);\n        }\n      }\n      currentId = (_, i) => I[i];\n      currentParentId = (_, i) => P[i];\n    }\n\n    for (i = 0, n = nodes.length; i < n; ++i) {\n      d = nodes[i], node = nodes[i] = new Node(d);\n      if ((nodeId = currentId(d, i, data)) != null && (nodeId += \"\")) {\n        nodeKey = node.id = nodeId;\n        nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n      }\n      if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += \"\")) {\n        node.parent = nodeId;\n      }\n    }\n\n    for (i = 0; i < n; ++i) {\n      node = nodes[i];\n      if (nodeId = node.parent) {\n        parent = nodeByKey.get(nodeId);\n        if (!parent) throw new Error(\"missing: \" + nodeId);\n        if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n        if (parent.children) parent.children.push(node);\n        else parent.children = [node];\n        node.parent = parent;\n      } else {\n        if (root) throw new Error(\"multiple roots\");\n        root = node;\n      }\n    }\n\n    if (!root) throw new Error(\"no root\");\n\n    // When imputing internal nodes, only introduce roots if needed.\n    // Then replace the imputed marker data with null.\n    if (path != null) {\n      while (root.data === imputed && root.children.length === 1) {\n        root = root.children[0], --n;\n      }\n      for (let i = nodes.length - 1; i >= 0; --i) {\n        node = nodes[i];\n        if (node.data !== imputed) break;\n        node.data = null;\n      }\n    }\n\n    root.parent = preroot;\n    root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n    root.parent = null;\n    if (n > 0) throw new Error(\"cycle\");\n\n    return root;\n  }\n\n  stratify.id = function(x) {\n    return arguments.length ? (id = optional(x), stratify) : id;\n  };\n\n  stratify.parentId = function(x) {\n    return arguments.length ? (parentId = optional(x), stratify) : parentId;\n  };\n\n  stratify.path = function(x) {\n    return arguments.length ? (path = optional(x), stratify) : path;\n  };\n\n  return stratify;\n}\n\n// To normalize a path, we coerce to a string, strip the trailing slash if any\n// (as long as the trailing slash is not immediately preceded by another slash),\n// and add leading slash if missing.\nfunction normalize(path) {\n  path = `${path}`;\n  let i = path.length;\n  if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);\n  return path[0] === \"/\" ? path : `/${path}`;\n}\n\n// Walk backwards to find the first slash that is not the leading slash, e.g.:\n// \"/foo/bar\" ⇥ \"/foo\", \"/foo\" ⇥ \"/\", \"/\" ↦ \"\". (The root is special-cased\n// because the id of the root must be a truthy value.)\nfunction parentof(path) {\n  let i = path.length;\n  if (i < 2) return \"\";\n  while (--i > 1) if (slash(path, i)) break;\n  return path.slice(0, i);\n}\n\n// Slashes can be escaped; to determine whether a slash is a path delimiter, we\n// count the number of preceding backslashes escaping the forward slash: an odd\n// number indicates an escaped forward slash.\nfunction slash(path, i) {\n  if (path[i] === \"/\") {\n    let k = 0;\n    while (i > 0 && path[--i] === \"\\\\\") ++k;\n    if ((k & 1) === 0) return true;\n  }\n  return false;\n}\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n  return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n//   return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n  var children = v.children;\n  return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n  var children = v.children;\n  return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n  var change = shift / (wp.i - wm.i);\n  wp.c -= change;\n  wp.s += shift;\n  wm.c += change;\n  wp.z += shift;\n  wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n  var shift = 0,\n      change = 0,\n      children = v.children,\n      i = children.length,\n      w;\n  while (--i >= 0) {\n    w = children[i];\n    w.z += shift;\n    w.m += shift;\n    shift += w.s + (change += w.c);\n  }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n  return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n  this._ = node;\n  this.parent = null;\n  this.children = null;\n  this.A = null; // default ancestor\n  this.a = this; // ancestor\n  this.z = 0; // prelim\n  this.m = 0; // mod\n  this.c = 0; // change\n  this.s = 0; // shift\n  this.t = null; // thread\n  this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n  var tree = new TreeNode(root, 0),\n      node,\n      nodes = [tree],\n      child,\n      children,\n      i,\n      n;\n\n  while (node = nodes.pop()) {\n    if (children = node._.children) {\n      node.children = new Array(n = children.length);\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n        child.parent = node;\n      }\n    }\n  }\n\n  (tree.parent = new TreeNode(null, 0)).children = [tree];\n  return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n  var separation = defaultSeparation,\n      dx = 1,\n      dy = 1,\n      nodeSize = null;\n\n  function tree(root) {\n    var t = treeRoot(root);\n\n    // Compute the layout using Buchheim et al.’s algorithm.\n    t.eachAfter(firstWalk), t.parent.m = -t.z;\n    t.eachBefore(secondWalk);\n\n    // If a fixed node size is specified, scale x and y.\n    if (nodeSize) root.eachBefore(sizeNode);\n\n    // If a fixed tree size is specified, scale x and y based on the extent.\n    // Compute the left-most, right-most, and depth-most nodes for extents.\n    else {\n      var left = root,\n          right = root,\n          bottom = root;\n      root.eachBefore(function(node) {\n        if (node.x < left.x) left = node;\n        if (node.x > right.x) right = node;\n        if (node.depth > bottom.depth) bottom = node;\n      });\n      var s = left === right ? 1 : separation(left, right) / 2,\n          tx = s - left.x,\n          kx = dx / (right.x + s + tx),\n          ky = dy / (bottom.depth || 1);\n      root.eachBefore(function(node) {\n        node.x = (node.x + tx) * kx;\n        node.y = node.depth * ky;\n      });\n    }\n\n    return root;\n  }\n\n  // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n  // applied recursively to the children of v, as well as the function\n  // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n  // node v is placed to the midpoint of its outermost children.\n  function firstWalk(v) {\n    var children = v.children,\n        siblings = v.parent.children,\n        w = v.i ? siblings[v.i - 1] : null;\n    if (children) {\n      executeShifts(v);\n      var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n      if (w) {\n        v.z = w.z + separation(v._, w._);\n        v.m = v.z - midpoint;\n      } else {\n        v.z = midpoint;\n      }\n    } else if (w) {\n      v.z = w.z + separation(v._, w._);\n    }\n    v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n  }\n\n  // Computes all real x-coordinates by summing up the modifiers recursively.\n  function secondWalk(v) {\n    v._.x = v.z + v.parent.m;\n    v.m += v.parent.m;\n  }\n\n  // The core of the algorithm. Here, a new subtree is combined with the\n  // previous subtrees. Threads are used to traverse the inside and outside\n  // contours of the left and right subtree up to the highest common level. The\n  // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n  // superscript o means outside and i means inside, the subscript - means left\n  // subtree and + means right subtree. For summing up the modifiers along the\n  // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n  // nodes of the inside contours conflict, we compute the left one of the\n  // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n  // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n  // Finally, we add a new thread (if necessary).\n  function apportion(v, w, ancestor) {\n    if (w) {\n      var vip = v,\n          vop = v,\n          vim = w,\n          vom = vip.parent.children[0],\n          sip = vip.m,\n          sop = vop.m,\n          sim = vim.m,\n          som = vom.m,\n          shift;\n      while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n        vom = nextLeft(vom);\n        vop = nextRight(vop);\n        vop.a = v;\n        shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n        if (shift > 0) {\n          moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n          sip += shift;\n          sop += shift;\n        }\n        sim += vim.m;\n        sip += vip.m;\n        som += vom.m;\n        sop += vop.m;\n      }\n      if (vim && !nextRight(vop)) {\n        vop.t = vim;\n        vop.m += sim - sop;\n      }\n      if (vip && !nextLeft(vom)) {\n        vom.t = vip;\n        vom.m += sip - som;\n        ancestor = v;\n      }\n    }\n    return ancestor;\n  }\n\n  function sizeNode(node) {\n    node.x *= dx;\n    node.y = node.depth * dy;\n  }\n\n  tree.separation = function(x) {\n    return arguments.length ? (separation = x, tree) : separation;\n  };\n\n  tree.size = function(x) {\n    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n  };\n\n  tree.nodeSize = function(x) {\n    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n  };\n\n  return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      node,\n      i = -1,\n      n = nodes.length,\n      k = parent.value && (y1 - y0) / parent.value;\n\n  while (++i < n) {\n    node = nodes[i], node.x0 = x0, node.x1 = x1;\n    node.y0 = y0, node.y1 = y0 += node.value * k;\n  }\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n  var rows = [],\n      nodes = parent.children,\n      row,\n      nodeValue,\n      i0 = 0,\n      i1 = 0,\n      n = nodes.length,\n      dx, dy,\n      value = parent.value,\n      sumValue,\n      minValue,\n      maxValue,\n      newRatio,\n      minRatio,\n      alpha,\n      beta;\n\n  while (i0 < n) {\n    dx = x1 - x0, dy = y1 - y0;\n\n    // Find the next non-empty node.\n    do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n    minValue = maxValue = sumValue;\n    alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n    beta = sumValue * sumValue * alpha;\n    minRatio = Math.max(maxValue / beta, beta / minValue);\n\n    // Keep adding nodes while the aspect ratio maintains or improves.\n    for (; i1 < n; ++i1) {\n      sumValue += nodeValue = nodes[i1].value;\n      if (nodeValue < minValue) minValue = nodeValue;\n      if (nodeValue > maxValue) maxValue = nodeValue;\n      beta = sumValue * sumValue * alpha;\n      newRatio = Math.max(maxValue / beta, beta / minValue);\n      if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n      minRatio = newRatio;\n    }\n\n    // Position and record the row orientation.\n    rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n    if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n    else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n    value -= sumValue, i0 = i1;\n  }\n\n  return rows;\n}\n\nexport default (function custom(ratio) {\n\n  function squarify(parent, x0, y0, x1, y1) {\n    squarifyRatio(ratio, parent, x0, y0, x1, y1);\n  }\n\n  squarify.ratio = function(x) {\n    return custom((x = +x) > 1 ? x : 1);\n  };\n\n  return squarify;\n})(phi);\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n  var tile = squarify,\n      round = false,\n      dx = 1,\n      dy = 1,\n      paddingStack = [0],\n      paddingInner = constantZero,\n      paddingTop = constantZero,\n      paddingRight = constantZero,\n      paddingBottom = constantZero,\n      paddingLeft = constantZero;\n\n  function treemap(root) {\n    root.x0 =\n    root.y0 = 0;\n    root.x1 = dx;\n    root.y1 = dy;\n    root.eachBefore(positionNode);\n    paddingStack = [0];\n    if (round) root.eachBefore(roundNode);\n    return root;\n  }\n\n  function positionNode(node) {\n    var p = paddingStack[node.depth],\n        x0 = node.x0 + p,\n        y0 = node.y0 + p,\n        x1 = node.x1 - p,\n        y1 = node.y1 - p;\n    if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n    if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n    node.x0 = x0;\n    node.y0 = y0;\n    node.x1 = x1;\n    node.y1 = y1;\n    if (node.children) {\n      p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n      x0 += paddingLeft(node) - p;\n      y0 += paddingTop(node) - p;\n      x1 -= paddingRight(node) - p;\n      y1 -= paddingBottom(node) - p;\n      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n      tile(node, x0, y0, x1, y1);\n    }\n  }\n\n  treemap.round = function(x) {\n    return arguments.length ? (round = !!x, treemap) : round;\n  };\n\n  treemap.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n  };\n\n  treemap.tile = function(x) {\n    return arguments.length ? (tile = required(x), treemap) : tile;\n  };\n\n  treemap.padding = function(x) {\n    return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n  };\n\n  treemap.paddingInner = function(x) {\n    return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n  };\n\n  treemap.paddingOuter = function(x) {\n    return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n  };\n\n  treemap.paddingTop = function(x) {\n    return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n  };\n\n  treemap.paddingRight = function(x) {\n    return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n  };\n\n  treemap.paddingBottom = function(x) {\n    return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n  };\n\n  treemap.paddingLeft = function(x) {\n    return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n  };\n\n  return treemap;\n}\n","export default function(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      i, n = nodes.length,\n      sum, sums = new Array(n + 1);\n\n  for (sums[0] = sum = i = 0; i < n; ++i) {\n    sums[i + 1] = sum += nodes[i].value;\n  }\n\n  partition(0, n, parent.value, x0, y0, x1, y1);\n\n  function partition(i, j, value, x0, y0, x1, y1) {\n    if (i >= j - 1) {\n      var node = nodes[i];\n      node.x0 = x0, node.y0 = y0;\n      node.x1 = x1, node.y1 = y1;\n      return;\n    }\n\n    var valueOffset = sums[i],\n        valueTarget = (value / 2) + valueOffset,\n        k = i + 1,\n        hi = j - 1;\n\n    while (k < hi) {\n      var mid = k + hi >>> 1;\n      if (sums[mid] < valueTarget) k = mid + 1;\n      else hi = mid;\n    }\n\n    if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n    var valueLeft = sums[k] - valueOffset,\n        valueRight = value - valueLeft;\n\n    if ((x1 - x0) > (y1 - y0)) {\n      var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n      partition(i, k, valueLeft, x0, y0, xk, y1);\n      partition(k, j, valueRight, xk, y0, x1, y1);\n    } else {\n      var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n      partition(i, k, valueLeft, x0, y0, x1, yk);\n      partition(k, j, valueRight, x0, yk, x1, y1);\n    }\n  }\n}\n","import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n  (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\n\nexport default (function custom(ratio) {\n\n  function resquarify(parent, x0, y0, x1, y1) {\n    if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n      var rows,\n          row,\n          nodes,\n          i,\n          j = -1,\n          n,\n          m = rows.length,\n          value = parent.value;\n\n      while (++j < m) {\n        row = rows[j], nodes = row.children;\n        for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n        if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\n        else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n        value -= row.value;\n      }\n    } else {\n      parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n      rows.ratio = ratio;\n    }\n  }\n\n  resquarify.ratio = function(x) {\n    return custom((x = +x) > 1 ? x : 1);\n  };\n\n  return resquarify;\n})(phi);\n","export default function(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n}\n","import {hue} from \"./color.js\";\n\nexport default function(a, b) {\n  var i = hue(+a, +b);\n  return function(t) {\n    var x = i(t);\n    return x - 360 * Math.floor(x / 360);\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n  // p0 = [ux0, uy0, w0]\n  // p1 = [ux1, uy1, w1]\n  function zoom(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n        dx = ux1 - ux0,\n        dy = uy1 - uy0,\n        d2 = dx * dx + dy * dy,\n        i,\n        S;\n\n    // Special case for u0 ≅ u1.\n    if (d2 < epsilon2) {\n      S = Math.log(w1 / w0) / rho;\n      i = function(t) {\n        return [\n          ux0 + t * dx,\n          uy0 + t * dy,\n          w0 * Math.exp(rho * t * S)\n        ];\n      }\n    }\n\n    // General case.\n    else {\n      var d1 = Math.sqrt(d2),\n          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n      S = (r1 - r0) / rho;\n      i = function(t) {\n        var s = t * S,\n            coshr0 = cosh(r0),\n            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n        return [\n          ux0 + u * dx,\n          uy0 + u * dy,\n          w0 * coshr0 / cosh(rho * s + r0)\n        ];\n      }\n    }\n\n    i.duration = S * 1000 * rho / Math.SQRT2;\n\n    return i;\n  }\n\n  zoom.rho = function(_) {\n    var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n    return zoomRho(_1, _2, _4);\n  };\n\n  return zoom;\n})(Math.SQRT2, 2, 4);\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n        s = color(start.s, end.s),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.s = s(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n  var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n      a = color(start.a, end.a),\n      b = color(start.b, end.b),\n      opacity = color(start.opacity, end.opacity);\n  return function(t) {\n    start.l = l(t);\n    start.a = a(t);\n    start.b = b(t);\n    start.opacity = opacity(t);\n    return start + \"\";\n  };\n}\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n        c = color(start.c, end.c),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.c = c(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n  return (function cubehelixGamma(y) {\n    y = +y;\n\n    function cubehelix(start, end) {\n      var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n          s = color(start.s, end.s),\n          l = color(start.l, end.l),\n          opacity = color(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(Math.pow(t, y));\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    cubehelix.gamma = cubehelixGamma;\n\n    return cubehelix;\n  })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n  if (values === undefined) values = interpolate, interpolate = value;\n  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n  while (i < n) I[i] = interpolate(v, v = values[++i]);\n  return function(t) {\n    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n    return I[i](t - i);\n  };\n}\n","export default function(interpolator, n) {\n  var samples = new Array(n);\n  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n  return samples;\n}\n","export default function(polygon) {\n  var i = -1,\n      n = polygon.length,\n      a,\n      b = polygon[n - 1],\n      area = 0;\n\n  while (++i < n) {\n    a = b;\n    b = polygon[i];\n    area += a[1] * b[0] - a[0] * b[1];\n  }\n\n  return area / 2;\n}\n","export default function(polygon) {\n  var i = -1,\n      n = polygon.length,\n      x = 0,\n      y = 0,\n      a,\n      b = polygon[n - 1],\n      c,\n      k = 0;\n\n  while (++i < n) {\n    a = b;\n    b = polygon[i];\n    k += c = a[0] * b[1] - b[0] * a[1];\n    x += (a[0] + b[0]) * c;\n    y += (a[1] + b[1]) * c;\n  }\n\n  return k *= 3, [x / k, y / k];\n}\n","// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of\n// the 3D cross product in a quadrant I Cartesian coordinate system (+x is\n// right, +y is up). Returns a positive value if ABC is counter-clockwise,\n// negative if clockwise, and zero if the points are collinear.\nexport default function(a, b, c) {\n  return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n}\n","import cross from \"./cross.js\";\n\nfunction lexicographicOrder(a, b) {\n  return a[0] - b[0] || a[1] - b[1];\n}\n\n// Computes the upper convex hull per the monotone chain algorithm.\n// Assumes points.length >= 3, is sorted by x, unique in y.\n// Returns an array of indices into points in left-to-right order.\nfunction computeUpperHullIndexes(points) {\n  const n = points.length,\n      indexes = [0, 1];\n  let size = 2, i;\n\n  for (i = 2; i < n; ++i) {\n    while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;\n    indexes[size++] = i;\n  }\n\n  return indexes.slice(0, size); // remove popped points\n}\n\nexport default function(points) {\n  if ((n = points.length) < 3) return null;\n\n  var i,\n      n,\n      sortedPoints = new Array(n),\n      flippedPoints = new Array(n);\n\n  for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];\n  sortedPoints.sort(lexicographicOrder);\n  for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];\n\n  var upperIndexes = computeUpperHullIndexes(sortedPoints),\n      lowerIndexes = computeUpperHullIndexes(flippedPoints);\n\n  // Construct the hull polygon, removing possible duplicate endpoints.\n  var skipLeft = lowerIndexes[0] === upperIndexes[0],\n      skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],\n      hull = [];\n\n  // Add upper hull in right-to-l order.\n  // Then add lower hull in left-to-right order.\n  for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);\n  for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);\n\n  return hull;\n}\n","export default function(polygon, point) {\n  var n = polygon.length,\n      p = polygon[n - 1],\n      x = point[0], y = point[1],\n      x0 = p[0], y0 = p[1],\n      x1, y1,\n      inside = false;\n\n  for (var i = 0; i < n; ++i) {\n    p = polygon[i], x1 = p[0], y1 = p[1];\n    if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;\n    x0 = x1, y0 = y1;\n  }\n\n  return inside;\n}\n","export default function(polygon) {\n  var i = -1,\n      n = polygon.length,\n      b = polygon[n - 1],\n      xa,\n      ya,\n      xb = b[0],\n      yb = b[1],\n      perimeter = 0;\n\n  while (++i < n) {\n    xa = xb;\n    ya = yb;\n    b = polygon[i];\n    xb = b[0];\n    yb = b[1];\n    xa -= xb;\n    ya -= yb;\n    perimeter += Math.hypot(xa, ya);\n  }\n\n  return perimeter;\n}\n","export default Math.random;\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomUniform(source) {\n  function randomUniform(min, max) {\n    min = min == null ? 0 : +min;\n    max = max == null ? 1 : +max;\n    if (arguments.length === 1) max = min, min = 0;\n    else max -= min;\n    return function() {\n      return source() * max + min;\n    };\n  }\n\n  randomUniform.source = sourceRandomUniform;\n\n  return randomUniform;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomInt(source) {\n  function randomInt(min, max) {\n    if (arguments.length < 2) max = min, min = 0;\n    min = Math.floor(min);\n    max = Math.floor(max) - min;\n    return function() {\n      return Math.floor(source() * max + min);\n    };\n  }\n\n  randomInt.source = sourceRandomInt;\n\n  return randomInt;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomNormal(source) {\n  function randomNormal(mu, sigma) {\n    var x, r;\n    mu = mu == null ? 0 : +mu;\n    sigma = sigma == null ? 1 : +sigma;\n    return function() {\n      var y;\n\n      // If available, use the second previously-generated uniform random.\n      if (x != null) y = x, x = null;\n\n      // Otherwise, generate a new x and y.\n      else do {\n        x = source() * 2 - 1;\n        y = source() * 2 - 1;\n        r = x * x + y * y;\n      } while (!r || r > 1);\n\n      return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n    };\n  }\n\n  randomNormal.source = sourceRandomNormal;\n\n  return randomNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\nimport normal from \"./normal.js\";\n\nexport default (function sourceRandomLogNormal(source) {\n  var N = normal.source(source);\n\n  function randomLogNormal() {\n    var randomNormal = N.apply(this, arguments);\n    return function() {\n      return Math.exp(randomNormal());\n    };\n  }\n\n  randomLogNormal.source = sourceRandomLogNormal;\n\n  return randomLogNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomIrwinHall(source) {\n  function randomIrwinHall(n) {\n    if ((n = +n) <= 0) return () => 0;\n    return function() {\n      for (var sum = 0, i = n; i > 1; --i) sum += source();\n      return sum + i * source();\n    };\n  }\n\n  randomIrwinHall.source = sourceRandomIrwinHall;\n\n  return randomIrwinHall;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\nimport irwinHall from \"./irwinHall.js\";\n\nexport default (function sourceRandomBates(source) {\n  var I = irwinHall.source(source);\n\n  function randomBates(n) {\n    // use limiting distribution at n === 0\n    if ((n = +n) === 0) return source;\n    var randomIrwinHall = I(n);\n    return function() {\n      return randomIrwinHall() / n;\n    };\n  }\n\n  randomBates.source = sourceRandomBates;\n\n  return randomBates;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomExponential(source) {\n  function randomExponential(lambda) {\n    return function() {\n      return -Math.log1p(-source()) / lambda;\n    };\n  }\n\n  randomExponential.source = sourceRandomExponential;\n\n  return randomExponential;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomPareto(source) {\n  function randomPareto(alpha) {\n    if ((alpha = +alpha) < 0) throw new RangeError(\"invalid alpha\");\n    alpha = 1 / -alpha;\n    return function() {\n      return Math.pow(1 - source(), alpha);\n    };\n  }\n\n  randomPareto.source = sourceRandomPareto;\n\n  return randomPareto;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomBernoulli(source) {\n  function randomBernoulli(p) {\n    if ((p = +p) < 0 || p > 1) throw new RangeError(\"invalid p\");\n    return function() {\n      return Math.floor(source() + p);\n    };\n  }\n\n  randomBernoulli.source = sourceRandomBernoulli;\n\n  return randomBernoulli;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomGeometric(source) {\n  function randomGeometric(p) {\n    if ((p = +p) < 0 || p > 1) throw new RangeError(\"invalid p\");\n    if (p === 0) return () => Infinity;\n    if (p === 1) return () => 1;\n    p = Math.log1p(-p);\n    return function() {\n      return 1 + Math.floor(Math.log1p(-source()) / p);\n    };\n  }\n\n  randomGeometric.source = sourceRandomGeometric;\n\n  return randomGeometric;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\nimport normal from \"./normal.js\";\n\nexport default (function sourceRandomGamma(source) {\n  var randomNormal = normal.source(source)();\n\n  function randomGamma(k, theta) {\n    if ((k = +k) < 0) throw new RangeError(\"invalid k\");\n    // degenerate distribution if k === 0\n    if (k === 0) return () => 0;\n    theta = theta == null ? 1 : +theta;\n    // exponential distribution if k === 1\n    if (k === 1) return () => -Math.log1p(-source()) * theta;\n\n    var d = (k < 1 ? k + 1 : k) - 1 / 3,\n        c = 1 / (3 * Math.sqrt(d)),\n        multiplier = k < 1 ? () => Math.pow(source(), 1 / k) : () => 1;\n    return function() {\n      do {\n        do {\n          var x = randomNormal(),\n              v = 1 + c * x;\n        } while (v <= 0);\n        v *= v * v;\n        var u = 1 - source();\n      } while (u >= 1 - 0.0331 * x * x * x * x && Math.log(u) >= 0.5 * x * x + d * (1 - v + Math.log(v)));\n      return d * v * multiplier() * theta;\n    };\n  }\n\n  randomGamma.source = sourceRandomGamma;\n\n  return randomGamma;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\nimport gamma from \"./gamma.js\";\n\nexport default (function sourceRandomBeta(source) {\n  var G = gamma.source(source);\n\n  function randomBeta(alpha, beta) {\n    var X = G(alpha),\n        Y = G(beta);\n    return function() {\n      var x = X();\n      return x === 0 ? 0 : x / (x + Y());\n    };\n  }\n\n  randomBeta.source = sourceRandomBeta;\n\n  return randomBeta;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\nimport beta from \"./beta.js\";\nimport geometric from \"./geometric.js\";\n\nexport default (function sourceRandomBinomial(source) {\n  var G = geometric.source(source),\n      B = beta.source(source);\n\n  function randomBinomial(n, p) {\n    n = +n;\n    if ((p = +p) >= 1) return () => n;\n    if (p <= 0) return () => 0;\n    return function() {\n      var acc = 0, nn = n, pp = p;\n      while (nn * pp > 16 && nn * (1 - pp) > 16) {\n        var i = Math.floor((nn + 1) * pp),\n            y = B(i, nn - i + 1)();\n        if (y <= pp) {\n          acc += i;\n          nn -= i;\n          pp = (pp - y) / (1 - y);\n        } else {\n          nn = i - 1;\n          pp /= y;\n        }\n      }\n      var sign = pp < 0.5,\n          pFinal = sign ? pp : 1 - pp,\n          g = G(pFinal);\n      for (var s = g(), k = 0; s <= nn; ++k) s += g();\n      return acc + (sign ? k : nn - k);\n    };\n  }\n\n  randomBinomial.source = sourceRandomBinomial;\n\n  return randomBinomial;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomWeibull(source) {\n  function randomWeibull(k, a, b) {\n    var outerFunc;\n    if ((k = +k) === 0) {\n      outerFunc = x => -Math.log(x);\n    } else {\n      k = 1 / k;\n      outerFunc = x => Math.pow(x, k);\n    }\n    a = a == null ? 0 : +a;\n    b = b == null ? 1 : +b;\n    return function() {\n      return a + b * outerFunc(-Math.log1p(-source()));\n    };\n  }\n\n  randomWeibull.source = sourceRandomWeibull;\n\n  return randomWeibull;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomCauchy(source) {\n  function randomCauchy(a, b) {\n    a = a == null ? 0 : +a;\n    b = b == null ? 1 : +b;\n    return function() {\n      return a + b * Math.tan(Math.PI * source());\n    };\n  }\n\n  randomCauchy.source = sourceRandomCauchy;\n\n  return randomCauchy;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomLogistic(source) {\n  function randomLogistic(a, b) {\n    a = a == null ? 0 : +a;\n    b = b == null ? 1 : +b;\n    return function() {\n      var u = source();\n      return a + b * Math.log(u / (1 - u));\n    };\n  }\n\n  randomLogistic.source = sourceRandomLogistic;\n\n  return randomLogistic;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\nimport binomial from \"./binomial.js\";\nimport gamma from \"./gamma.js\";\n\nexport default (function sourceRandomPoisson(source) {\n  var G = gamma.source(source),\n      B = binomial.source(source);\n\n  function randomPoisson(lambda) {\n    return function() {\n      var acc = 0, l = lambda;\n      while (l > 16) {\n        var n = Math.floor(0.875 * l),\n            t = G(n)();\n        if (t > l) return acc + B(n - 1, l / t)();\n        acc += n;\n        l -= t;\n      }\n      for (var s = -Math.log1p(-source()), k = 0; s <= l; ++k) s -= Math.log1p(-source());\n      return acc + k;\n    };\n  }\n\n  randomPoisson.source = sourceRandomPoisson;\n\n  return randomPoisson;\n})(defaultSource);\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst mul = 0x19660D;\nconst inc = 0x3C6EF35F;\nconst eps = 1 / 0x100000000;\n\nexport default function lcg(seed = Math.random()) {\n  let state = (0 <= seed && seed < 1 ? seed / eps : Math.abs(seed)) | 0;\n  return () => (state = mul * state + inc | 0, eps * (state >>> 0));\n}\n","export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n  var index = new InternMap(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    let i = index.get(d);\n    if (i === undefined) {\n      if (unknown !== implicit) return unknown;\n      index.set(d, i = domain.push(d) - 1);\n    }\n    return range[i % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = new InternMap();\n    for (const value of _) {\n      if (index.has(value)) continue;\n      index.set(value, domain.push(value) - 1);\n    }\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      r0 = 0,\n      r1 = 1,\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = r1 < r0,\n        start = reverse ? r1 : r0,\n        stop = reverse ? r0 : r1;\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n  };\n\n  scale.rangeRound = function(_) {\n    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), [r0, r1])\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function number(x) {\n  return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n  var t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous() {\n  return transformer()(identity, identity);\n}\n","export default function constants(x) {\n  return function() {\n    return x;\n  };\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain();\n    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n  var unknown;\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : x;\n  }\n\n  scale.invert = scale;\n\n  scale.domain = scale.range = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return identity(domain).unknown(unknown);\n  };\n\n  domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n  return linearish(scale);\n}\n","export default function nice(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n  return Math.log(x);\n}\n\nfunction transformExp(x) {\n  return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n  return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n  return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n  return base === 10 ? pow10\n      : base === Math.E ? Math.exp\n      : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n  return base === Math.E ? Math.log\n      : base === 10 && Math.log10\n      || base === 2 && Math.log2\n      || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n  return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n  const scale = transform(transformLog, transformExp);\n  const domain = scale.domain;\n  let base = 10;\n  let logs;\n  let pows;\n\n  function rescale() {\n    logs = logp(base), pows = powp(base);\n    if (domain()[0] < 0) {\n      logs = reflect(logs), pows = reflect(pows);\n      transform(transformLogn, transformExpn);\n    } else {\n      transform(transformLog, transformExp);\n    }\n    return scale;\n  }\n\n  scale.base = function(_) {\n    return arguments.length ? (base = +_, rescale()) : base;\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.ticks = count => {\n    const d = domain();\n    let u = d[0];\n    let v = d[d.length - 1];\n    const r = v < u;\n\n    if (r) ([u, v] = [v, u]);\n\n    let i = logs(u);\n    let j = logs(v);\n    let k;\n    let t;\n    const n = count == null ? 10 : +count;\n    let z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.floor(i), j = Math.ceil(j);\n      if (u > 0) for (; i <= j; ++i) {\n        for (k = 1; k < base; ++k) {\n          t = i < 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      } else for (; i <= j; ++i) {\n        for (k = base - 1; k >= 1; --k) {\n          t = i > 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n      if (z.length * 2 < n) z = ticks(u, v, n);\n    } else {\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\n    }\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = (count, specifier) => {\n    if (count == null) count = 10;\n    if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n    if (typeof specifier !== \"function\") {\n      if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n      specifier = format(specifier);\n    }\n    if (count === Infinity) return specifier;\n    const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return d => {\n      let i = d / pows(Math.round(logs(d)));\n      if (i * base < base - 0.5) i *= base;\n      return i <= k ? specifier(d) : \"\";\n    };\n  };\n\n  scale.nice = () => {\n    return domain(nice(domain(), {\n      floor: x => pows(Math.floor(logs(x))),\n      ceil: x => pows(Math.ceil(logs(x)))\n    }));\n  };\n\n  return scale;\n}\n\nexport default function log() {\n  const scale = loggish(transformer()).domain([1, 10]);\n  scale.copy = () => copy(scale, log()).base(scale.base());\n  initRange.apply(scale, arguments);\n  return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n  return function(x) {\n    return Math.sign(x) * Math.log1p(Math.abs(x / c));\n  };\n}\n\nfunction transformSymexp(c) {\n  return function(x) {\n    return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n  };\n}\n\nexport function symlogish(transform) {\n  var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n  scale.constant = function(_) {\n    return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n  };\n\n  return linearish(scale);\n}\n\nexport default function symlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, symlog()).constant(scale.constant());\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction transformSqrt(x) {\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n  return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n  var scale = transform(identity, identity),\n      exponent = 1;\n\n  function rescale() {\n    return exponent === 1 ? transform(identity, identity)\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n        : transform(transformPow(exponent), transformPow(1 / exponent));\n  }\n\n  scale.exponent = function(_) {\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\n  };\n\n  return linearish(scale);\n}\n\nexport default function pow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, pow()).exponent(scale.exponent());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nexport function sqrt() {\n  return pow.apply(null, arguments).exponent(0.5);\n}\n","import continuous from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nfunction square(x) {\n  return Math.sign(x) * x * x;\n}\n\nfunction unsquare(x) {\n  return Math.sign(x) * Math.sqrt(Math.abs(x));\n}\n\nexport default function radial() {\n  var squared = continuous(),\n      range = [0, 1],\n      round = false,\n      unknown;\n\n  function scale(x) {\n    var y = unsquare(squared(x));\n    return isNaN(y) ? unknown : round ? Math.round(y) : y;\n  }\n\n  scale.invert = function(y) {\n    return squared.invert(square(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (squared.domain(_), scale) : squared.domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (squared.range((range = Array.from(_, number)).map(square)), scale) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return scale.range(_).round(true);\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, scale) : round;\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (squared.clamp(_), scale) : squared.clamp();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return radial(squared.domain(), range)\n        .round(round)\n        .clamp(squared.clamp())\n        .unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n  var domain = [],\n      range = [],\n      thresholds = [],\n      unknown;\n\n  function rescale() {\n    var i = 0, n = Math.max(1, range.length);\n    thresholds = new Array(n - 1);\n    while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n  }\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN] : [\n      i > 0 ? thresholds[i - 1] : domain[0],\n      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n    ];\n  };\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return rescale();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.quantiles = function() {\n    return thresholds.slice();\n  };\n\n  scale.copy = function() {\n    return quantile()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n  var x0 = 0,\n      x1 = 1,\n      n = 1,\n      domain = [0.5],\n      range = [0, 1],\n      unknown;\n\n  function scale(x) {\n    return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  function rescale() {\n    var i = -1;\n    domain = new Array(n);\n    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n    return scale;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN]\n        : i < 1 ? [x0, domain[0]]\n        : i >= n ? [domain[n - 1], x1]\n        : [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : scale;\n  };\n\n  scale.thresholds = function() {\n    return domain.slice();\n  };\n\n  scale.copy = function() {\n    return quantize()\n        .domain([x0, x1])\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(linearish(scale), arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n  var domain = [0.5],\n      range = [0, 1],\n      unknown,\n      n = 1;\n\n  function scale(x) {\n    return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return threshold()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = (date) => {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = (date) => {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = (date) => {\n    const d0 = interval(date), d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = (date, step) => {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = (start, stop, step) => {\n    const range = [];\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    let previous;\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = (test) => {\n    return timeInterval((date) => {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, (date, step) => {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = (start, end) => {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = (step) => {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? (d) => field(d) % step === 0\n              : (d) => interval.count(0, d) % step === 0);\n    };\n  }\n\n  return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n  // noop\n}, (date, step) => {\n  date.setTime(+date + step);\n}, (start, end) => {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return timeInterval((date) => {\n    date.setTime(Math.floor(date / k) * k);\n  }, (date, step) => {\n    date.setTime(+date + step * k);\n  }, (start, end) => {\n    return (end - start) / k;\n  });\n};\n\nexport const milliseconds = millisecond.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n  date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n  return (end - start) / durationSecond;\n}, (date) => {\n  return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n  date.setUTCSeconds(0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n  date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n  date => date.setHours(0, 0, 0, 0),\n  (date, step) => date.setDate(date.getDate() + step),\n  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n  date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n  return timeInterval((date) => {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setDate(date.getDate() + step * 7);\n  }, (start, end) => {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n  return timeInterval((date) => {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, (start, end) => {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n  return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n  return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n  return end.getFullYear() - start.getFullYear();\n}, (date) => {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport const utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n  const tickIntervals = [\n    [second,  1,      durationSecond],\n    [second,  5,  5 * durationSecond],\n    [second, 15, 15 * durationSecond],\n    [second, 30, 30 * durationSecond],\n    [minute,  1,      durationMinute],\n    [minute,  5,  5 * durationMinute],\n    [minute, 15, 15 * durationMinute],\n    [minute, 30, 30 * durationMinute],\n    [  hour,  1,      durationHour  ],\n    [  hour,  3,  3 * durationHour  ],\n    [  hour,  6,  6 * durationHour  ],\n    [  hour, 12, 12 * durationHour  ],\n    [   day,  1,      durationDay   ],\n    [   day,  2,  2 * durationDay   ],\n    [  week,  1,      durationWeek  ],\n    [ month,  1,      durationMonth ],\n    [ month,  3,  3 * durationMonth ],\n    [  year,  1,      durationYear  ]\n  ];\n\n  function ticks(start, stop, count) {\n    const reverse = stop < start;\n    if (reverse) [start, stop] = [stop, start];\n    const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n    const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n    return reverse ? ticks.reverse() : ticks;\n  }\n\n  function tickInterval(start, stop, count) {\n    const target = Math.abs(stop - start) / count;\n    const i = bisector(([,, step]) => step).right(tickIntervals, target);\n    if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n    if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n    const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n    return t.every(step);\n  }\n\n  return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {\n  timeDay,\n  timeSunday,\n  timeMonday,\n  timeThursday,\n  timeYear,\n  utcDay,\n  utcSunday,\n  utcMonday,\n  utcThursday,\n  utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"g\": formatYearISO,\n    \"G\": formatFullYearISO,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"q\": formatQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"g\": formatUTCYearISO,\n    \"G\": formatUTCFullYearISO,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"q\": formatUTCQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"g\": parseYear,\n    \"G\": parseFullYear,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"q\": parseQuarter,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, Z) {\n    return function(string) {\n      var d = newDate(1900, undefined, 1),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n      // If this is utcParse, never use the local timezone.\n      if (Z && !(\"Z\" in d)) d.Z = 0;\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // If the month was not specified, inherit from the quarter.\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n          week = timeDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return localDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatQuarter(d) {\n    return 1 + ~~(d.getMonth() / 3);\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  function formatUTCQuarter(d) {\n    return 1 + ~~(d.getUTCMonth() / 3);\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", false);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier += \"\", true);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day = d.getDay();\n  return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n  var day = d.getDay();\n  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  d = dISO(d);\n  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n  d = dISO(d);\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad(z / 60 | 0, \"0\", 2)\n      + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n  var day = d.getUTCDay();\n  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  d = UTCdISO(d);\n  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n  d = UTCdISO(d);\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  timeFormat = locale.format;\n  timeParse = locale.parse;\n  utcFormat = locale.utcFormat;\n  utcParse = locale.utcParse;\n  return locale;\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n  return new Date(t);\n}\n\nfunction number(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n  var scale = continuous(),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  function tickFormat(date) {\n    return (second(date) < date ? formatMillisecond\n        : minute(date) < date ? formatSecond\n        : hour(date) < date ? formatMinute\n        : day(date) < date ? formatHour\n        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n  };\n\n  scale.ticks = function(interval) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval) {\n    var d = domain();\n    if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n    return interval ? domain(nice(d, interval)) : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n  };\n\n  return scale;\n}\n\nexport default function time() {\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);\n}\n","import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\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);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 1,\n      t0,\n      t1,\n      k10,\n      transform,\n      interpolator = identity,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\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));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  function range(interpolate) {\n    return function(_) {\n      var r0, r1;\n      return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n    return scale;\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .interpolator(source.interpolator())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport default function sequential() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, sequential());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n  var scale = loggish(transformer()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, sequentialLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n  return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantile} from \"d3-array\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\n\nexport default function sequentialQuantile() {\n  var domain = [],\n      interpolator = identity;\n\n  function scale(x) {\n    if (x != null && !isNaN(x = +x)) return interpolator((bisect(domain, x, 1) - 1) / (domain.length - 1));\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return scale;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.range = function() {\n    return domain.map((d, i) => interpolator(i / (domain.length - 1)));\n  };\n\n  scale.quantiles = function(n) {\n    return Array.from({length: n + 1}, (_, i) => quantile(domain, i / n));\n  };\n\n  scale.copy = function() {\n    return sequentialQuantile(interpolator).domain(domain);\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 0.5,\n      x2 = 1,\n      s = 1,\n      t0,\n      t1,\n      t2,\n      k10,\n      k21,\n      interpolator = identity,\n      transform,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\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));\n  }\n\n  scale.domain = function(_) {\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];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  function range(interpolate) {\n    return function(_) {\n      var r0, r1, r2;\n      return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\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;\n    return scale;\n  };\n}\n\nexport default function diverging() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, diverging());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n  var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, divergingLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, divergingSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, divergingPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n  return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","export default function(specifier) {\n  var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n  while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n  return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4269d0efb118ff725c6cc5b03ca951ff8ab7a463f297bbf59c6b4e9498a0\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"d8b365f5f5f55ab4ac\",\n  \"a6611adfc27d80cdc1018571\",\n  \"a6611adfc27df5f5f580cdc1018571\",\n  \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n  \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n  \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n  \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n  \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n  \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"af8dc3f7f7f77fbf7b\",\n  \"7b3294c2a5cfa6dba0008837\",\n  \"7b3294c2a5cff7f7f7a6dba0008837\",\n  \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n  \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n  \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n  \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n  \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n  \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e9a3c9f7f7f7a1d76a\",\n  \"d01c8bf1b6dab8e1864dac26\",\n  \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n  \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n  \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n  \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n  \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n  \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n  \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"998ec3f7f7f7f1a340\",\n  \"5e3c99b2abd2fdb863e66101\",\n  \"5e3c99b2abd2f7f7f7fdb863e66101\",\n  \"542788998ec3d8daebfee0b6f1a340b35806\",\n  \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n  \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n  \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n  \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n  \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ef8a62f7f7f767a9cf\",\n  \"ca0020f4a58292c5de0571b0\",\n  \"ca0020f4a582f7f7f792c5de0571b0\",\n  \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n  \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n  \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n  \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n  \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n  \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ef8a62ffffff999999\",\n  \"ca0020f4a582bababa404040\",\n  \"ca0020f4a582ffffffbababa404040\",\n  \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n  \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n  \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n  \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n  \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n  \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fc8d59ffffbf91bfdb\",\n  \"d7191cfdae61abd9e92c7bb6\",\n  \"d7191cfdae61ffffbfabd9e92c7bb6\",\n  \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n  \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n  \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n  \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n  \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n  \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fc8d59ffffbf91cf60\",\n  \"d7191cfdae61a6d96a1a9641\",\n  \"d7191cfdae61ffffbfa6d96a1a9641\",\n  \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n  \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n  \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n  \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n  \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n  \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fc8d59ffffbf99d594\",\n  \"d7191cfdae61abdda42b83ba\",\n  \"d7191cfdae61ffffbfabdda42b83ba\",\n  \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n  \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n  \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n  \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n  \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n  \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e5f5f999d8c92ca25f\",\n  \"edf8fbb2e2e266c2a4238b45\",\n  \"edf8fbb2e2e266c2a42ca25f006d2c\",\n  \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n  \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n  \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n  \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e0ecf49ebcda8856a7\",\n  \"edf8fbb3cde38c96c688419d\",\n  \"edf8fbb3cde38c96c68856a7810f7c\",\n  \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n  \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n  \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n  \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e0f3dba8ddb543a2ca\",\n  \"f0f9e8bae4bc7bccc42b8cbe\",\n  \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n  \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n  \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n  \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n  \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fee8c8fdbb84e34a33\",\n  \"fef0d9fdcc8afc8d59d7301f\",\n  \"fef0d9fdcc8afc8d59e34a33b30000\",\n  \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n  \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n  \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n  \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ece2f0a6bddb1c9099\",\n  \"f6eff7bdc9e167a9cf02818a\",\n  \"f6eff7bdc9e167a9cf1c9099016c59\",\n  \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n  \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n  \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n  \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ece7f2a6bddb2b8cbe\",\n  \"f1eef6bdc9e174a9cf0570b0\",\n  \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n  \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n  \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n  \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n  \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e7e1efc994c7dd1c77\",\n  \"f1eef6d7b5d8df65b0ce1256\",\n  \"f1eef6d7b5d8df65b0dd1c77980043\",\n  \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n  \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n  \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n  \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fde0ddfa9fb5c51b8a\",\n  \"feebe2fbb4b9f768a1ae017e\",\n  \"feebe2fbb4b9f768a1c51b8a7a0177\",\n  \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n  \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n  \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n  \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"edf8b17fcdbb2c7fb8\",\n  \"ffffcca1dab441b6c4225ea8\",\n  \"ffffcca1dab441b6c42c7fb8253494\",\n  \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n  \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n  \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n  \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"f7fcb9addd8e31a354\",\n  \"ffffccc2e69978c679238443\",\n  \"ffffccc2e69978c67931a354006837\",\n  \"ffffccd9f0a3addd8e78c67931a354006837\",\n  \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n  \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n  \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fff7bcfec44fd95f0e\",\n  \"ffffd4fed98efe9929cc4c02\",\n  \"ffffd4fed98efe9929d95f0e993404\",\n  \"ffffd4fee391fec44ffe9929d95f0e993404\",\n  \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n  \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n  \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ffeda0feb24cf03b20\",\n  \"ffffb2fecc5cfd8d3ce31a1c\",\n  \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n  \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n  \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n  \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n  \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"deebf79ecae13182bd\",\n  \"eff3ffbdd7e76baed62171b5\",\n  \"eff3ffbdd7e76baed63182bd08519c\",\n  \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n  \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n  \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n  \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e5f5e0a1d99b31a354\",\n  \"edf8e9bae4b374c476238b45\",\n  \"edf8e9bae4b374c47631a354006d2c\",\n  \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n  \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n  \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n  \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"f0f0f0bdbdbd636363\",\n  \"f7f7f7cccccc969696525252\",\n  \"f7f7f7cccccc969696636363252525\",\n  \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n  \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n  \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n  \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"efedf5bcbddc756bb1\",\n  \"f2f0f7cbc9e29e9ac86a51a3\",\n  \"f2f0f7cbc9e29e9ac8756bb154278f\",\n  \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n  \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n  \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n  \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fee0d2fc9272de2d26\",\n  \"fee5d9fcae91fb6a4acb181d\",\n  \"fee5d9fcae91fb6a4ade2d26a50f15\",\n  \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n  \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n  \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n  \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fee6cefdae6be6550d\",\n  \"feeddefdbe85fd8d3cd94701\",\n  \"feeddefdbe85fd8d3ce6550da63603\",\n  \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n  \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n  \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n  \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","export default function(t) {\n  t = Math.max(0, Math.min(1, t));\n  return \"rgb(\"\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))))))) + \", \"\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))))))) + \", \"\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)))))))\n      + \")\";\n}\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n  if (t < 0 || t > 1) t -= Math.floor(t);\n  var ts = Math.abs(t - 0.5);\n  c.h = 360 * t - 100;\n  c.s = 1.5 - 1.5 * ts;\n  c.l = 0.8 - 0.9 * ts;\n  return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n    pi_1_3 = Math.PI / 3,\n    pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n  var x;\n  t = (0.5 - t) * Math.PI;\n  c.r = 255 * (x = Math.sin(t)) * x;\n  c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n  c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n  return c + \"\";\n}\n","export default function(t) {\n  t = Math.max(0, Math.min(1, t));\n  return \"rgb(\"\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))))))) + \", \"\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))))))) + \", \"\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)))))))\n      + \")\";\n}\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import creator from \"./creator.js\";\nimport select from \"./select.js\";\n\nexport default function(name) {\n  return select(creator(name).call(document.documentElement));\n}\n","var nextId = 0;\n\nexport default function local() {\n  return new Local;\n}\n\nfunction Local() {\n  this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n  constructor: Local,\n  get: function(node) {\n    var id = this._;\n    while (!(id in node)) if (!(node = node.parentNode)) return;\n    return node[id];\n  },\n  set: function(node, value) {\n    return node[this._] = value;\n  },\n  remove: function(node) {\n    return this._ in node && delete node[this._];\n  },\n  toString: function() {\n    return this._;\n  }\n};\n","import pointer from \"./pointer.js\";\nimport sourceEvent from \"./sourceEvent.js\";\n\nexport default function(events, node) {\n  if (events.target) { // i.e., instanceof Event, not TouchList or iterable\n    events = sourceEvent(events);\n    if (node === undefined) node = events.currentTarget;\n    events = events.touches || [events];\n  }\n  return Array.from(events, event => pointer(event, node));\n}\n","import array from \"./array.js\";\nimport {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n      : new Selection([array(selector)], root);\n}\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n  let digits = 3;\n\n  shape.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) {\n      digits = null;\n    } else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    return shape;\n  };\n\n  return () => new Path(digits);\n}\n","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n  return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n  return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n  return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n  return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n  return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n  var x10 = x1 - x0, y10 = y1 - y0,\n      x32 = x3 - x2, y32 = y3 - y2,\n      t = y32 * x10 - x32 * y10;\n  if (t * t < epsilon) return;\n  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n  return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n  var x01 = x0 - x1,\n      y01 = y0 - y1,\n      lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n      ox = lo * y01,\n      oy = -lo * x01,\n      x11 = x0 + ox,\n      y11 = y0 + oy,\n      x10 = x1 + ox,\n      y10 = y1 + oy,\n      x00 = (x11 + x10) / 2,\n      y00 = (y11 + y10) / 2,\n      dx = x10 - x11,\n      dy = y10 - y11,\n      d2 = dx * dx + dy * dy,\n      r = r1 - rc,\n      D = x11 * y10 - x10 * y11,\n      d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n      cx0 = (D * dy - dx * d) / d2,\n      cy0 = (-D * dx - dy * d) / d2,\n      cx1 = (D * dy + dx * d) / d2,\n      cy1 = (-D * dx + dy * d) / d2,\n      dx0 = cx0 - x00,\n      dy0 = cy0 - y00,\n      dx1 = cx1 - x00,\n      dy1 = cy1 - y00;\n\n  // Pick the closer of the two intersection points.\n  // TODO Is there a faster way to determine which intersection to use?\n  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n  return {\n    cx: cx0,\n    cy: cy0,\n    x01: -ox,\n    y01: -oy,\n    x11: cx0 * (r1 / r - 1),\n    y11: cy0 * (r1 / r - 1)\n  };\n}\n\nexport default function() {\n  var innerRadius = arcInnerRadius,\n      outerRadius = arcOuterRadius,\n      cornerRadius = constant(0),\n      padRadius = null,\n      startAngle = arcStartAngle,\n      endAngle = arcEndAngle,\n      padAngle = arcPadAngle,\n      context = null,\n      path = withPath(arc);\n\n  function arc() {\n    var buffer,\n        r,\n        r0 = +innerRadius.apply(this, arguments),\n        r1 = +outerRadius.apply(this, arguments),\n        a0 = startAngle.apply(this, arguments) - halfPi,\n        a1 = endAngle.apply(this, arguments) - halfPi,\n        da = abs(a1 - a0),\n        cw = a1 > a0;\n\n    if (!context) context = buffer = path();\n\n    // Ensure that the outer radius is always larger than the inner radius.\n    if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n    // Is it a point?\n    if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n    // Or is it a circle or annulus?\n    else if (da > tau - epsilon) {\n      context.moveTo(r1 * cos(a0), r1 * sin(a0));\n      context.arc(0, 0, r1, a0, a1, !cw);\n      if (r0 > epsilon) {\n        context.moveTo(r0 * cos(a1), r0 * sin(a1));\n        context.arc(0, 0, r0, a1, a0, cw);\n      }\n    }\n\n    // Or is it a circular or annular sector?\n    else {\n      var a01 = a0,\n          a11 = a1,\n          a00 = a0,\n          a10 = a1,\n          da0 = da,\n          da1 = da,\n          ap = padAngle.apply(this, arguments) / 2,\n          rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n          rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n          rc0 = rc,\n          rc1 = rc,\n          t0,\n          t1;\n\n      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n      if (rp > epsilon) {\n        var p0 = asin(rp / r0 * sin(ap)),\n            p1 = asin(rp / r1 * sin(ap));\n        if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n        else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n        if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n        else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n      }\n\n      var x01 = r1 * cos(a01),\n          y01 = r1 * sin(a01),\n          x10 = r0 * cos(a10),\n          y10 = r0 * sin(a10);\n\n      // Apply rounded corners?\n      if (rc > epsilon) {\n        var x11 = r1 * cos(a11),\n            y11 = r1 * sin(a11),\n            x00 = r0 * cos(a00),\n            y00 = r0 * sin(a00),\n            oc;\n\n        // Restrict the corner radius according to the sector angle. If this\n        // intersection fails, it’s probably because the arc is too small, so\n        // disable the corner radius entirely.\n        if (da < pi) {\n          if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n            var ax = x01 - oc[0],\n                ay = y01 - oc[1],\n                bx = x11 - oc[0],\n                by = y11 - oc[1],\n                kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n                lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n            rc0 = min(rc, (r0 - lc) / (kc - 1));\n            rc1 = min(rc, (r1 - lc) / (kc + 1));\n          } else {\n            rc0 = rc1 = 0;\n          }\n        }\n      }\n\n      // Is the sector collapsed to a line?\n      if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n      // Does the sector’s outer ring have rounded corners?\n      else if (rc1 > epsilon) {\n        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\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);\n          context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the outer ring just a circular arc?\n      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n      // Is there no inner ring, and it’s a circular sector?\n      // Or perhaps it’s an annular sector collapsed due to padding?\n      if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n      // Does the sector’s inner ring (or point) have rounded corners?\n      else if (rc0 > epsilon) {\n        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\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);\n          context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the inner ring just a circular arc?\n      else context.arc(0, 0, r0, a10, a00, cw);\n    }\n\n    context.closePath();\n\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  arc.centroid = function() {\n    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n    return [cos(a) * r, sin(a) * r];\n  };\n\n  arc.innerRadius = function(_) {\n    return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n  };\n\n  arc.outerRadius = function(_) {\n    return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n  };\n\n  arc.cornerRadius = function(_) {\n    return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n  };\n\n  arc.padRadius = function(_) {\n    return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n  };\n\n  arc.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n  };\n\n  arc.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n  };\n\n  arc.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n  };\n\n  arc.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n  };\n\n  return arc;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // falls through\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n","export function x(p) {\n  return p[0];\n}\n\nexport function y(p) {\n  return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n  var defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null,\n      path = withPath(line);\n\n  x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n  y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n  function line(data) {\n    var i,\n        n = (data = array(data)).length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n  var x1 = null,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null,\n      path = withPath(area);\n\n  x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n  y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n  y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n  function area(data) {\n    var i,\n        j,\n        k,\n        n = (data = array(data)).length,\n        d,\n        defined0 = false,\n        buffer,\n        x0z = new Array(n),\n        y0z = new Array(n);\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) {\n          j = i;\n          output.areaStart();\n          output.lineStart();\n        } else {\n          output.lineEnd();\n          output.lineStart();\n          for (k = i - 1; k >= j; --k) {\n            output.point(x0z[k], y0z[k]);\n          }\n          output.lineEnd();\n          output.areaEnd();\n        }\n      }\n      if (defined0) {\n        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n      }\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  function arealine() {\n    return line().defined(defined).curve(curve).context(context);\n  }\n\n  area.x = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n  };\n\n  area.x0 = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n  };\n\n  area.x1 = function(_) {\n    return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n  };\n\n  area.y = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n  };\n\n  area.y0 = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n  };\n\n  area.y1 = function(_) {\n    return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n  };\n\n  area.lineX0 =\n  area.lineY0 = function() {\n    return arealine().x(x0).y(y0);\n  };\n\n  area.lineY1 = function() {\n    return arealine().x(x0).y(y1);\n  };\n\n  area.lineX1 = function() {\n    return arealine().x(x1).y(y0);\n  };\n\n  area.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n  };\n\n  area.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n  };\n\n  area.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n  };\n\n  return area;\n}\n","export default function(a, b) {\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n  return d;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n  var value = identity,\n      sortValues = descending,\n      sort = null,\n      startAngle = constant(0),\n      endAngle = constant(tau),\n      padAngle = constant(0);\n\n  function pie(data) {\n    var i,\n        n = (data = array(data)).length,\n        j,\n        k,\n        sum = 0,\n        index = new Array(n),\n        arcs = new Array(n),\n        a0 = +startAngle.apply(this, arguments),\n        da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n        a1,\n        p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n        pa = p * (da < 0 ? -1 : 1),\n        v;\n\n    for (i = 0; i < n; ++i) {\n      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n        sum += v;\n      }\n    }\n\n    // Optionally sort the arcs by previously-computed values or by data.\n    if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n    else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n    // Compute the arcs! They are stored in the original data's order.\n    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n        data: data[j],\n        index: i,\n        value: v,\n        startAngle: a0,\n        endAngle: a1,\n        padAngle: p\n      };\n    }\n\n    return arcs;\n  }\n\n  pie.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n  };\n\n  pie.sortValues = function(_) {\n    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n  };\n\n  pie.sort = function(_) {\n    return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n  };\n\n  pie.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n  };\n\n  pie.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n  };\n\n  pie.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n  };\n\n  return pie;\n}\n","import curveLinear from \"./linear.js\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n  this._curve = curve;\n}\n\nRadial.prototype = {\n  areaStart: function() {\n    this._curve.areaStart();\n  },\n  areaEnd: function() {\n    this._curve.areaEnd();\n  },\n  lineStart: function() {\n    this._curve.lineStart();\n  },\n  lineEnd: function() {\n    this._curve.lineEnd();\n  },\n  point: function(a, r) {\n    this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n  }\n};\n\nexport default function curveRadial(curve) {\n\n  function radial(context) {\n    return new Radial(curve(context));\n  }\n\n  radial._curve = curve;\n\n  return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport line from \"./line.js\";\n\nexport function lineRadial(l) {\n  var c = l.curve;\n\n  l.angle = l.x, delete l.x;\n  l.radius = l.y, delete l.y;\n\n  l.curve = function(_) {\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\n  };\n\n  return l;\n}\n\nexport default function() {\n  return lineRadial(line().curve(curveRadialLinear));\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport area from \"./area.js\";\nimport {lineRadial} from \"./lineRadial.js\";\n\nexport default function() {\n  var a = area().curve(curveRadialLinear),\n      c = a.curve,\n      x0 = a.lineX0,\n      x1 = a.lineX1,\n      y0 = a.lineY0,\n      y1 = a.lineY1;\n\n  a.angle = a.x, delete a.x;\n  a.startAngle = a.x0, delete a.x0;\n  a.endAngle = a.x1, delete a.x1;\n  a.radius = a.y, delete a.y;\n  a.innerRadius = a.y0, delete a.y0;\n  a.outerRadius = a.y1, delete a.y1;\n  a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;\n  a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;\n  a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;\n  a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;\n\n  a.curve = function(_) {\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\n  };\n\n  return a;\n}\n","export default function(x, y) {\n  return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];\n}\n","import pointRadial from \"../pointRadial.js\";\n\nclass Bump {\n  constructor(context, x) {\n    this._context = context;\n    this._x = x;\n  }\n  areaStart() {\n    this._line = 0;\n  }\n  areaEnd() {\n    this._line = NaN;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  }\n  point(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: {\n        this._point = 1;\n        if (this._line) this._context.lineTo(x, y);\n        else this._context.moveTo(x, y);\n        break;\n      }\n      case 1: this._point = 2; // falls through\n      default: {\n        if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);\n        else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);\n        break;\n      }\n    }\n    this._x0 = x, this._y0 = y;\n  }\n}\n\nclass BumpRadial {\n  constructor(context) {\n    this._context = context;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {}\n  point(x, y) {\n    x = +x, y = +y;\n    if (this._point === 0) {\n      this._point = 1;\n    } else {\n      const p0 = pointRadial(this._x0, this._y0);\n      const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);\n      const p2 = pointRadial(x, this._y0);\n      const p3 = pointRadial(x, y);\n      this._context.moveTo(...p0);\n      this._context.bezierCurveTo(...p1, ...p2, ...p3);\n    }\n    this._x0 = x, this._y0 = y;\n  }\n}\n\nexport function bumpX(context) {\n  return new Bump(context, true);\n}\n\nexport function bumpY(context) {\n  return new Bump(context, false);\n}\n\nexport function bumpRadial(context) {\n  return new BumpRadial(context);\n}\n","import {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport {bumpX, bumpY, bumpRadial} from \"./curve/bump.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nfunction linkSource(d) {\n  return d.source;\n}\n\nfunction linkTarget(d) {\n  return d.target;\n}\n\nexport function link(curve) {\n  let source = linkSource,\n      target = linkTarget,\n      x = pointX,\n      y = pointY,\n      context = null,\n      output = null,\n      path = withPath(link);\n\n  function link() {\n    let buffer;\n    const argv = slice.call(arguments);\n    const s = source.apply(this, argv);\n    const t = target.apply(this, argv);\n    if (context == null) output = curve(buffer = path());\n    output.lineStart();\n    argv[0] = s, output.point(+x.apply(this, argv), +y.apply(this, argv));\n    argv[0] = t, output.point(+x.apply(this, argv), +y.apply(this, argv));\n    output.lineEnd();\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  link.source = function(_) {\n    return arguments.length ? (source = _, link) : source;\n  };\n\n  link.target = function(_) {\n    return arguments.length ? (target = _, link) : target;\n  };\n\n  link.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), link) : x;\n  };\n\n  link.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), link) : y;\n  };\n\n  link.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), link) : context;\n  };\n\n  return link;\n}\n\nexport function linkHorizontal() {\n  return link(bumpX);\n}\n\nexport function linkVertical() {\n  return link(bumpY);\n}\n\nexport function linkRadial() {\n  const l = link(bumpRadial);\n  l.angle = l.x, delete l.x;\n  l.radius = l.y, delete l.y;\n  return l;\n}\n","import {min, sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size + min(size / 28, 0.75)) * 0.59436;\n    const t = r / 2;\n    const u = t * sqrt3;\n    context.moveTo(0, r);\n    context.lineTo(0, -r);\n    context.moveTo(-u, -t);\n    context.lineTo(u, t);\n    context.moveTo(-u, t);\n    context.lineTo(u, -t);\n  }\n};\n","import {pi, sqrt, tau} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size / pi);\n    context.moveTo(r, 0);\n    context.arc(0, 0, r, 0, tau);\n  }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size / 5) / 2;\n    context.moveTo(-3 * r, -r);\n    context.lineTo(-r, -r);\n    context.lineTo(-r, -3 * r);\n    context.lineTo(r, -3 * r);\n    context.lineTo(r, -r);\n    context.lineTo(3 * r, -r);\n    context.lineTo(3 * r, r);\n    context.lineTo(r, r);\n    context.lineTo(r, 3 * r);\n    context.lineTo(-r, 3 * r);\n    context.lineTo(-r, r);\n    context.lineTo(-3 * r, r);\n    context.closePath();\n  }\n};\n","import {sqrt} from \"../math.js\";\n\nconst tan30 = sqrt(1 / 3);\nconst tan30_2 = tan30 * 2;\n\nexport default {\n  draw(context, size) {\n    const y = sqrt(size / tan30_2);\n    const x = y * tan30;\n    context.moveTo(0, -y);\n    context.lineTo(x, 0);\n    context.lineTo(0, y);\n    context.lineTo(-x, 0);\n    context.closePath();\n  }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size) * 0.62625;\n    context.moveTo(0, -r);\n    context.lineTo(r, 0);\n    context.lineTo(0, r);\n    context.lineTo(-r, 0);\n    context.closePath();\n  }\n};\n","import {min, sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size - min(size / 7, 2)) * 0.87559;\n    context.moveTo(-r, 0);\n    context.lineTo(r, 0);\n    context.moveTo(0, r);\n    context.lineTo(0, -r);\n  }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const w = sqrt(size);\n    const x = -w / 2;\n    context.rect(x, x, w, w);\n  }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size) * 0.4431;\n    context.moveTo(r, r);\n    context.lineTo(r, -r);\n    context.lineTo(-r, -r);\n    context.lineTo(-r, r);\n    context.closePath();\n  }\n};\n","import {sin, cos, sqrt, pi, tau} from \"../math.js\";\n\nconst ka = 0.89081309152928522810;\nconst kr = sin(pi / 10) / sin(7 * pi / 10);\nconst kx = sin(tau / 10) * kr;\nconst ky = -cos(tau / 10) * kr;\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size * ka);\n    const x = kx * r;\n    const y = ky * r;\n    context.moveTo(0, -r);\n    context.lineTo(x, y);\n    for (let i = 1; i < 5; ++i) {\n      const a = tau * i / 5;\n      const c = cos(a);\n      const s = sin(a);\n      context.lineTo(s * r, -c * r);\n      context.lineTo(c * x - s * y, s * x + c * y);\n    }\n    context.closePath();\n  }\n};\n","import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n  draw(context, size) {\n    const y = -sqrt(size / (sqrt3 * 3));\n    context.moveTo(0, y * 2);\n    context.lineTo(-sqrt3 * y, -y);\n    context.lineTo(sqrt3 * y, -y);\n    context.closePath();\n  }\n};\n","import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n  draw(context, size) {\n    const s = sqrt(size) * 0.6824;\n    const t = s  / 2;\n    const u = (s * sqrt3) / 2; // cos(Math.PI / 6)\n    context.moveTo(0, -s);\n    context.lineTo(u, t);\n    context.lineTo(-u, t);\n    context.closePath();\n  }\n};\n","import {sqrt} from \"../math.js\";\n\nconst c = -0.5;\nconst s = sqrt(3) / 2;\nconst k = 1 / sqrt(12);\nconst a = (k / 2 + 1) * 3;\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size / a);\n    const x0 = r / 2, y0 = r * k;\n    const x1 = x0, y1 = r * k + r;\n    const x2 = -x1, y2 = y1;\n    context.moveTo(x0, y0);\n    context.lineTo(x1, y1);\n    context.lineTo(x2, y2);\n    context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n    context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n    context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n    context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n    context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n    context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n    context.closePath();\n  }\n};\n","import {min, sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size - min(size / 6, 1.7)) * 0.6189;\n    context.moveTo(-r, -r);\n    context.lineTo(r, r);\n    context.moveTo(-r, r);\n    context.lineTo(r, -r);\n  }\n};\n","import constant from \"./constant.js\";\nimport {withPath} from \"./path.js\";\nimport asterisk from \"./symbol/asterisk.js\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport diamond2 from \"./symbol/diamond2.js\";\nimport plus from \"./symbol/plus.js\";\nimport square from \"./symbol/square.js\";\nimport square2 from \"./symbol/square2.js\";\nimport star from \"./symbol/star.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport triangle2 from \"./symbol/triangle2.js\";\nimport wye from \"./symbol/wye.js\";\nimport times from \"./symbol/times.js\";\n\n// These symbols are designed to be filled.\nexport const symbolsFill = [\n  circle,\n  cross,\n  diamond,\n  square,\n  star,\n  triangle,\n  wye\n];\n\n// These symbols are designed to be stroked (with a width of 1.5px and round caps).\nexport const symbolsStroke = [\n  circle,\n  plus,\n  times,\n  triangle2,\n  asterisk,\n  square2,\n  diamond2\n];\n\nexport default function Symbol(type, size) {\n  let context = null,\n      path = withPath(symbol);\n\n  type = typeof type === \"function\" ? type : constant(type || circle);\n  size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n  function symbol() {\n    let buffer;\n    if (!context) context = buffer = path();\n    type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  symbol.type = function(_) {\n    return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n  };\n\n  symbol.size = function(_) {\n    return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n  };\n\n  symbol.context = function(_) {\n    return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n  };\n\n  return symbol;\n}\n","export default function() {}\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    (2 * that._x0 + that._x1) / 3,\n    (2 * that._y0 + that._y1) / 3,\n    (that._x0 + 2 * that._x1) / 3,\n    (that._y0 + 2 * that._y1) / 3,\n    (that._x0 + 4 * that._x1 + x) / 6,\n    (that._y0 + 4 * that._y1 + y) / 6\n  );\n}\n\nexport function Basis(context) {\n  this._context = context;\n}\n\nBasis.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 3: point(this, this._x1, this._y1); // falls through\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n  this._context = context;\n}\n\nBasisClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x2, this._y2);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x2, this._y2);\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\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;\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new BasisClosed(context);\n}\n","import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n  this._context = context;\n}\n\nBasisOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\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;\n      case 3: this._point = 4; // falls through\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new BasisOpen(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n  this._basis = new Basis(context);\n  this._beta = beta;\n}\n\nBundle.prototype = {\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n    this._basis.lineStart();\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        j = x.length - 1;\n\n    if (j > 0) {\n      var x0 = x[0],\n          y0 = y[0],\n          dx = x[j] - x0,\n          dy = y[j] - y0,\n          i = -1,\n          t;\n\n      while (++i <= j) {\n        t = i / j;\n        this._basis.point(\n          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n        );\n      }\n    }\n\n    this._x = this._y = null;\n    this._basis.lineEnd();\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\nexport default (function custom(beta) {\n\n  function bundle(context) {\n    return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n  }\n\n  bundle.beta = function(beta) {\n    return custom(+beta);\n  };\n\n  return bundle;\n})(0.85);\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    that._x1 + that._k * (that._x2 - that._x0),\n    that._y1 + that._k * (that._y2 - that._y0),\n    that._x2 + that._k * (that._x1 - x),\n    that._y2 + that._k * (that._y1 - y),\n    that._x2,\n    that._y2\n  );\n}\n\nexport function Cardinal(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: point(this, this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n      case 2: this._point = 3; // falls through\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new Cardinal(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new CardinalClosed(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import {point} from \"./cardinal.js\";\n\nexport function CardinalOpen(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // falls through\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new CardinalOpen(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n  var x1 = that._x1,\n      y1 = that._y1,\n      x2 = that._x2,\n      y2 = that._y2;\n\n  if (that._l01_a > epsilon) {\n    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n        n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n  }\n\n  if (that._l23_a > epsilon) {\n    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n        m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n  }\n\n  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: this.point(this._x2, this._y2); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; // falls through\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomOpen(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // falls through\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n  this._context = context;\n}\n\nLinearClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._point) this._context.closePath();\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    if (this._point) this._context.lineTo(x, y);\n    else this._point = 1, this._context.moveTo(x, y);\n  }\n};\n\nexport default function(context) {\n  return new LinearClosed(context);\n}\n","function sign(x) {\n  return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n  var h0 = that._x1 - that._x0,\n      h1 = x2 - that._x1,\n      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n      p = (s0 * h1 + s1 * h0) / (h0 + h1);\n  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n  var h = that._x1 - that._x0;\n  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n  var x0 = that._x0,\n      y0 = that._y0,\n      x1 = that._x1,\n      y1 = that._y1,\n      dx = (x1 - x0) / 3;\n  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n  this._context = context;\n}\n\nMonotoneX.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 =\n    this._t0 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n      case 3: point(this, this._t0, slope2(this, this._t0)); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    var t1 = NaN;\n\n    x = +x, y = +y;\n    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n      default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n    }\n\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n    this._t0 = t1;\n  }\n}\n\nfunction MonotoneY(context) {\n  this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n  MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n  this._context = context;\n}\n\nReflectContext.prototype = {\n  moveTo: function(x, y) { this._context.moveTo(y, x); },\n  closePath: function() { this._context.closePath(); },\n  lineTo: function(x, y) { this._context.lineTo(y, x); },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n  return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n  return new MonotoneY(context);\n}\n","function Natural(context) {\n  this._context = context;\n}\n\nNatural.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        n = x.length;\n\n    if (n) {\n      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n      if (n === 2) {\n        this._context.lineTo(x[1], y[1]);\n      } else {\n        var px = controlPoints(x),\n            py = controlPoints(y);\n        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n        }\n      }\n    }\n\n    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n    this._x = this._y = null;\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n  var i,\n      n = x.length - 1,\n      m,\n      a = new Array(n),\n      b = new Array(n),\n      r = new Array(n);\n  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n  a[n - 1] = r[n - 1] / b[n - 1];\n  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n  b[n - 1] = (x[n] + a[n - 1]) / 2;\n  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n  return [a, b];\n}\n\nexport default function(context) {\n  return new Natural(context);\n}\n","function Step(context, t) {\n  this._context = context;\n  this._t = t;\n}\n\nStep.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = this._y = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // falls through\n      default: {\n        if (this._t <= 0) {\n          this._context.lineTo(this._x, y);\n          this._context.lineTo(x, y);\n        } else {\n          var x1 = this._x * (1 - this._t) + x * this._t;\n          this._context.lineTo(x1, this._y);\n          this._context.lineTo(x1, y);\n        }\n        break;\n      }\n    }\n    this._x = x, this._y = y;\n  }\n};\n\nexport default function(context) {\n  return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n  return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n  return new Step(context, 1);\n}\n","export default function(series, order) {\n  if (!((n = series.length) > 1)) return;\n  for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n    s0 = s1, s1 = series[order[i]];\n    for (j = 0; j < m; ++j) {\n      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n    }\n  }\n}\n","export default function(series) {\n  var n = series.length, o = new Array(n);\n  while (--n >= 0) o[n] = n;\n  return o;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport offsetNone from \"./offset/none.js\";\nimport orderNone from \"./order/none.js\";\n\nfunction stackValue(d, key) {\n  return d[key];\n}\n\nfunction stackSeries(key) {\n  const series = [];\n  series.key = key;\n  return series;\n}\n\nexport default function() {\n  var keys = constant([]),\n      order = orderNone,\n      offset = offsetNone,\n      value = stackValue;\n\n  function stack(data) {\n    var sz = Array.from(keys.apply(this, arguments), stackSeries),\n        i, n = sz.length, j = -1,\n        oz;\n\n    for (const d of data) {\n      for (i = 0, ++j; i < n; ++i) {\n        (sz[i][j] = [0, +value(d, sz[i].key, j, data)]).data = d;\n      }\n    }\n\n    for (i = 0, oz = array(order(sz)); i < n; ++i) {\n      sz[oz[i]].index = i;\n    }\n\n    offset(sz, oz);\n    return sz;\n  }\n\n  stack.keys = function(_) {\n    return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : keys;\n  };\n\n  stack.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n  };\n\n  stack.order = function(_) {\n    return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : order;\n  };\n\n  stack.offset = function(_) {\n    return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n  };\n\n  return stack;\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n  }\n  none(series, order);\n}\n","export default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n    for (yp = yn = 0, i = 0; i < n; ++i) {\n      if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n        d[0] = yp, d[1] = yp += dy;\n      } else if (dy < 0) {\n        d[1] = yn, d[0] = yn += dy;\n      } else {\n        d[0] = 0, d[1] = dy;\n      }\n    }\n  }\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n    s0[j][1] += s0[j][0] = -y / 2;\n  }\n  none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n      var si = series[order[i]],\n          sij0 = si[j][1] || 0,\n          sij1 = si[j - 1][1] || 0,\n          s3 = (sij0 - sij1) / 2;\n      for (var k = 0; k < i; ++k) {\n        var sk = series[order[k]],\n            skj0 = sk[j][1] || 0,\n            skj1 = sk[j - 1][1] || 0;\n        s3 += skj0 - skj1;\n      }\n      s1 += sij0, s2 += s3 * sij0;\n    }\n    s0[j - 1][1] += s0[j - 1][0] = y;\n    if (s1) y -= s2 / s1;\n  }\n  s0[j - 1][1] += s0[j - 1][0] = y;\n  none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  var peaks = series.map(peak);\n  return none(series).sort(function(a, b) { return peaks[a] - peaks[b]; });\n}\n\nfunction peak(series) {\n  var i = -1, j = 0, n = series.length, vi, vj = -Infinity;\n  while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;\n  return j;\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  var sums = series.map(sum);\n  return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n  var s = 0, i = -1, n = series.length, v;\n  while (++i < n) if (v = +series[i][1]) s += v;\n  return s;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(series) {\n  return ascending(series).reverse();\n}\n","import appearance from \"./appearance.js\";\nimport {sum} from \"./ascending.js\";\n\nexport default function(series) {\n  var n = series.length,\n      i,\n      j,\n      sums = series.map(sum),\n      order = appearance(series),\n      top = 0,\n      bottom = 0,\n      tops = [],\n      bottoms = [];\n\n  for (i = 0; i < n; ++i) {\n    j = order[i];\n    if (top < bottom) {\n      top += sums[j];\n      tops.push(j);\n    } else {\n      bottom += sums[j];\n      bottoms.push(j);\n    }\n  }\n\n  return bottoms.reverse().concat(tops);\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  return none(series).reverse();\n}\n","import {utcFormat} from \"./defaultLocale.js\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n  return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n    ? formatIsoNative\n    : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat.js\";\nimport {utcParse} from \"./defaultLocale.js\";\n\nfunction parseIsoNative(string) {\n  var date = new Date(string);\n  return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n    ? parseIsoNative\n    : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {Timer, now} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer, total = delay;\n  if (delay == null) return t.restart(callback, delay, time), t;\n  t._restart = t.restart;\n  t.restart = function(callback, delay, time) {\n    delay = +delay, time = time == null ? now() : +time;\n    t._restart(function tick(elapsed) {\n      elapsed += total;\n      t._restart(tick, total += delay, time);\n      callback(elapsed);\n    }, delay, time);\n  }\n  t.restart(callback, delay, time);\n  return t;\n}\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n  sourceEvent,\n  target,\n  transform,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    transform: {value: transform, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n","export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n","export function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n  return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n  var e = this;\n  if (e instanceof SVGElement) {\n    e = e.ownerSVGElement || e;\n    if (e.hasAttribute(\"viewBox\")) {\n      e = e.viewBox.baseVal;\n      return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n    }\n    return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n  }\n  return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n  return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n  return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n  var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n      dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n      dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n      dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n  return transform.translate(\n    dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n    dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n  );\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      extent = defaultExtent,\n      constrain = defaultConstrain,\n      wheelDelta = defaultWheelDelta,\n      touchable = defaultTouchable,\n      scaleExtent = [0, Infinity],\n      translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n      duration = 250,\n      interpolate = interpolateZoom,\n      listeners = dispatch(\"start\", \"zoom\", \"end\"),\n      touchstarting,\n      touchfirst,\n      touchending,\n      touchDelay = 500,\n      wheelDelay = 150,\n      clickDistance2 = 0,\n      tapDistance = 10;\n\n  function zoom(selection) {\n    selection\n        .property(\"__zoom\", defaultTransform)\n        .on(\"wheel.zoom\", wheeled, {passive: false})\n        .on(\"mousedown.zoom\", mousedowned)\n        .on(\"dblclick.zoom\", dblclicked)\n      .filter(touchable)\n        .on(\"touchstart.zoom\", touchstarted)\n        .on(\"touchmove.zoom\", touchmoved)\n        .on(\"touchend.zoom touchcancel.zoom\", touchended)\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  zoom.transform = function(collection, transform, point, event) {\n    var selection = collection.selection ? collection.selection() : collection;\n    selection.property(\"__zoom\", defaultTransform);\n    if (collection !== selection) {\n      schedule(collection, transform, point, event);\n    } else {\n      selection.interrupt().each(function() {\n        gesture(this, arguments)\n          .event(event)\n          .start()\n          .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n          .end();\n      });\n    }\n  };\n\n  zoom.scaleBy = function(selection, k, p, event) {\n    zoom.scaleTo(selection, function() {\n      var k0 = this.__zoom.k,\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return k0 * k1;\n    }, p, event);\n  };\n\n  zoom.scaleTo = function(selection, k, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t0 = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n          p1 = t0.invert(p0),\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n    }, p, event);\n  };\n\n  zoom.translateBy = function(selection, x, y, event) {\n    zoom.transform(selection, function() {\n      return constrain(this.__zoom.translate(\n        typeof x === \"function\" ? x.apply(this, arguments) : x,\n        typeof y === \"function\" ? y.apply(this, arguments) : y\n      ), extent.apply(this, arguments), translateExtent);\n    }, null, event);\n  };\n\n  zoom.translateTo = function(selection, x, y, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n      return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n        typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n        typeof y === \"function\" ? -y.apply(this, arguments) : -y\n      ), e, translateExtent);\n    }, p, event);\n  };\n\n  function scale(transform, k) {\n    k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n  }\n\n  function translate(transform, p0, p1) {\n    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n  }\n\n  function centroid(extent) {\n    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n  }\n\n  function schedule(transition, transform, point, event) {\n    transition\n        .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n        .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n        .tween(\"zoom\", function() {\n          var that = this,\n              args = arguments,\n              g = gesture(that, args).event(event),\n              e = extent.apply(that, args),\n              p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n              a = that.__zoom,\n              b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n              i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n          return function(t) {\n            if (t === 1) t = b; // Avoid rounding error on end.\n            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n            g.zoom(null, t);\n          };\n        });\n  }\n\n  function gesture(that, args, clean) {\n    return (!clean && that.__zooming) || new Gesture(that, args);\n  }\n\n  function Gesture(that, args) {\n    this.that = that;\n    this.args = args;\n    this.active = 0;\n    this.sourceEvent = null;\n    this.extent = extent.apply(that, args);\n    this.taps = 0;\n  }\n\n  Gesture.prototype = {\n    event: function(event) {\n      if (event) this.sourceEvent = event;\n      return this;\n    },\n    start: function() {\n      if (++this.active === 1) {\n        this.that.__zooming = this;\n        this.emit(\"start\");\n      }\n      return this;\n    },\n    zoom: function(key, transform) {\n      if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n      if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n      if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n      this.that.__zoom = transform;\n      this.emit(\"zoom\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) {\n        delete this.that.__zooming;\n        this.emit(\"end\");\n      }\n      return this;\n    },\n    emit: function(type) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new ZoomEvent(type, {\n          sourceEvent: this.sourceEvent,\n          target: zoom,\n          type,\n          transform: this.that.__zoom,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function wheeled(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var g = gesture(this, args).event(event),\n        t = this.__zoom,\n        k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n        p = pointer(event);\n\n    // If the mouse is in the same location as before, reuse it.\n    // If there were recent wheel events, reset the wheel idle timeout.\n    if (g.wheel) {\n      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n        g.mouse[1] = t.invert(g.mouse[0] = p);\n      }\n      clearTimeout(g.wheel);\n    }\n\n    // If this wheel event won’t trigger a transform change, ignore it.\n    else if (t.k === k) return;\n\n    // Otherwise, capture the mouse point and location at the start.\n    else {\n      g.mouse = [p, t.invert(p)];\n      interrupt(this);\n      g.start();\n    }\n\n    noevent(event);\n    g.wheel = setTimeout(wheelidled, wheelDelay);\n    g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n    function wheelidled() {\n      g.wheel = null;\n      g.end();\n    }\n  }\n\n  function mousedowned(event, ...args) {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var currentTarget = event.currentTarget,\n        g = gesture(this, args, true).event(event),\n        v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n        p = pointer(event, currentTarget),\n        x0 = event.clientX,\n        y0 = event.clientY;\n\n    dragDisable(event.view);\n    nopropagation(event);\n    g.mouse = [p, this.__zoom.invert(p)];\n    interrupt(this);\n    g.start();\n\n    function mousemoved(event) {\n      noevent(event);\n      if (!g.moved) {\n        var dx = event.clientX - x0, dy = event.clientY - y0;\n        g.moved = dx * dx + dy * dy > clickDistance2;\n      }\n      g.event(event)\n       .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n    }\n\n    function mouseupped(event) {\n      v.on(\"mousemove.zoom mouseup.zoom\", null);\n      dragEnable(event.view, g.moved);\n      noevent(event);\n      g.event(event).end();\n    }\n  }\n\n  function dblclicked(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var t0 = this.__zoom,\n        p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n        p1 = t0.invert(p0),\n        k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n    noevent(event);\n    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n    else select(this).call(zoom.transform, t1, p0, event);\n  }\n\n  function touchstarted(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var touches = event.touches,\n        n = touches.length,\n        g = gesture(this, args, event.changedTouches.length === n).event(event),\n        started, i, t, p;\n\n    nopropagation(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      p = [p, this.__zoom.invert(p), t.identifier];\n      if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n      else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n    }\n\n    if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n    if (started) {\n      if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n      interrupt(this);\n      g.start();\n    }\n  }\n\n  function touchmoved(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t, p, l;\n\n    noevent(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n    }\n    t = g.that.__zoom;\n    if (g.touch1) {\n      var p0 = g.touch0[0], l0 = g.touch0[1],\n          p1 = g.touch1[0], l1 = g.touch1[1],\n          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n      t = scale(t, Math.sqrt(dp / dl));\n      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n    }\n    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n    else return;\n\n    g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n  }\n\n  function touchended(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t;\n\n    nopropagation(event);\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, touchDelay);\n    for (i = 0; i < n; ++i) {\n      t = touches[i];\n      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n    }\n    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n    if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n    else {\n      g.end();\n      // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n      if (g.taps === 2) {\n        t = pointer(t, this);\n        if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n          var p = select(this).on(\"dblclick.zoom\");\n          if (p) p.apply(this, arguments);\n        }\n      }\n    }\n  }\n\n  zoom.wheelDelta = function(_) {\n    return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n  };\n\n  zoom.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n  };\n\n  zoom.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n  };\n\n  zoom.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n  };\n\n  zoom.scaleExtent = function(_) {\n    return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n  };\n\n  zoom.translateExtent = function(_) {\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]]];\n  };\n\n  zoom.constrain = function(_) {\n    return arguments.length ? (constrain = _, zoom) : constrain;\n  };\n\n  zoom.duration = function(_) {\n    return arguments.length ? (duration = +_, zoom) : duration;\n  };\n\n  zoom.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, zoom) : interpolate;\n  };\n\n  zoom.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? zoom : value;\n  };\n\n  zoom.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n  };\n\n  zoom.tapDistance = function(_) {\n    return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n  };\n\n  return zoom;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","import $ from 'jquery';\nimport '../packages/jquery-ui@1.13.3';\n\nglobal.$ = $;\n/**\n * Simple, small jQuery extensions for convenience.\n */\n(function ($) {\n    /**\n     * Disable an element.\n     *\n     * Sets `disabled` property to `true` and adds `disabled` class.\n     */\n    $.fn.disable = function () {\n        return this.prop('disabled', true).addClass('disabled');\n    };\n\n    /**\n     * Enable an element.\n     *\n     * Sets `disabled` property to `false` and removes `disabled` class\n     * if present.\n     */\n    $.fn.enable = function () {\n        return this.prop('disabled', false).removeClass('disabled');\n    };\n\n    /**\n     * Check an element.\n     *\n     * Sets `checked` property to `true`.\n     */\n    $.fn.check = function () {\n        return this.prop('checked', true);\n    };\n\n    /**\n     * Un-check an element.\n     *\n     * Sets `checked` property to `false`.\n     */\n    $.fn.uncheck = function () {\n        return this.prop('checked', false);\n    };\n\n    /**\n     * Tooltip\n     */\n    $(document).tooltip({\n        position: {\n            my: 'center bottom-20',\n            at: 'center top',\n            using: function( position, feedback ) {\n                $(this).css(position);\n                $('<div>')\n                    .addClass('arrow')\n                    .addClass(feedback.vertical)\n                    .addClass(feedback.horizontal)\n                    .appendTo(this);\n            }\n        },\n        items: 'rect, .tooltip-item',\n        show: false,\n        hide: false,\n        content: function() {\n            var title = $(this).attr('title');\n            if (!title) return false;\n            var parsedHTML = $.parseHTML(title);\n            return parsedHTML;\n        }\n    });\n\n    /**\n     * Returns true / false if any modal is active.\n     */\n    $.modalActive = function () {\n        var active = false;\n        $('.modal').each(function () {\n            var modal = $(this).data('bs.modal');\n            if (modal) {\n                active = modal.isShown;\n                return !active;\n            }\n        });\n        return active;\n    };\n\n\n    /**\n     * Wiggle an element.\n     *\n     * Used for wiggling BLAST button.\n     */\n    $.fn.wiggle = function () {\n        this.finish().effect('bounce', {\n            direction: 'left',\n            distance: 24,\n            times: 4,\n        }, 250);\n    };\n}(jQuery));","// Current version.\nexport var VERSION = '1.13.7';\n\n// Establish the root object, `window` (`self`) in the browser, `global`\n// on the server, or `this` in some virtual machines. We use `self`\n// instead of `window` for `WebWorker` support.\nexport var root = (typeof self == 'object' && self.self === self && self) ||\n          (typeof global == 'object' && global.global === global && global) ||\n          Function('return this')() ||\n          {};\n\n// Save bytes in the minified (but not gzipped) version:\nexport var ArrayProto = Array.prototype, ObjProto = Object.prototype;\nexport var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n// Create quick reference variables for speed access to core prototypes.\nexport var push = ArrayProto.push,\n    slice = ArrayProto.slice,\n    toString = ObjProto.toString,\n    hasOwnProperty = ObjProto.hasOwnProperty;\n\n// Modern feature detection.\nexport var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n    supportsDataView = typeof DataView !== 'undefined';\n\n// All **ECMAScript 5+** native function implementations that we hope to use\n// are declared here.\nexport var nativeIsArray = Array.isArray,\n    nativeKeys = Object.keys,\n    nativeCreate = Object.create,\n    nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n// Create references to these builtin functions because we override them.\nexport var _isNaN = isNaN,\n    _isFinite = isFinite;\n\n// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\nexport var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\nexport var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n  'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n// The largest integer that can be represented exactly.\nexport var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n","// Some functions take a variable number of arguments, or a few expected\n// arguments at the beginning and then a variable number of values to operate\n// on. This helper accumulates all remaining arguments past the function’s\n// argument length (or an explicit `startIndex`), into an array that becomes\n// the last argument. Similar to ES6’s \"rest parameter\".\nexport default function restArguments(func, startIndex) {\n  startIndex = startIndex == null ? func.length - 1 : +startIndex;\n  return function() {\n    var length = Math.max(arguments.length - startIndex, 0),\n        rest = Array(length),\n        index = 0;\n    for (; index < length; index++) {\n      rest[index] = arguments[index + startIndex];\n    }\n    switch (startIndex) {\n      case 0: return func.call(this, rest);\n      case 1: return func.call(this, arguments[0], rest);\n      case 2: return func.call(this, arguments[0], arguments[1], rest);\n    }\n    var args = Array(startIndex + 1);\n    for (index = 0; index < startIndex; index++) {\n      args[index] = arguments[index];\n    }\n    args[startIndex] = rest;\n    return func.apply(this, args);\n  };\n}\n","// Is a given variable an object?\nexport default function isObject(obj) {\n  var type = typeof obj;\n  return type === 'function' || (type === 'object' && !!obj);\n}\n","// Is a given value equal to null?\nexport default function isNull(obj) {\n  return obj === null;\n}\n","// Is a given variable undefined?\nexport default function isUndefined(obj) {\n  return obj === void 0;\n}\n","import { toString } from './_setup.js';\n\n// Is a given value a boolean?\nexport default function isBoolean(obj) {\n  return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n}\n","// Is a given value a DOM element?\nexport default function isElement(obj) {\n  return !!(obj && obj.nodeType === 1);\n}\n","import { toString } from './_setup.js';\n\n// Internal function for creating a `toString`-based type tester.\nexport default function tagTester(name) {\n  var tag = '[object ' + name + ']';\n  return function(obj) {\n    return toString.call(obj) === tag;\n  };\n}\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('String');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Number');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Date');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('RegExp');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Error');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Symbol');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('ArrayBuffer');\n","import tagTester from './_tagTester.js';\nimport { root } from './_setup.js';\n\nvar isFunction = tagTester('Function');\n\n// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\nvar nodelist = root.document && root.document.childNodes;\nif (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n  isFunction = function(obj) {\n    return typeof obj == 'function' || false;\n  };\n}\n\nexport default isFunction;\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Object');\n","import { supportsDataView } from './_setup.js';\nimport hasObjectTag from './_hasObjectTag.js';\n\n// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n// In IE 11, the most common among them, this problem also applies to\n// `Map`, `WeakMap` and `Set`.\n// Also, there are cases where an application can override the native\n// `DataView` object, in cases like that we can't use the constructor\n// safely and should just rely on alternate `DataView` checks\nexport var hasDataViewBug = (\n      supportsDataView && (!/\\[native code\\]/.test(String(DataView)) || hasObjectTag(new DataView(new ArrayBuffer(8))))\n    ),\n    isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n","import tagTester from './_tagTester.js';\nimport isFunction from './isFunction.js';\nimport isArrayBuffer from './isArrayBuffer.js';\nimport { hasDataViewBug } from './_stringTagBug.js';\n\nvar isDataView = tagTester('DataView');\n\n// In IE 10 - Edge 13, we need a different heuristic\n// to determine whether an object is a `DataView`.\n// Also, in cases where the native `DataView` is\n// overridden we can't rely on the tag itself.\nfunction alternateIsDataView(obj) {\n  return obj != null && isFunction(obj.getInt8) && isArrayBuffer(obj.buffer);\n}\n\nexport default (hasDataViewBug ? alternateIsDataView : isDataView);\n","import { nativeIsArray } from './_setup.js';\nimport tagTester from './_tagTester.js';\n\n// Is a given value an array?\n// Delegates to ECMA5's native `Array.isArray`.\nexport default nativeIsArray || tagTester('Array');\n","import { hasOwnProperty } from './_setup.js';\n\n// Internal function to check whether `key` is an own property name of `obj`.\nexport default function has(obj, key) {\n  return obj != null && hasOwnProperty.call(obj, key);\n}\n","import tagTester from './_tagTester.js';\nimport has from './_has.js';\n\nvar isArguments = tagTester('Arguments');\n\n// Define a fallback version of the method in browsers (ahem, IE < 9), where\n// there isn't any inspectable \"Arguments\" type.\n(function() {\n  if (!isArguments(arguments)) {\n    isArguments = function(obj) {\n      return has(obj, 'callee');\n    };\n  }\n}());\n\nexport default isArguments;\n","import { _isFinite } from './_setup.js';\nimport isSymbol from './isSymbol.js';\n\n// Is a given object a finite number?\nexport default function isFinite(obj) {\n  return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n}\n","import { _isNaN } from './_setup.js';\nimport isNumber from './isNumber.js';\n\n// Is the given value `NaN`?\nexport default function isNaN(obj) {\n  return isNumber(obj) && _isNaN(obj);\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function constant(value) {\n  return function() {\n    return value;\n  };\n}\n","import { MAX_ARRAY_INDEX } from './_setup.js';\n\n// Common internal logic for `isArrayLike` and `isBufferLike`.\nexport default function createSizePropertyCheck(getSizeProperty) {\n  return function(collection) {\n    var sizeProperty = getSizeProperty(collection);\n    return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n  }\n}\n","// Internal helper to generate a function to obtain property `key` from `obj`.\nexport default function shallowProperty(key) {\n  return function(obj) {\n    return obj == null ? void 0 : obj[key];\n  };\n}\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `byteLength` property of an object.\nexport default shallowProperty('byteLength');\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getByteLength from './_getByteLength.js';\n\n// Internal helper to determine whether we should spend extensive checks against\n// `ArrayBuffer` et al.\nexport default createSizePropertyCheck(getByteLength);\n","import { supportsArrayBuffer, nativeIsView, toString } from './_setup.js';\nimport isDataView from './isDataView.js';\nimport constant from './constant.js';\nimport isBufferLike from './_isBufferLike.js';\n\n// Is a given value a typed array?\nvar typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\nfunction isTypedArray(obj) {\n  // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n  // Otherwise, fall back on the above regular expression.\n  return nativeIsView ? (nativeIsView(obj) && !isDataView(obj)) :\n                isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n}\n\nexport default supportsArrayBuffer ? isTypedArray : constant(false);\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `length` property of an object.\nexport default shallowProperty('length');\n","import { nonEnumerableProps, ObjProto } from './_setup.js';\nimport isFunction from './isFunction.js';\nimport has from './_has.js';\n\n// Internal helper to create a simple lookup structure.\n// `collectNonEnumProps` used to depend on `_.contains`, but this led to\n// circular imports. `emulatedSet` is a one-off solution that only works for\n// arrays of strings.\nfunction emulatedSet(keys) {\n  var hash = {};\n  for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n  return {\n    contains: function(key) { return hash[key] === true; },\n    push: function(key) {\n      hash[key] = true;\n      return keys.push(key);\n    }\n  };\n}\n\n// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n// be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n// needed.\nexport default function collectNonEnumProps(obj, keys) {\n  keys = emulatedSet(keys);\n  var nonEnumIdx = nonEnumerableProps.length;\n  var constructor = obj.constructor;\n  var proto = (isFunction(constructor) && constructor.prototype) || ObjProto;\n\n  // Constructor is a special case.\n  var prop = 'constructor';\n  if (has(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n  while (nonEnumIdx--) {\n    prop = nonEnumerableProps[nonEnumIdx];\n    if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n      keys.push(prop);\n    }\n  }\n}\n","import isObject from './isObject.js';\nimport { nativeKeys, hasEnumBug } from './_setup.js';\nimport has from './_has.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve the names of an object's own properties.\n// Delegates to **ECMAScript 5**'s native `Object.keys`.\nexport default function keys(obj) {\n  if (!isObject(obj)) return [];\n  if (nativeKeys) return nativeKeys(obj);\n  var keys = [];\n  for (var key in obj) if (has(obj, key)) keys.push(key);\n  // Ahem, IE < 9.\n  if (hasEnumBug) collectNonEnumProps(obj, keys);\n  return keys;\n}\n","import getLength from './_getLength.js';\nimport isArray from './isArray.js';\nimport isString from './isString.js';\nimport isArguments from './isArguments.js';\nimport keys from './keys.js';\n\n// Is a given array, string, or object empty?\n// An \"empty\" object has no enumerable own-properties.\nexport default function isEmpty(obj) {\n  if (obj == null) return true;\n  // Skip the more expensive `toString`-based type checks if `obj` has no\n  // `.length`.\n  var length = getLength(obj);\n  if (typeof length == 'number' && (\n    isArray(obj) || isString(obj) || isArguments(obj)\n  )) return length === 0;\n  return getLength(keys(obj)) === 0;\n}\n","import keys from './keys.js';\n\n// Returns whether an object has a given set of `key:value` pairs.\nexport default function isMatch(object, attrs) {\n  var _keys = keys(attrs), length = _keys.length;\n  if (object == null) return !length;\n  var obj = Object(object);\n  for (var i = 0; i < length; i++) {\n    var key = _keys[i];\n    if (attrs[key] !== obj[key] || !(key in obj)) return false;\n  }\n  return true;\n}\n","import { VERSION } from './_setup.js';\n\n// If Underscore is called as a function, it returns a wrapped object that can\n// be used OO-style. This wrapper holds altered versions of all functions added\n// through `_.mixin`. Wrapped objects may be chained.\nexport default function _(obj) {\n  if (obj instanceof _) return obj;\n  if (!(this instanceof _)) return new _(obj);\n  this._wrapped = obj;\n}\n\n_.VERSION = VERSION;\n\n// Extracts the result from a wrapped and chained object.\n_.prototype.value = function() {\n  return this._wrapped;\n};\n\n// Provide unwrapping proxies for some methods used in engine operations\n// such as arithmetic and JSON stringification.\n_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n_.prototype.toString = function() {\n  return String(this._wrapped);\n};\n","import getByteLength from './_getByteLength.js';\n\n// Internal function to wrap or shallow-copy an ArrayBuffer,\n// typed array or DataView to a new view, reusing the buffer.\nexport default function toBufferView(bufferSource) {\n  return new Uint8Array(\n    bufferSource.buffer || bufferSource,\n    bufferSource.byteOffset || 0,\n    getByteLength(bufferSource)\n  );\n}\n","import _ from './underscore.js';\nimport { toString, SymbolProto } from './_setup.js';\nimport getByteLength from './_getByteLength.js';\nimport isTypedArray from './isTypedArray.js';\nimport isFunction from './isFunction.js';\nimport { hasDataViewBug }  from './_stringTagBug.js';\nimport isDataView from './isDataView.js';\nimport keys from './keys.js';\nimport has from './_has.js';\nimport toBufferView from './_toBufferView.js';\n\n// We use this string twice, so give it a name for minification.\nvar tagDataView = '[object DataView]';\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction eq(a, b, aStack, bStack) {\n  // Identical objects are equal. `0 === -0`, but they aren't identical.\n  // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n  if (a === b) return a !== 0 || 1 / a === 1 / b;\n  // `null` or `undefined` only equal to itself (strict comparison).\n  if (a == null || b == null) return false;\n  // `NaN`s are equivalent, but non-reflexive.\n  if (a !== a) return b !== b;\n  // Exhaust primitive checks\n  var type = typeof a;\n  if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n  return deepEq(a, b, aStack, bStack);\n}\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction deepEq(a, b, aStack, bStack) {\n  // Unwrap any wrapped objects.\n  if (a instanceof _) a = a._wrapped;\n  if (b instanceof _) b = b._wrapped;\n  // Compare `[[Class]]` names.\n  var className = toString.call(a);\n  if (className !== toString.call(b)) return false;\n  // Work around a bug in IE 10 - Edge 13.\n  if (hasDataViewBug && className == '[object Object]' && isDataView(a)) {\n    if (!isDataView(b)) return false;\n    className = tagDataView;\n  }\n  switch (className) {\n    // These types are compared by value.\n    case '[object RegExp]':\n      // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n    case '[object String]':\n      // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n      // equivalent to `new String(\"5\")`.\n      return '' + a === '' + b;\n    case '[object Number]':\n      // `NaN`s are equivalent, but non-reflexive.\n      // Object(NaN) is equivalent to NaN.\n      if (+a !== +a) return +b !== +b;\n      // An `egal` comparison is performed for other numeric values.\n      return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n    case '[object Date]':\n    case '[object Boolean]':\n      // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n      // millisecond representations. Note that invalid dates with millisecond representations\n      // of `NaN` are not equivalent.\n      return +a === +b;\n    case '[object Symbol]':\n      return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n    case '[object ArrayBuffer]':\n    case tagDataView:\n      // Coerce to typed array so we can fall through.\n      return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n  }\n\n  var areArrays = className === '[object Array]';\n  if (!areArrays && isTypedArray(a)) {\n      var byteLength = getByteLength(a);\n      if (byteLength !== getByteLength(b)) return false;\n      if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n      areArrays = true;\n  }\n  if (!areArrays) {\n    if (typeof a != 'object' || typeof b != 'object') return false;\n\n    // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n    // from different frames are.\n    var aCtor = a.constructor, bCtor = b.constructor;\n    if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&\n                             isFunction(bCtor) && bCtor instanceof bCtor)\n                        && ('constructor' in a && 'constructor' in b)) {\n      return false;\n    }\n  }\n  // Assume equality for cyclic structures. The algorithm for detecting cyclic\n  // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n  // Initializing stack of traversed objects.\n  // It's done here since we only need them for objects and arrays comparison.\n  aStack = aStack || [];\n  bStack = bStack || [];\n  var length = aStack.length;\n  while (length--) {\n    // Linear search. Performance is inversely proportional to the number of\n    // unique nested structures.\n    if (aStack[length] === a) return bStack[length] === b;\n  }\n\n  // Add the first object to the stack of traversed objects.\n  aStack.push(a);\n  bStack.push(b);\n\n  // Recursively compare objects and arrays.\n  if (areArrays) {\n    // Compare array lengths to determine if a deep comparison is necessary.\n    length = a.length;\n    if (length !== b.length) return false;\n    // Deep compare the contents, ignoring non-numeric properties.\n    while (length--) {\n      if (!eq(a[length], b[length], aStack, bStack)) return false;\n    }\n  } else {\n    // Deep compare objects.\n    var _keys = keys(a), key;\n    length = _keys.length;\n    // Ensure that both objects contain the same number of properties before comparing deep equality.\n    if (keys(b).length !== length) return false;\n    while (length--) {\n      // Deep compare each member\n      key = _keys[length];\n      if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n    }\n  }\n  // Remove the first object from the stack of traversed objects.\n  aStack.pop();\n  bStack.pop();\n  return true;\n}\n\n// Perform a deep comparison to check if two objects are equal.\nexport default function isEqual(a, b) {\n  return eq(a, b);\n}\n","import isObject from './isObject.js';\nimport { hasEnumBug } from './_setup.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve all the enumerable property names of an object.\nexport default function allKeys(obj) {\n  if (!isObject(obj)) return [];\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  // Ahem, IE < 9.\n  if (hasEnumBug) collectNonEnumProps(obj, keys);\n  return keys;\n}\n","import getLength from './_getLength.js';\nimport isFunction from './isFunction.js';\nimport allKeys from './allKeys.js';\n\n// Since the regular `Object.prototype.toString` type tests don't work for\n// some types in IE 11, we use a fingerprinting heuristic instead, based\n// on the methods. It's not great, but it's the best we got.\n// The fingerprint method lists are defined below.\nexport function ie11fingerprint(methods) {\n  var length = getLength(methods);\n  return function(obj) {\n    if (obj == null) return false;\n    // `Map`, `WeakMap` and `Set` have no enumerable keys.\n    var keys = allKeys(obj);\n    if (getLength(keys)) return false;\n    for (var i = 0; i < length; i++) {\n      if (!isFunction(obj[methods[i]])) return false;\n    }\n    // If we are testing against `WeakMap`, we need to ensure that\n    // `obj` doesn't have a `forEach` method in order to distinguish\n    // it from a regular `Map`.\n    return methods !== weakMapMethods || !isFunction(obj[forEachName]);\n  };\n}\n\n// In the interest of compact minification, we write\n// each string in the fingerprints only once.\nvar forEachName = 'forEach',\n    hasName = 'has',\n    commonInit = ['clear', 'delete'],\n    mapTail = ['get', hasName, 'set'];\n\n// `Map`, `WeakMap` and `Set` each have slightly different\n// combinations of the above sublists.\nexport var mapMethods = commonInit.concat(forEachName, mapTail),\n    weakMapMethods = commonInit.concat(mapTail),\n    setMethods = ['add'].concat(commonInit, forEachName, hasName);\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, mapMethods }  from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, weakMapMethods }  from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, setMethods }  from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('WeakSet');\n","import keys from './keys.js';\n\n// Retrieve the values of an object's properties.\nexport default function values(obj) {\n  var _keys = keys(obj);\n  var length = _keys.length;\n  var values = Array(length);\n  for (var i = 0; i < length; i++) {\n    values[i] = obj[_keys[i]];\n  }\n  return values;\n}\n","import keys from './keys.js';\n\n// Convert an object into a list of `[key, value]` pairs.\n// The opposite of `_.object` with one argument.\nexport default function pairs(obj) {\n  var _keys = keys(obj);\n  var length = _keys.length;\n  var pairs = Array(length);\n  for (var i = 0; i < length; i++) {\n    pairs[i] = [_keys[i], obj[_keys[i]]];\n  }\n  return pairs;\n}\n","import keys from './keys.js';\n\n// Invert the keys and values of an object. The values must be serializable.\nexport default function invert(obj) {\n  var result = {};\n  var _keys = keys(obj);\n  for (var i = 0, length = _keys.length; i < length; i++) {\n    result[obj[_keys[i]]] = _keys[i];\n  }\n  return result;\n}\n","import isFunction from './isFunction.js';\n\n// Return a sorted list of the function names available on the object.\nexport default function functions(obj) {\n  var names = [];\n  for (var key in obj) {\n    if (isFunction(obj[key])) names.push(key);\n  }\n  return names.sort();\n}\n","// An internal function for creating assigner functions.\nexport default function createAssigner(keysFunc, defaults) {\n  return function(obj) {\n    var length = arguments.length;\n    if (defaults) obj = Object(obj);\n    if (length < 2 || obj == null) return obj;\n    for (var index = 1; index < length; index++) {\n      var source = arguments[index],\n          keys = keysFunc(source),\n          l = keys.length;\n      for (var i = 0; i < l; i++) {\n        var key = keys[i];\n        if (!defaults || obj[key] === void 0) obj[key] = source[key];\n      }\n    }\n    return obj;\n  };\n}\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Extend a given object with all the properties in passed-in object(s).\nexport default createAssigner(allKeys);\n","import createAssigner from './_createAssigner.js';\nimport keys from './keys.js';\n\n// Assigns a given object with all the own properties in the passed-in\n// object(s).\n// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\nexport default createAssigner(keys);\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Fill in a given object with default properties.\nexport default createAssigner(allKeys, true);\n","import isObject from './isObject.js';\nimport { nativeCreate } from './_setup.js';\n\n// Create a naked function reference for surrogate-prototype-swapping.\nfunction ctor() {\n  return function(){};\n}\n\n// An internal function for creating a new object that inherits from another.\nexport default function baseCreate(prototype) {\n  if (!isObject(prototype)) return {};\n  if (nativeCreate) return nativeCreate(prototype);\n  var Ctor = ctor();\n  Ctor.prototype = prototype;\n  var result = new Ctor;\n  Ctor.prototype = null;\n  return result;\n}\n","import baseCreate from './_baseCreate.js';\nimport extendOwn from './extendOwn.js';\n\n// Creates an object that inherits from the given prototype object.\n// If additional properties are provided then they will be added to the\n// created object.\nexport default function create(prototype, props) {\n  var result = baseCreate(prototype);\n  if (props) extendOwn(result, props);\n  return result;\n}\n","import isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport extend from './extend.js';\n\n// Create a (shallow-cloned) duplicate of an object.\nexport default function clone(obj) {\n  if (!isObject(obj)) return obj;\n  return isArray(obj) ? obj.slice() : extend({}, obj);\n}\n","// Invokes `interceptor` with the `obj` and then returns `obj`.\n// The primary purpose of this method is to \"tap into\" a method chain, in\n// order to perform operations on intermediate results within the chain.\nexport default function tap(obj, interceptor) {\n  interceptor(obj);\n  return obj;\n}\n","import _ from './underscore.js';\nimport isArray from './isArray.js';\n\n// Normalize a (deep) property `path` to array.\n// Like `_.iteratee`, this function can be customized.\nexport default function toPath(path) {\n  return isArray(path) ? path : [path];\n}\n_.toPath = toPath;\n","import _ from './underscore.js';\nimport './toPath.js';\n\n// Internal wrapper for `_.toPath` to enable minification.\n// Similar to `cb` for `_.iteratee`.\nexport default function toPath(path) {\n  return _.toPath(path);\n}\n","// Internal function to obtain a nested property in `obj` along `path`.\nexport default function deepGet(obj, path) {\n  var length = path.length;\n  for (var i = 0; i < length; i++) {\n    if (obj == null) return void 0;\n    obj = obj[path[i]];\n  }\n  return length ? obj : void 0;\n}\n","import toPath from './_toPath.js';\nimport deepGet from './_deepGet.js';\nimport isUndefined from './isUndefined.js';\n\n// Get the value of the (deep) property on `path` from `object`.\n// If any property in `path` does not exist or if the value is\n// `undefined`, return `defaultValue` instead.\n// The `path` is normalized through `_.toPath`.\nexport default function get(object, path, defaultValue) {\n  var value = deepGet(object, toPath(path));\n  return isUndefined(value) ? defaultValue : value;\n}\n","import _has from './_has.js';\nimport toPath from './_toPath.js';\n\n// Shortcut function for checking if an object has a given property directly on\n// itself (in other words, not on a prototype). Unlike the internal `has`\n// function, this public version can also traverse nested properties.\nexport default function has(obj, path) {\n  path = toPath(path);\n  var length = path.length;\n  for (var i = 0; i < length; i++) {\n    var key = path[i];\n    if (!_has(obj, key)) return false;\n    obj = obj[key];\n  }\n  return !!length;\n}\n","// Keep the identity function around for default iteratees.\nexport default function identity(value) {\n  return value;\n}\n","import extendOwn from './extendOwn.js';\nimport isMatch from './isMatch.js';\n\n// Returns a predicate for checking whether an object has a given set of\n// `key:value` pairs.\nexport default function matcher(attrs) {\n  attrs = extendOwn({}, attrs);\n  return function(obj) {\n    return isMatch(obj, attrs);\n  };\n}\n","import deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Creates a function that, when passed an object, will traverse that object’s\n// properties down the given `path`, specified as an array of keys or indices.\nexport default function property(path) {\n  path = toPath(path);\n  return function(obj) {\n    return deepGet(obj, path);\n  };\n}\n","// Internal function that returns an efficient (for current engines) version\n// of the passed-in callback, to be repeatedly applied in other Underscore\n// functions.\nexport default function optimizeCb(func, context, argCount) {\n  if (context === void 0) return func;\n  switch (argCount == null ? 3 : argCount) {\n    case 1: return function(value) {\n      return func.call(context, value);\n    };\n    // The 2-argument case is omitted because we’re not using it.\n    case 3: return function(value, index, collection) {\n      return func.call(context, value, index, collection);\n    };\n    case 4: return function(accumulator, value, index, collection) {\n      return func.call(context, accumulator, value, index, collection);\n    };\n  }\n  return function() {\n    return func.apply(context, arguments);\n  };\n}\n","import identity from './identity.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport matcher from './matcher.js';\nimport property from './property.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// An internal function to generate callbacks that can be applied to each\n// element in a collection, returning the desired result — either `_.identity`,\n// an arbitrary callback, a property matcher, or a property accessor.\nexport default function baseIteratee(value, context, argCount) {\n  if (value == null) return identity;\n  if (isFunction(value)) return optimizeCb(value, context, argCount);\n  if (isObject(value) && !isArray(value)) return matcher(value);\n  return property(value);\n}\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\n\n// External wrapper for our callback generator. Users may customize\n// `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n// This abstraction hides the internal-only `argCount` argument.\nexport default function iteratee(value, context) {\n  return baseIteratee(value, context, Infinity);\n}\n_.iteratee = iteratee;\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\nimport iteratee from './iteratee.js';\n\n// The function we call internally to generate a callback. It invokes\n// `_.iteratee` if overridden, otherwise `baseIteratee`.\nexport default function cb(value, context, argCount) {\n  if (_.iteratee !== iteratee) return _.iteratee(value, context);\n  return baseIteratee(value, context, argCount);\n}\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the results of applying the `iteratee` to each element of `obj`.\n// In contrast to `_.map` it returns an object.\nexport default function mapObject(obj, iteratee, context) {\n  iteratee = cb(iteratee, context);\n  var _keys = keys(obj),\n      length = _keys.length,\n      results = {};\n  for (var index = 0; index < length; index++) {\n    var currentKey = _keys[index];\n    results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n  }\n  return results;\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function noop(){}\n","import noop from './noop.js';\nimport get from './get.js';\n\n// Generates a function for a given object that returns a given property.\nexport default function propertyOf(obj) {\n  if (obj == null) return noop;\n  return function(path) {\n    return get(obj, path);\n  };\n}\n","import optimizeCb from './_optimizeCb.js';\n\n// Run a function **n** times.\nexport default function times(n, iteratee, context) {\n  var accum = Array(Math.max(0, n));\n  iteratee = optimizeCb(iteratee, context, 1);\n  for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n  return accum;\n}\n","// Return a random integer between `min` and `max` (inclusive).\nexport default function random(min, max) {\n  if (max == null) {\n    max = min;\n    min = 0;\n  }\n  return min + Math.floor(Math.random() * (max - min + 1));\n}\n","// A (possibly faster) way to get the current timestamp as an integer.\nexport default Date.now || function() {\n  return new Date().getTime();\n};\n","import keys from './keys.js';\n\n// Internal helper to generate functions for escaping and unescaping strings\n// to/from HTML interpolation.\nexport default function createEscaper(map) {\n  var escaper = function(match) {\n    return map[match];\n  };\n  // Regexes for identifying a key that needs to be escaped.\n  var source = '(?:' + keys(map).join('|') + ')';\n  var testRegexp = RegExp(source);\n  var replaceRegexp = RegExp(source, 'g');\n  return function(string) {\n    string = string == null ? '' : '' + string;\n    return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n  };\n}\n","// Internal list of HTML entities for escaping.\nexport default {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#x27;',\n  '`': '&#x60;'\n};\n","import createEscaper from './_createEscaper.js';\nimport escapeMap from './_escapeMap.js';\n\n// Function for escaping strings to HTML interpolation.\nexport default createEscaper(escapeMap);\n","import createEscaper from './_createEscaper.js';\nimport unescapeMap from './_unescapeMap.js';\n\n// Function for unescaping strings from HTML interpolation.\nexport default createEscaper(unescapeMap);\n","import invert from './invert.js';\nimport escapeMap from './_escapeMap.js';\n\n// Internal list of HTML entities for unescaping.\nexport default invert(escapeMap);\n","import _ from './underscore.js';\n\n// By default, Underscore uses ERB-style template delimiters. Change the\n// following template settings to use alternative delimiters.\nexport default _.templateSettings = {\n  evaluate: /<%([\\s\\S]+?)%>/g,\n  interpolate: /<%=([\\s\\S]+?)%>/g,\n  escape: /<%-([\\s\\S]+?)%>/g\n};\n","import defaults from './defaults.js';\nimport _ from './underscore.js';\nimport './templateSettings.js';\n\n// When customizing `_.templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n  \"'\": \"'\",\n  '\\\\': '\\\\',\n  '\\r': 'r',\n  '\\n': 'n',\n  '\\u2028': 'u2028',\n  '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nfunction escapeChar(match) {\n  return '\\\\' + escapes[match];\n}\n\n// In order to prevent third-party code injection through\n// `_.templateSettings.variable`, we test it against the following regular\n// expression. It is intentionally a bit more liberal than just matching valid\n// identifiers, but still prevents possible loopholes through defaults or\n// destructuring assignment.\nvar bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport default function template(text, settings, oldSettings) {\n  if (!settings && oldSettings) settings = oldSettings;\n  settings = defaults({}, settings, _.templateSettings);\n\n  // Combine delimiters into one regular expression via alternation.\n  var matcher = RegExp([\n    (settings.escape || noMatch).source,\n    (settings.interpolate || noMatch).source,\n    (settings.evaluate || noMatch).source\n  ].join('|') + '|$', 'g');\n\n  // Compile the template source, escaping string literals appropriately.\n  var index = 0;\n  var source = \"__p+='\";\n  text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n    source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n    index = offset + match.length;\n\n    if (escape) {\n      source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n    } else if (interpolate) {\n      source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n    } else if (evaluate) {\n      source += \"';\\n\" + evaluate + \"\\n__p+='\";\n    }\n\n    // Adobe VMs need the match returned to produce the correct offset.\n    return match;\n  });\n  source += \"';\\n\";\n\n  var argument = settings.variable;\n  if (argument) {\n    // Insure against third-party code injection. (CVE-2021-23358)\n    if (!bareIdentifier.test(argument)) throw new Error(\n      'variable is not a bare identifier: ' + argument\n    );\n  } else {\n    // If a variable is not specified, place data values in local scope.\n    source = 'with(obj||{}){\\n' + source + '}\\n';\n    argument = 'obj';\n  }\n\n  source = \"var __t,__p='',__j=Array.prototype.join,\" +\n    \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n    source + 'return __p;\\n';\n\n  var render;\n  try {\n    render = new Function(argument, '_', source);\n  } catch (e) {\n    e.source = source;\n    throw e;\n  }\n\n  var template = function(data) {\n    return render.call(this, data, _);\n  };\n\n  // Provide the compiled source as a convenience for precompilation.\n  template.source = 'function(' + argument + '){\\n' + source + '}';\n\n  return template;\n}\n","import isFunction from './isFunction.js';\nimport toPath from './_toPath.js';\n\n// Traverses the children of `obj` along `path`. If a child is a function, it\n// is invoked with its parent as context. Returns the value of the final\n// child, or `fallback` if any child is undefined.\nexport default function result(obj, path, fallback) {\n  path = toPath(path);\n  var length = path.length;\n  if (!length) {\n    return isFunction(fallback) ? fallback.call(obj) : fallback;\n  }\n  for (var i = 0; i < length; i++) {\n    var prop = obj == null ? void 0 : obj[path[i]];\n    if (prop === void 0) {\n      prop = fallback;\n      i = length; // Ensure we don't continue iterating.\n    }\n    obj = isFunction(prop) ? prop.call(obj) : prop;\n  }\n  return obj;\n}\n","// Generate a unique integer id (unique within the entire client session).\n// Useful for temporary DOM ids.\nvar idCounter = 0;\nexport default function uniqueId(prefix) {\n  var id = ++idCounter + '';\n  return prefix ? prefix + id : id;\n}\n","import _ from './underscore.js';\n\n// Start chaining a wrapped Underscore object.\nexport default function chain(obj) {\n  var instance = _(obj);\n  instance._chain = true;\n  return instance;\n}\n","import baseCreate from './_baseCreate.js';\nimport isObject from './isObject.js';\n\n// Internal function to execute `sourceFunc` bound to `context` with optional\n// `args`. Determines whether to execute a function as a constructor or as a\n// normal function.\nexport default function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n  if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n  var self = baseCreate(sourceFunc.prototype);\n  var result = sourceFunc.apply(self, args);\n  if (isObject(result)) return result;\n  return self;\n}\n","import restArguments from './restArguments.js';\nimport executeBound from './_executeBound.js';\nimport _ from './underscore.js';\n\n// Partially apply a function by creating a version that has had some of its\n// arguments pre-filled, without changing its dynamic `this` context. `_` acts\n// as a placeholder by default, allowing any combination of arguments to be\n// pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\nvar partial = restArguments(function(func, boundArgs) {\n  var placeholder = partial.placeholder;\n  var bound = function() {\n    var position = 0, length = boundArgs.length;\n    var args = Array(length);\n    for (var i = 0; i < length; i++) {\n      args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n    }\n    while (position < arguments.length) args.push(arguments[position++]);\n    return executeBound(func, bound, this, this, args);\n  };\n  return bound;\n});\n\npartial.placeholder = _;\nexport default partial;\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport executeBound from './_executeBound.js';\n\n// Create a function bound to a given object (assigning `this`, and arguments,\n// optionally).\nexport default restArguments(function(func, context, args) {\n  if (!isFunction(func)) throw new TypeError('Bind must be called on a function');\n  var bound = restArguments(function(callArgs) {\n    return executeBound(func, bound, context, this, args.concat(callArgs));\n  });\n  return bound;\n});\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getLength from './_getLength.js';\n\n// Internal helper for collection methods to determine whether a collection\n// should be iterated as an array or as an object.\n// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\nexport default createSizePropertyCheck(getLength);\n","import getLength from './_getLength.js';\nimport isArrayLike from './_isArrayLike.js';\nimport isArray from './isArray.js';\nimport isArguments from './isArguments.js';\n\n// Internal implementation of a recursive `flatten` function.\nexport default function flatten(input, depth, strict, output) {\n  output = output || [];\n  if (!depth && depth !== 0) {\n    depth = Infinity;\n  } else if (depth <= 0) {\n    return output.concat(input);\n  }\n  var idx = output.length;\n  for (var i = 0, length = getLength(input); i < length; i++) {\n    var value = input[i];\n    if (isArrayLike(value) && (isArray(value) || isArguments(value))) {\n      // Flatten current level of array or arguments object.\n      if (depth > 1) {\n        flatten(value, depth - 1, strict, output);\n        idx = output.length;\n      } else {\n        var j = 0, len = value.length;\n        while (j < len) output[idx++] = value[j++];\n      }\n    } else if (!strict) {\n      output[idx++] = value;\n    }\n  }\n  return output;\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport bind from './bind.js';\n\n// Bind a number of an object's methods to that object. Remaining arguments\n// are the method names to be bound. Useful for ensuring that all callbacks\n// defined on an object belong to it.\nexport default restArguments(function(obj, keys) {\n  keys = flatten(keys, false, false);\n  var index = keys.length;\n  if (index < 1) throw new Error('bindAll must be passed function names');\n  while (index--) {\n    var key = keys[index];\n    obj[key] = bind(obj[key], obj);\n  }\n  return obj;\n});\n","import has from './_has.js';\n\n// Memoize an expensive function by storing its results.\nexport default function memoize(func, hasher) {\n  var memoize = function(key) {\n    var cache = memoize.cache;\n    var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n    if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n    return cache[address];\n  };\n  memoize.cache = {};\n  return memoize;\n}\n","import restArguments from './restArguments.js';\n\n// Delays a function for the given number of milliseconds, and then calls\n// it with the arguments supplied.\nexport default restArguments(function(func, wait, args) {\n  return setTimeout(function() {\n    return func.apply(null, args);\n  }, wait);\n});\n","import partial from './partial.js';\nimport delay from './delay.js';\nimport _ from './underscore.js';\n\n// Defers a function, scheduling it to run after the current call stack has\n// cleared.\nexport default partial(delay, _, 1);\n","import now from './now.js';\n\n// Returns a function, that, when invoked, will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\nexport default function throttle(func, wait, options) {\n  var timeout, context, args, result;\n  var previous = 0;\n  if (!options) options = {};\n\n  var later = function() {\n    previous = options.leading === false ? 0 : now();\n    timeout = null;\n    result = func.apply(context, args);\n    if (!timeout) context = args = null;\n  };\n\n  var throttled = function() {\n    var _now = now();\n    if (!previous && options.leading === false) previous = _now;\n    var remaining = wait - (_now - previous);\n    context = this;\n    args = arguments;\n    if (remaining <= 0 || remaining > wait) {\n      if (timeout) {\n        clearTimeout(timeout);\n        timeout = null;\n      }\n      previous = _now;\n      result = func.apply(context, args);\n      if (!timeout) context = args = null;\n    } else if (!timeout && options.trailing !== false) {\n      timeout = setTimeout(later, remaining);\n    }\n    return result;\n  };\n\n  throttled.cancel = function() {\n    clearTimeout(timeout);\n    previous = 0;\n    timeout = context = args = null;\n  };\n\n  return throttled;\n}\n","import restArguments from './restArguments.js';\nimport now from './now.js';\n\n// When a sequence of calls of the returned function ends, the argument\n// function is triggered. The end of a sequence is defined by the `wait`\n// parameter. If `immediate` is passed, the argument function will be\n// triggered at the beginning of the sequence instead of at the end.\nexport default function debounce(func, wait, immediate) {\n  var timeout, previous, args, result, context;\n\n  var later = function() {\n    var passed = now() - previous;\n    if (wait > passed) {\n      timeout = setTimeout(later, wait - passed);\n    } else {\n      timeout = null;\n      if (!immediate) result = func.apply(context, args);\n      // This check is needed because `func` can recursively invoke `debounced`.\n      if (!timeout) args = context = null;\n    }\n  };\n\n  var debounced = restArguments(function(_args) {\n    context = this;\n    args = _args;\n    previous = now();\n    if (!timeout) {\n      timeout = setTimeout(later, wait);\n      if (immediate) result = func.apply(context, args);\n    }\n    return result;\n  });\n\n  debounced.cancel = function() {\n    clearTimeout(timeout);\n    timeout = args = context = null;\n  };\n\n  return debounced;\n}\n","import partial from './partial.js';\n\n// Returns the first function passed as an argument to the second,\n// allowing you to adjust arguments, run code before and after, and\n// conditionally execute the original function.\nexport default function wrap(func, wrapper) {\n  return partial(wrapper, func);\n}\n","// Returns a negated version of the passed-in predicate.\nexport default function negate(predicate) {\n  return function() {\n    return !predicate.apply(this, arguments);\n  };\n}\n","// Returns a function that is the composition of a list of functions, each\n// consuming the return value of the function that follows.\nexport default function compose() {\n  var args = arguments;\n  var start = args.length - 1;\n  return function() {\n    var i = start;\n    var result = args[start].apply(this, arguments);\n    while (i--) result = args[i].call(this, result);\n    return result;\n  };\n}\n","// Returns a function that will only be executed on and after the Nth call.\nexport default function after(times, func) {\n  return function() {\n    if (--times < 1) {\n      return func.apply(this, arguments);\n    }\n  };\n}\n","// Returns a function that will only be executed up to (but not including) the\n// Nth call.\nexport default function before(times, func) {\n  var memo;\n  return function() {\n    if (--times > 0) {\n      memo = func.apply(this, arguments);\n    }\n    if (times <= 1) func = null;\n    return memo;\n  };\n}\n","import partial from './partial.js';\nimport before from './before.js';\n\n// Returns a function that will be executed at most one time, no matter how\n// often you call it. Useful for lazy initialization.\nexport default partial(before, 2);\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the first key on an object that passes a truth test.\nexport default function findKey(obj, predicate, context) {\n  predicate = cb(predicate, context);\n  var _keys = keys(obj), key;\n  for (var i = 0, length = _keys.length; i < length; i++) {\n    key = _keys[i];\n    if (predicate(obj[key], key, obj)) return key;\n  }\n}\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Internal function to generate `_.findIndex` and `_.findLastIndex`.\nexport default function createPredicateIndexFinder(dir) {\n  return function(array, predicate, context) {\n    predicate = cb(predicate, context);\n    var length = getLength(array);\n    var index = dir > 0 ? 0 : length - 1;\n    for (; index >= 0 && index < length; index += dir) {\n      if (predicate(array[index], index, array)) return index;\n    }\n    return -1;\n  };\n}\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the first index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(1);\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the last index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(-1);\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Use a comparator function to figure out the smallest index at which\n// an object should be inserted so as to maintain order. Uses binary search.\nexport default function sortedIndex(array, obj, iteratee, context) {\n  iteratee = cb(iteratee, context, 1);\n  var value = iteratee(obj);\n  var low = 0, high = getLength(array);\n  while (low < high) {\n    var mid = Math.floor((low + high) / 2);\n    if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n  }\n  return low;\n}\n","import getLength from './_getLength.js';\nimport { slice } from './_setup.js';\nimport isNaN from './isNaN.js';\n\n// Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\nexport default function createIndexFinder(dir, predicateFind, sortedIndex) {\n  return function(array, item, idx) {\n    var i = 0, length = getLength(array);\n    if (typeof idx == 'number') {\n      if (dir > 0) {\n        i = idx >= 0 ? idx : Math.max(idx + length, i);\n      } else {\n        length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n      }\n    } else if (sortedIndex && idx && length) {\n      idx = sortedIndex(array, item);\n      return array[idx] === item ? idx : -1;\n    }\n    if (item !== item) {\n      idx = predicateFind(slice.call(array, i, length), isNaN);\n      return idx >= 0 ? idx + i : -1;\n    }\n    for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n      if (array[idx] === item) return idx;\n    }\n    return -1;\n  };\n}\n","import sortedIndex from './sortedIndex.js';\nimport findIndex from './findIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the first occurrence of an item in an array,\n// or -1 if the item is not included in the array.\n// If the array is large and already in sort order, pass `true`\n// for **isSorted** to use binary search.\nexport default createIndexFinder(1, findIndex, sortedIndex);\n","import findLastIndex from './findLastIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the last occurrence of an item in an array,\n// or -1 if the item is not included in the array.\nexport default createIndexFinder(-1, findLastIndex);\n","import isArrayLike from './_isArrayLike.js';\nimport findIndex from './findIndex.js';\nimport findKey from './findKey.js';\n\n// Return the first value which passes a truth test.\nexport default function find(obj, predicate, context) {\n  var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n  var key = keyFinder(obj, predicate, context);\n  if (key !== void 0 && key !== -1) return obj[key];\n}\n","import find from './find.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.find`: getting the first\n// object containing specific `key:value` pairs.\nexport default function findWhere(obj, attrs) {\n  return find(obj, matcher(attrs));\n}\n","import optimizeCb from './_optimizeCb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// The cornerstone for collection functions, an `each`\n// implementation, aka `forEach`.\n// Handles raw objects in addition to array-likes. Treats all\n// sparse array-likes as if they were dense.\nexport default function each(obj, iteratee, context) {\n  iteratee = optimizeCb(iteratee, context);\n  var i, length;\n  if (isArrayLike(obj)) {\n    for (i = 0, length = obj.length; i < length; i++) {\n      iteratee(obj[i], i, obj);\n    }\n  } else {\n    var _keys = keys(obj);\n    for (i = 0, length = _keys.length; i < length; i++) {\n      iteratee(obj[_keys[i]], _keys[i], obj);\n    }\n  }\n  return obj;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the results of applying the iteratee to each element.\nexport default function map(obj, iteratee, context) {\n  iteratee = cb(iteratee, context);\n  var _keys = !isArrayLike(obj) && keys(obj),\n      length = (_keys || obj).length,\n      results = Array(length);\n  for (var index = 0; index < length; index++) {\n    var currentKey = _keys ? _keys[index] : index;\n    results[index] = iteratee(obj[currentKey], currentKey, obj);\n  }\n  return results;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// Internal helper to create a reducing function, iterating left or right.\nexport default function createReduce(dir) {\n  // Wrap code that reassigns argument variables in a separate function than\n  // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n  var reducer = function(obj, iteratee, memo, initial) {\n    var _keys = !isArrayLike(obj) && keys(obj),\n        length = (_keys || obj).length,\n        index = dir > 0 ? 0 : length - 1;\n    if (!initial) {\n      memo = obj[_keys ? _keys[index] : index];\n      index += dir;\n    }\n    for (; index >= 0 && index < length; index += dir) {\n      var currentKey = _keys ? _keys[index] : index;\n      memo = iteratee(memo, obj[currentKey], currentKey, obj);\n    }\n    return memo;\n  };\n\n  return function(obj, iteratee, memo, context) {\n    var initial = arguments.length >= 3;\n    return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n  };\n}\n","import createReduce from './_createReduce.js';\n\n// **Reduce** builds up a single result from a list of values, aka `inject`,\n// or `foldl`.\nexport default createReduce(1);\n","import createReduce from './_createReduce.js';\n\n// The right-associative version of reduce, also known as `foldr`.\nexport default createReduce(-1);\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// Return all the elements that pass a truth test.\nexport default function filter(obj, predicate, context) {\n  var results = [];\n  predicate = cb(predicate, context);\n  each(obj, function(value, index, list) {\n    if (predicate(value, index, list)) results.push(value);\n  });\n  return results;\n}\n","import filter from './filter.js';\nimport negate from './negate.js';\nimport cb from './_cb.js';\n\n// Return all the elements for which a truth test fails.\nexport default function reject(obj, predicate, context) {\n  return filter(obj, negate(cb(predicate)), context);\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine whether all of the elements pass a truth test.\nexport default function every(obj, predicate, context) {\n  predicate = cb(predicate, context);\n  var _keys = !isArrayLike(obj) && keys(obj),\n      length = (_keys || obj).length;\n  for (var index = 0; index < length; index++) {\n    var currentKey = _keys ? _keys[index] : index;\n    if (!predicate(obj[currentKey], currentKey, obj)) return false;\n  }\n  return true;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine if at least one element in the object passes a truth test.\nexport default function some(obj, predicate, context) {\n  predicate = cb(predicate, context);\n  var _keys = !isArrayLike(obj) && keys(obj),\n      length = (_keys || obj).length;\n  for (var index = 0; index < length; index++) {\n    var currentKey = _keys ? _keys[index] : index;\n    if (predicate(obj[currentKey], currentKey, obj)) return true;\n  }\n  return false;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport indexOf from './indexOf.js';\n\n// Determine if the array or object contains a given item (using `===`).\nexport default function contains(obj, item, fromIndex, guard) {\n  if (!isArrayLike(obj)) obj = values(obj);\n  if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n  return indexOf(obj, item, fromIndex) >= 0;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport map from './map.js';\nimport deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Invoke a method (with arguments) on every item in a collection.\nexport default restArguments(function(obj, path, args) {\n  var contextPath, func;\n  if (isFunction(path)) {\n    func = path;\n  } else {\n    path = toPath(path);\n    contextPath = path.slice(0, -1);\n    path = path[path.length - 1];\n  }\n  return map(obj, function(context) {\n    var method = func;\n    if (!method) {\n      if (contextPath && contextPath.length) {\n        context = deepGet(context, contextPath);\n      }\n      if (context == null) return void 0;\n      method = context[path];\n    }\n    return method == null ? method : method.apply(context, args);\n  });\n});\n","import map from './map.js';\nimport property from './property.js';\n\n// Convenience version of a common use case of `_.map`: fetching a property.\nexport default function pluck(obj, key) {\n  return map(obj, property(key));\n}\n","import filter from './filter.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.filter`: selecting only\n// objects containing specific `key:value` pairs.\nexport default function where(obj, attrs) {\n  return filter(obj, matcher(attrs));\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the maximum element (or element-based computation).\nexport default function max(obj, iteratee, context) {\n  var result = -Infinity, lastComputed = -Infinity,\n      value, computed;\n  if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n    obj = isArrayLike(obj) ? obj : values(obj);\n    for (var i = 0, length = obj.length; i < length; i++) {\n      value = obj[i];\n      if (value != null && value > result) {\n        result = value;\n      }\n    }\n  } else {\n    iteratee = cb(iteratee, context);\n    each(obj, function(v, index, list) {\n      computed = iteratee(v, index, list);\n      if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {\n        result = v;\n        lastComputed = computed;\n      }\n    });\n  }\n  return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the minimum element (or element-based computation).\nexport default function min(obj, iteratee, context) {\n  var result = Infinity, lastComputed = Infinity,\n      value, computed;\n  if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n    obj = isArrayLike(obj) ? obj : values(obj);\n    for (var i = 0, length = obj.length; i < length; i++) {\n      value = obj[i];\n      if (value != null && value < result) {\n        result = value;\n      }\n    }\n  } else {\n    iteratee = cb(iteratee, context);\n    each(obj, function(v, index, list) {\n      computed = iteratee(v, index, list);\n      if (computed < lastComputed || (computed === Infinity && result === Infinity)) {\n        result = v;\n        lastComputed = computed;\n      }\n    });\n  }\n  return result;\n}\n","import isArray from './isArray.js';\nimport { slice } from './_setup.js';\nimport isString from './isString.js';\nimport isArrayLike from './_isArrayLike.js';\nimport map from './map.js';\nimport identity from './identity.js';\nimport values from './values.js';\n\n// Safely create a real, live array from anything iterable.\nvar reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\nexport default function toArray(obj) {\n  if (!obj) return [];\n  if (isArray(obj)) return slice.call(obj);\n  if (isString(obj)) {\n    // Keep surrogate pair characters together.\n    return obj.match(reStrSymbol);\n  }\n  if (isArrayLike(obj)) return map(obj, identity);\n  return values(obj);\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport getLength from './_getLength.js';\nimport random from './random.js';\nimport toArray from './toArray.js';\n\n// Sample **n** random values from a collection using the modern version of the\n// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n// If **n** is not specified, returns a single random element.\n// The internal `guard` argument allows it to work with `_.map`.\nexport default function sample(obj, n, guard) {\n  if (n == null || guard) {\n    if (!isArrayLike(obj)) obj = values(obj);\n    return obj[random(obj.length - 1)];\n  }\n  var sample = toArray(obj);\n  var length = getLength(sample);\n  n = Math.max(Math.min(n, length), 0);\n  var last = length - 1;\n  for (var index = 0; index < n; index++) {\n    var rand = random(index, last);\n    var temp = sample[index];\n    sample[index] = sample[rand];\n    sample[rand] = temp;\n  }\n  return sample.slice(0, n);\n}\n","import sample from './sample.js';\n\n// Shuffle a collection.\nexport default function shuffle(obj) {\n  return sample(obj, Infinity);\n}\n","import cb from './_cb.js';\nimport pluck from './pluck.js';\nimport map from './map.js';\n\n// Sort the object's values by a criterion produced by an iteratee.\nexport default function sortBy(obj, iteratee, context) {\n  var index = 0;\n  iteratee = cb(iteratee, context);\n  return pluck(map(obj, function(value, key, list) {\n    return {\n      value: value,\n      index: index++,\n      criteria: iteratee(value, key, list)\n    };\n  }).sort(function(left, right) {\n    var a = left.criteria;\n    var b = right.criteria;\n    if (a !== b) {\n      if (a > b || a === void 0) return 1;\n      if (a < b || b === void 0) return -1;\n    }\n    return left.index - right.index;\n  }), 'value');\n}\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// An internal function used for aggregate \"group by\" operations.\nexport default function group(behavior, partition) {\n  return function(obj, iteratee, context) {\n    var result = partition ? [[], []] : {};\n    iteratee = cb(iteratee, context);\n    each(obj, function(value, index) {\n      var key = iteratee(value, index, obj);\n      behavior(result, value, key);\n    });\n    return result;\n  };\n}\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Groups the object's values by a criterion. Pass either a string attribute\n// to group by, or a function that returns the criterion.\nexport default group(function(result, value, key) {\n  if (has(result, key)) result[key].push(value); else result[key] = [value];\n});\n","import group from './_group.js';\n\n// Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n// when you know that your index values will be unique.\nexport default group(function(result, value, key) {\n  result[key] = value;\n});\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Counts instances of an object that group by a certain criterion. Pass\n// either a string attribute to count by, or a function that returns the\n// criterion.\nexport default group(function(result, value, key) {\n  if (has(result, key)) result[key]++; else result[key] = 1;\n});\n","import group from './_group.js';\n\n// Split a collection into two arrays: one whose elements all pass the given\n// truth test, and one whose elements all do not pass the truth test.\nexport default group(function(result, value, pass) {\n  result[pass ? 0 : 1].push(value);\n}, true);\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the number of elements in a collection.\nexport default function size(obj) {\n  if (obj == null) return 0;\n  return isArrayLike(obj) ? obj.length : keys(obj).length;\n}\n","// Internal `_.pick` helper function to determine whether `key` is an enumerable\n// property name of `obj`.\nexport default function keyInObj(value, key, obj) {\n  return key in obj;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport optimizeCb from './_optimizeCb.js';\nimport allKeys from './allKeys.js';\nimport keyInObj from './_keyInObj.js';\nimport flatten from './_flatten.js';\n\n// Return a copy of the object only containing the allowed properties.\nexport default restArguments(function(obj, keys) {\n  var result = {}, iteratee = keys[0];\n  if (obj == null) return result;\n  if (isFunction(iteratee)) {\n    if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n    keys = allKeys(obj);\n  } else {\n    iteratee = keyInObj;\n    keys = flatten(keys, false, false);\n    obj = Object(obj);\n  }\n  for (var i = 0, length = keys.length; i < length; i++) {\n    var key = keys[i];\n    var value = obj[key];\n    if (iteratee(value, key, obj)) result[key] = value;\n  }\n  return result;\n});\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport negate from './negate.js';\nimport map from './map.js';\nimport flatten from './_flatten.js';\nimport contains from './contains.js';\nimport pick from './pick.js';\n\n// Return a copy of the object without the disallowed properties.\nexport default restArguments(function(obj, keys) {\n  var iteratee = keys[0], context;\n  if (isFunction(iteratee)) {\n    iteratee = negate(iteratee);\n    if (keys.length > 1) context = keys[1];\n  } else {\n    keys = map(flatten(keys, false, false), String);\n    iteratee = function(value, key) {\n      return !contains(keys, key);\n    };\n  }\n  return pick(obj, iteratee, context);\n});\n","import { slice } from './_setup.js';\n\n// Returns everything but the last entry of the array. Especially useful on\n// the arguments object. Passing **n** will return all the values in\n// the array, excluding the last N.\nexport default function initial(array, n, guard) {\n  return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n}\n","import initial from './initial.js';\n\n// Get the first element of an array. Passing **n** will return the first N\n// values in the array. The **guard** check allows it to work with `_.map`.\nexport default function first(array, n, guard) {\n  if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n  if (n == null || guard) return array[0];\n  return initial(array, array.length - n);\n}\n","import { slice } from './_setup.js';\n\n// Returns everything but the first entry of the `array`. Especially useful on\n// the `arguments` object. Passing an **n** will return the rest N values in the\n// `array`.\nexport default function rest(array, n, guard) {\n  return slice.call(array, n == null || guard ? 1 : n);\n}\n","import rest from './rest.js';\n\n// Get the last element of an array. Passing **n** will return the last N\n// values in the array.\nexport default function last(array, n, guard) {\n  if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n  if (n == null || guard) return array[array.length - 1];\n  return rest(array, Math.max(0, array.length - n));\n}\n","import filter from './filter.js';\n\n// Trim out all falsy values from an array.\nexport default function compact(array) {\n  return filter(array, Boolean);\n}\n","import _flatten from './_flatten.js';\n\n// Flatten out an array, either recursively (by default), or up to `depth`.\n// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\nexport default function flatten(array, depth) {\n  return _flatten(array, depth, false);\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport filter from './filter.js';\nimport contains from './contains.js';\n\n// Take the difference between one array and a number of other arrays.\n// Only the elements present in just the first array will remain.\nexport default restArguments(function(array, rest) {\n  rest = flatten(rest, true, true);\n  return filter(array, function(value){\n    return !contains(rest, value);\n  });\n});\n","import restArguments from './restArguments.js';\nimport difference from './difference.js';\n\n// Return a version of the array that does not contain the specified value(s).\nexport default restArguments(function(array, otherArrays) {\n  return difference(array, otherArrays);\n});\n","import isBoolean from './isBoolean.js';\nimport cb from './_cb.js';\nimport getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce a duplicate-free version of the array. If the array has already\n// been sorted, you have the option of using a faster algorithm.\n// The faster algorithm will not work with an iteratee if the iteratee\n// is not a one-to-one function, so providing an iteratee will disable\n// the faster algorithm.\nexport default function uniq(array, isSorted, iteratee, context) {\n  if (!isBoolean(isSorted)) {\n    context = iteratee;\n    iteratee = isSorted;\n    isSorted = false;\n  }\n  if (iteratee != null) iteratee = cb(iteratee, context);\n  var result = [];\n  var seen = [];\n  for (var i = 0, length = getLength(array); i < length; i++) {\n    var value = array[i],\n        computed = iteratee ? iteratee(value, i, array) : value;\n    if (isSorted && !iteratee) {\n      if (!i || seen !== computed) result.push(value);\n      seen = computed;\n    } else if (iteratee) {\n      if (!contains(seen, computed)) {\n        seen.push(computed);\n        result.push(value);\n      }\n    } else if (!contains(result, value)) {\n      result.push(value);\n    }\n  }\n  return result;\n}\n","import restArguments from './restArguments.js';\nimport uniq from './uniq.js';\nimport flatten from './_flatten.js';\n\n// Produce an array that contains the union: each distinct element from all of\n// the passed-in arrays.\nexport default restArguments(function(arrays) {\n  return uniq(flatten(arrays, true, true));\n});\n","import getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce an array that contains every item shared between all the\n// passed-in arrays.\nexport default function intersection(array) {\n  var result = [];\n  var argsLength = arguments.length;\n  for (var i = 0, length = getLength(array); i < length; i++) {\n    var item = array[i];\n    if (contains(result, item)) continue;\n    var j;\n    for (j = 1; j < argsLength; j++) {\n      if (!contains(arguments[j], item)) break;\n    }\n    if (j === argsLength) result.push(item);\n  }\n  return result;\n}\n","import max from './max.js';\nimport getLength from './_getLength.js';\nimport pluck from './pluck.js';\n\n// Complement of zip. Unzip accepts an array of arrays and groups\n// each array's elements on shared indices.\nexport default function unzip(array) {\n  var length = (array && max(array, getLength).length) || 0;\n  var result = Array(length);\n\n  for (var index = 0; index < length; index++) {\n    result[index] = pluck(array, index);\n  }\n  return result;\n}\n","import restArguments from './restArguments.js';\nimport unzip from './unzip.js';\n\n// Zip together multiple lists into a single array -- elements that share\n// an index go together.\nexport default restArguments(unzip);\n","import getLength  from './_getLength.js';\n\n// Converts lists into objects. Pass either a single array of `[key, value]`\n// pairs, or two parallel arrays of the same length -- one of keys, and one of\n// the corresponding values. Passing by pairs is the reverse of `_.pairs`.\nexport default function object(list, values) {\n  var result = {};\n  for (var i = 0, length = getLength(list); i < length; i++) {\n    if (values) {\n      result[list[i]] = values[i];\n    } else {\n      result[list[i][0]] = list[i][1];\n    }\n  }\n  return result;\n}\n","// Generate an integer Array containing an arithmetic progression. A port of\n// the native Python `range()` function. See\n// [the Python documentation](https://docs.python.org/library/functions.html#range).\nexport default function range(start, stop, step) {\n  if (stop == null) {\n    stop = start || 0;\n    start = 0;\n  }\n  if (!step) {\n    step = stop < start ? -1 : 1;\n  }\n\n  var length = Math.max(Math.ceil((stop - start) / step), 0);\n  var range = Array(length);\n\n  for (var idx = 0; idx < length; idx++, start += step) {\n    range[idx] = start;\n  }\n\n  return range;\n}\n","import { slice } from './_setup.js';\n\n// Chunk a single array into multiple arrays, each containing `count` or fewer\n// items.\nexport default function chunk(array, count) {\n  if (count == null || count < 1) return [];\n  var result = [];\n  var i = 0, length = array.length;\n  while (i < length) {\n    result.push(slice.call(array, i, i += count));\n  }\n  return result;\n}\n","import _ from './underscore.js';\n\n// Helper function to continue chaining intermediate results.\nexport default function chainResult(instance, obj) {\n  return instance._chain ? _(obj).chain() : obj;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport functions from './functions.js';\nimport { push } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add your own custom functions to the Underscore object.\nexport default function mixin(obj) {\n  each(functions(obj), function(name) {\n    var func = _[name] = obj[name];\n    _.prototype[name] = function() {\n      var args = [this._wrapped];\n      push.apply(args, arguments);\n      return chainResult(this, func.apply(_, args));\n    };\n  });\n  return _;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport { ArrayProto } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add all mutator `Array` functions to the wrapper.\neach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n  var method = ArrayProto[name];\n  _.prototype[name] = function() {\n    var obj = this._wrapped;\n    if (obj != null) {\n      method.apply(obj, arguments);\n      if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n        delete obj[0];\n      }\n    }\n    return chainResult(this, obj);\n  };\n});\n\n// Add all accessor `Array` functions to the wrapper.\neach(['concat', 'join', 'slice'], function(name) {\n  var method = ArrayProto[name];\n  _.prototype[name] = function() {\n    var obj = this._wrapped;\n    if (obj != null) obj = method.apply(obj, arguments);\n    return chainResult(this, obj);\n  };\n});\n\nexport default _;\n","// Default Export\n// ==============\n// In this module, we mix our bundled exports into the `_` object and export\n// the result. This is analogous to setting `module.exports = _` in CommonJS.\n// Hence, this module is also the entry point of our UMD bundle and the package\n// entry point for CommonJS and AMD users. In other words, this is (the source\n// of) the module you are interfacing with when you do any of the following:\n//\n// ```js\n// // CommonJS\n// var _ = require('underscore');\n//\n// // AMD\n// define(['underscore'], function(_) {...});\n//\n// // UMD in the browser\n// // _ is available as a global variable\n// ```\nimport * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API.\n_._ = _;\n// Export the Underscore API.\nexport default _;\n","/**\n * Dynamically create form and submit.\n *\n * Author: Filip Ter\n */\nexport default function downloadFASTA(sequence_ids, database_ids) {\n    var form = $('<form/>').attr('method', 'post').attr('action', 'get_sequence');\n    addField('sequence_ids', sequence_ids);\n    addField('database_ids', database_ids);\n    addField('_csrf', document.querySelector('meta[name=\"_csrf\"]').content);\n    form.appendTo('body').submit().remove();\n\n    function addField(name, val) {\n        form.append(\n            $('<input>').attr('type', 'hidden').attr('name', name).val(val)\n        );\n    }\n}\n","export default function asMailtoHref(querydb, program, numQueries, url, isOpenAccess) {\n    const dbsArr = formatDatabases(querydb);\n    const mailto = composeEmail(dbsArr, program, numQueries, url, isOpenAccess);\n    return encodeEmail(mailto);\n}\n\nfunction formatDatabases(querydb) {\n    return querydb ? querydb.slice(0, 15).map(db => ' ' + db.title) : \"\";\n}\n\nfunction composeEmail(dbsArr, program, numQueries, url, isOpenAccess) {\n    const upperProgram = program.toUpperCase();\n    const accessStatement = isOpenAccess ? '' : 'The link will work if you have access to that particular SequenceServer instance.';\n\n    return `mailto:?subject=SequenceServer ${upperProgram} analysis results &body=Hello,\n\n        Here is a link to my recent ${upperProgram} analysis of ${numQueries} sequences.\n            ${url}\n\n        The following databases were used (up to 15 are shown):\n            ${dbsArr}\n\n        ${accessStatement}\n\n        Thank you for using SequenceServer, and please remember to cite our paper.\n\n        Best regards,\n\n        https://sequenceserver.com`;\n}\n\nfunction encodeEmail(mailto) {\n    return encodeURI(mailto).replace(/(%20){2,}/g, '');\n}\n","import { useState } from 'react';\nimport asMailtoHref from './mailto';\n\nconst ShareURLComponent = ({ querydb, program, queryLength, url }) => {\n    const [copied, setCopied] = useState(false);\n\n    const copyToClipboard = () => {\n        navigator.clipboard.writeText(url);\n        setCopied(true);\n    };\n\n    return (\n        <div className=\"px-6 share-url-component\">\n            <input className=\"w-full mb-3 pt-3\" name=\"shareableUrl\" type=\"text\" value={url} readOnly />\n            <div className=\"py-4 flex justify-between items-center\">\n                <button className=\"py-2 px-3 border border-transparent rounded-md shadow-sm text-white bg-seqblue hover:bg-seqorange focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-seqorange\" onClick={copyToClipboard}>{copied ? 'Copied!' : 'Copy to Clipboard'}</button>\n                <a href={asMailtoHref(querydb, program, queryLength, url, true)}>Share via email</a>\n            </div>\n        </div>\n    );\n};\n\nexport default ShareURLComponent;\n","import React, { createRef } from \"react\";\nimport ShareURLComponent from \"./share_url\";\nimport _ from \"underscore\";\n\n/**\n * Takes sequence accession as props, fetches the sequence from the server, and\n * displays it in a modal.\n */\nexport default class CloudShareModal extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      formState: 'input', // Possible values: 'input', 'loading', 'results', 'error'\n      errorMessages: [],\n      email: '',\n      agreeToTos: false,\n      shareableurl: '',\n      isModalVisible: false,\n    };\n    this.modalRef = createRef();\n  }\n\n  // Lifecycle methods. //\n\n  handleChange = (e) => {\n    const { name, value, type, checked } = e.target;\n    const inputValue = type === 'checkbox' ? checked : value;\n\n    this.setState({ [name]: inputValue });\n  }\n\n  handleSubmit = async (e) => {\n    e.preventDefault();\n\n    const { email } = this.state;\n    const jobId = this.getJobIdFromPath();\n\n    this.setState({ formState: 'loading' });\n\n    const requestData = {\n      job_id: jobId,\n      sender_email: email\n    };\n\n    try {\n      const response = await fetch('/cloud_share', {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(requestData)\n      });\n\n      if (!response.ok) {\n        throw new Error('Network response was not ok');\n      }\n\n      const data = await response.json();\n\n      if (data.shareable_url) {\n        this.setState({ formState: 'results', shareableurl: data.shareable_url });\n      } else if (data.errors) {\n        this.setState({ formState: 'error', errorMessages: data.errors });\n      } else {\n        throw new Error('Unknown error submitting form');\n      }\n    } catch (error) {\n      this.setState({\n        formState: 'error',\n        errorMessages: [error.message]\n      });\n    }\n  }\n\n  getJobIdFromPath = () => {\n    const regex = /\\/([^/]+)(?:\\/|#|\\?|$)/;\n    const match = window.location.pathname.match(regex);\n    return match ? match[1] : match;\n  }\n\n  show = () => {\n    this.modalRef.current?.showModal();\n  }\n\n  hide = () => {\n    this.modalRef.current?.close();\n  }\n\n  renderLoading() {\n    return (\n      <div className=\"text-center pt-3\">\n        <i className=\"fa fa-spinner fa-3x fa-spin\"></i>\n        <p className=\"my-3\">Uploading the job to SequenceServer Cloud, please wait...</p>\n      </div>\n    );\n  }\n\n  renderResults() {\n    const { shareableurl } = this.state;\n\n    return <ShareURLComponent url={shareableurl} querydb={this.props.querydb} program={this.props.program} queryLength={this.props.queryLength} />;\n  }\n\n  renderError() {\n    const { errorMessages } = this.state;\n\n    return (\n      <>\n        {\n          errorMessages.map((errorMessage, index) => (\n            <div key={`fastan-${index}`} className=\"fastan\">\n              <div className=\"pt-0 px-0 pb-px\">\n                <div className=\"text-danger text-lg border border-danger p-2 my-2\">{errorMessage}</div>\n              </div>\n            </div>\n          ))\n        }\n        {this.renderForm()}\n      </>\n    );\n  }\n\n  renderForm() {\n    const { email, agreeToTos } = this.state;\n    const isSubmitDisabled = !agreeToTos;\n\n    return(\n      <form onSubmit={this.handleSubmit}>\n        <div className=\"px-6 py-4 text-sm\">\n          <label htmlFor=\"emailInput\" className=\"text-seqblue hover:text-orange cursor-pointer mb-0\">Your Email Address</label>\n          <input\n            type=\"email\"\n            id=\"emailInput\"\n            className=\"block w-full rounded-md border-0 py-1.5 px-3 mb-3 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-seqblue sm:text-sm sm:leading-6\"\n            placeholder=\"person@example.com\"\n            name=\"email\"\n            value={email}\n            required=\"required\"\n            onChange={this.handleChange}\n          />\n          <p className=\"mb-3\">\n            By submitting this form you agree to upload this SequenceServer result set to <a href=\"https://sequenceserver.com/cloud/\" target=\"_bank\" className=\"text-seqblue hover:text-seqorange\">SenquenceServer Cloud</a>\n            , where it will become available on the internet to everyone with the link. You also agree that your email address will be stored on SequenceServer databases as proof of authentication for support and similar purposes.\n          </p>\n          <div className=\"form-check\">\n            <input\n              type=\"checkbox\"\n              id=\"tosCheckbox\"\n              className=\"form-check-input\"\n              name=\"agreeToTos\"\n              checked={agreeToTos}\n              onChange={this.handleChange}\n            />\n            <label htmlFor=\"tosCheckbox\" className=\"pl-2\">\n              &nbsp;I agree to the <b><a href=\"https://sequenceserver.com/cloud/terms_and_conditions\" target=\"_blank\" className=\"text-seqblue hover:text-seqorange\">Terms and Conditions of Service</a></b>\n            </label>\n          </div>\n        </div>\n        <div className=\"bg-gray-50 px-4 py-3 sm:flex sm:flex-row-reverse sm:px-6\">\n          <button\n              type=\"submit\"\n              style={{ backgroundColor: isSubmitDisabled ? '#C74F13' : '#1B557A' }}\n              className='border-seqblue py-2 px-3 rounded-md text-white'\n              disabled={isSubmitDisabled}\n          >\n              Submit\n          </button>\n        </div>\n      </form>\n    )\n  }\n\n  render() {\n    const { formState, isModalVisible } = this.state;\n\n    let content;\n    switch (formState) {\n      case 'loading':\n        content = this.renderLoading();\n        break;\n      case 'results':\n        content = this.renderResults();\n        break;\n      case 'error':\n        content = this.renderError();\n        break;\n      case 'input':\n      default:\n        content = this.renderForm();\n        break;\n    }\n\n    return (\n      <div className=\"relative\">\n        <dialog ref={this.modalRef} className=\"fixed p-4 w-full max-w-2xl bg-transparent focus:outline-none\">\n          <div className=\"relative flex flex-col rounded-lg bg-white shadow\">\n            <div className=\"flex items-start justify-between rounded-t border-b p-5\">\n              <h3 className=\"text-xl font-medium text-gray-900\">\n                Share to SequenceServer Cloud\n              </h3>\n              <button className=\"ml-auto inline-flex items-center rounded-lg bg-transparent p-1.5 text-sm text-gray-400 hover:bg-gray-200\" onClick={this.hide}>\n                <i className=\"fa-solid fa-xmark hover:text-black\"></i>\n              </button>\n            </div>\n            <div className=\"dialog-content\">\n              {content}\n            </div>\n          </div>\n        </dialog>\n      </div>\n    );\n  }\n}\n","import React from 'react';\n\nclass DownloadLinks extends React.Component{\n    render () {}\n}\n\nexport default DownloadLinks;","import React, { Component } from 'react';\nimport _ from 'underscore';\n\nimport downloadFASTA from './download_fasta';\nimport asMailtoHref from './mailto';\nimport CloudShareModal from './cloud_share_modal';\nimport DownloadLinks from 'download_links';\n/**\n * checks whether code is being run by jest\n */\n// eslint-disable-next-line no-undef\nconst isTestMode = () => process.env.JEST_WORKER_ID !== undefined || process.env.NODE_ENV === 'test';\n/**\n * Renders links for downloading hit information in different formats.\n * Renders links for navigating to each query.\n */\nexport default class extends Component {\n\n    constructor(props) {\n        super(props);\n        this.downloadFastaOfAll = this.downloadFastaOfAll.bind(this);\n        this.downloadFastaOfSelected = this.downloadFastaOfSelected.bind(this);\n        this.topPanelJSX = this.topPanelJSX.bind(this);\n        this.summaryString = this.summaryString.bind(this);\n        this.indexJSX = this.indexJSX.bind(this);\n        this.downloadsPanelJSX = this.downloadsPanelJSX.bind(this);\n        this.handleQueryIndexChange = this.handleQueryIndexChange.bind(this);\n        this.isElementInViewPort = this.isElementInViewPort.bind(this);\n        this.setVisibleQueryIndex = this.setVisibleQueryIndex.bind(this);\n        this.debounceScrolling = this.debounceScrolling.bind(this);\n        this.scrollListener = this.scrollListener.bind(this);\n        this.copyURL = this.copyURL.bind(this);\n        this.shareCloudInit = this.shareCloudInit.bind(this);\n        this.sharingPanelJSX = this.sharingPanelJSX.bind(this);\n        this.cloudShareModal = React.createRef();\n        this.timeout = null;\n        this.queryElems = [];\n        this.state = {\n            queryIndex: 1\n        };\n    }\n\n    componentDidMount() {\n        //keep track of the current queryIndex so it doesn't get lost on page reload\n        const urlMatch = window.location.href.match(/#Query_(\\d+)/);\n        if (urlMatch && urlMatch.length > 1) {\n            const queryNumber = +urlMatch[1];\n            const index = this.props.data.queries.findIndex(query => query.number === queryNumber);\n            this.setState({ queryIndex: index + 1 });\n        }\n        window.addEventListener('scroll', this.scrollListener);\n        $('a[href^=\"#Query_\"]').on('click', this.animateAnchorElements);\n    }\n    componentWillUnmount() {\n        window.removeEventListener('scroll', this.scrollListener);\n    }\n    componentDidUpdate(prevProps) {\n        if (this.props.allQueriesLoaded && !prevProps.allQueriesLoaded) {\n            /**\n             * storing all query elements in this variable once they all become available so we don't have to fetch them all over again\n             */\n            this.queryElems = Array.from(document.querySelectorAll('.resultn'));\n        }\n    }\n\n\n    /**\n     * to avoid unnecessary computations, we debounce the scroll listener so it only fires after user has stopped scrolling for some milliseconds\n     */\n    scrollListener() {\n        this.debounceScrolling(this.setVisibleQueryIndex, 500);\n    }\n\n    debounceScrolling(callback, timer) {\n        if (this.timeout) {\n            clearTimeout(this.timeout);\n        }\n        this.timeout = setTimeout(callback, timer);\n    }\n\n    /**\n     * This method makes the page aware of what query is visible so that clicking previous / next button at any point\n     * navigates to the proper query\n     */\n    setVisibleQueryIndex() {\n        const queryElems = this.queryElems.length ? this.queryElems : Array.from(document.querySelectorAll('.resultn'));\n        const hits = Array.from(document.querySelectorAll('.hit[id^=Query_]'));\n        // get the first visible element and marks it as the current query\n        const topmostEl = queryElems.find(this.isElementInViewPort) || hits.find(this.isElementInViewPort);\n        if (topmostEl) {\n            const queryIndex = Number(topmostEl.id.match(/Query_(\\d+)/)[1]);\n            let hash = `#Query_${queryIndex}`;\n            // if we can guarantee that the browser can handle change in url hash without the page jumping,\n            // then we update the url hash after scroll. else, hash is only updated on click of next or prev button\n            if (window.history.pushState) {\n                window.history.pushState(null, null, hash);\n            }\n            this.setState({ queryIndex });\n        }\n    }\n    animateAnchorElements(e) {\n        // allow normal behavior in test mode to prevent warnings or errors from jquery\n        if (isTestMode()) return;\n        e.preventDefault();\n        $('html, body').animate({\n            scrollTop: $(this.hash).offset().top\n        }, 300);\n        if (window.history.pushState) {\n            window.history.pushState(null, null, this.hash);\n        } else {\n            window.location.hash = this.hash;\n        }\n    }\n    isElementInViewPort(elem) {\n        const { top, left, right, bottom } = elem.getBoundingClientRect();\n        return (\n            top >= 0 &&\n            left >= 0 &&\n            bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n            right <= (window.innerWidth || document.documentElement.clientWidth)\n        );\n    }\n    /**\n         * Clear sessionStorage - useful to initiate a new search in the same tab.\n         * Passing sessionStorage.clear directly as onclick callback didn't work\n         * (on macOS Chrome).\n        */\n    clearSession() {\n        sessionStorage.clear();\n    }\n    /**\n     *\n     * handle next and previous query button clicks\n     */\n    handleQueryIndexChange(nextQuery) {\n        if (nextQuery < 1 || nextQuery > this.props.data.queries.length) return;\n        const anchorEl = document.createElement('a');\n        //indexing at [nextQuery - 1] because array is 0-indexed\n        anchorEl.setAttribute('href', '#Query_' + this.props.data.queries[nextQuery - 1].number);\n        anchorEl.setAttribute('hidden', true);\n        document.body.appendChild(anchorEl);\n        // add smooth scrolling animation with jquery\n        $(anchorEl).on('click', this.animateAnchorElements);\n        anchorEl.click();\n        document.body.removeChild(anchorEl);\n        this.setState({ queryIndex: nextQuery });\n    }\n    /**\n     * Event-handler for downloading fasta of all hits.\n     */\n    downloadFastaOfAll() {\n        var sequence_ids = [];\n        this.props.data.queries.forEach(\n            (query) => query.hits.forEach(\n                (hit) => sequence_ids.push(hit.id)));\n        var database_ids = this.props.data.querydb.map((querydb) => querydb.id);\n        downloadFASTA(sequence_ids, database_ids);\n        return false;\n    }\n\n    /**\n     * Handles downloading fasta of selected hits.\n     */\n    downloadFastaOfSelected() {\n        var sequence_ids = $('.hit-links :checkbox:checked').map(function () {\n            return this.value;\n        }).get();\n        if (sequence_ids.length === 0) {\n            return false;\n        }\n        var database_ids = _.map(this.props.data.querydb, _.iteratee('id'));\n        downloadFASTA(sequence_ids, database_ids);\n        return false;\n    }\n\n    /**\n     * Handles copying the URL into the user's clipboard. Modified from: https://stackoverflow.com/a/49618964/18117380\n     * Hides the 'Copied!' tooltip after 3 seconds\n     */\n\n    copyURL() {\n        const element = document.createElement('input');\n        const url = window.location.href;\n        document.body.appendChild(element);\n        element.value = url;\n        element.select();\n        document.execCommand('copy');\n        document.body.removeChild(element);\n\n        const tooltip = document.getElementById('tooltip');\n        tooltip.classList.remove('hidden');\n\n        setTimeout(() => {\n            tooltip.classList.add('hidden');\n        }, 3000);\n    }\n\n    shareCloudInit() {\n        this.cloudShareModal.current.show();\n    }\n\n    topPanelJSX() {\n        var path = location.pathname.split('/');\n        // Get job id.\n        var job_id = path.pop();\n        // Deriving rootURL this way is required for subURI deployments\n        // - we cannot just send to '/'.\n        var rootURL = path.join('/');\n        return (\n            <div className=\"sidebar-top-panel\">\n                <div className=\"pl-px table mb-0 w-full\">\n                    <h4 className=\"text-sm font-bold mb-0 mt-0.5\">\n                        {this.summaryString()}\n                    </h4>\n                </div>\n                {this.props.data.queries.length > 12 && this.queryIndexButtons()}\n                <div>\n                    <a href={`${rootURL}/?job_id=${job_id}`} className=\"text-sm text-seqblue hover:text-seqorange cursor-pointer\">\n                        <i className=\"fa fa-pencil\"></i> Edit search\n                    </a>\n                    <span className=\"text-seqorange px-1\">|</span>\n                    <a href={`${rootURL}/`}\n                        onClick={this.clearSession} className=\"text-sm text-seqblue hover:text-seqorange cursor-pointer\">\n                        <i className=\"fa-regular fa-file\"></i> New search\n                    </a>\n                </div>\n                {this.props.shouldShowIndex && this.indexJSX()}\n            </div>\n        );\n    }\n\n    summaryString() {\n        var program = this.props.data.program;\n        var numqueries = this.props.data.queries.length;\n        var numquerydb = this.props.data.querydb.length;\n\n        return (\n            program.toUpperCase() + ': ' +\n            numqueries + ' ' + (numqueries > 1 ? 'queries' : 'query') + ', ' +\n            numquerydb + ' ' + (numquerydb > 1 ? 'databases' : 'database')\n        );\n    }\n\n    queryIndexButtons() {\n        const buttonStyle = {\n            outline: 'none', border: 'none', background: 'none'\n        };\n        const buttonClasses = 'text-sm text-seqblue hover:text-seqorange hover:bg-gray-200';\n\n        const handlePreviousBtnClick = () => this.handleQueryIndexChange(this.state.queryIndex - 1);\n        const handleNextBtnClick = () => this.handleQueryIndexChange(this.state.queryIndex + 1);\n\n        // eslint-disable-next-line no-unused-vars\n        const NavButton = ({ text, onClick }) => (\n            <button className={buttonClasses} onClick={onClick} style={buttonStyle}>{text}</button>\n        );\n        return <div style={{ display: 'flex', width: '100%', margin: '7px 0' }}>\n            {this.state.queryIndex > 1 && <NavButton text=\"Previous Query\" onClick={handlePreviousBtnClick} />}\n            {this.state.queryIndex > 1 && this.state.queryIndex < this.props.data.queries.length && <span className=\"text-seqorange px-1\">|</span>}\n            {this.state.queryIndex < this.props.data.queries.length && <NavButton onClick={handleNextBtnClick} text=\"Next Query\" />}\n        </div>;\n    }\n    indexJSX() {\n        return <ul className=\"w-full\"> {\n            _.map(this.props.data.queries, (query) => {\n                return <li key={'Side_bar_' + query.id}>\n                    <a className=\"side-nav text-sm text-seqblue hover:text-seqorange focus:text-seqorange active:text-seqorange cursor-pointer hover-bold line-clamp-1 mb-1.5\"\n                        title={'Query= ' + query.id + ' ' + query.title}\n                        href={'#Query_' + query.number}>\n                        {'Query= ' + query.id}\n                    </a>\n                </li>;\n            })\n        }\n        </ul>;\n    }\n\n    downloadsPanelJSX() {\n        return (\n            <div className=\"downloads\">\n                <div className=\"pl-px table mb-0 w-full\">\n                    <h4 className=\"text-sm font-bold mb-0 mt-2.5\">\n                        Download FASTA, XML, TSV\n                    </h4>\n                </div>\n                <ul>\n                    {\n                        !(this.props.data.imported_xml || this.props.data.non_parse_seqids) && <li className=\"hover:bg-gray-200 mb-1\">\n                            <a\n                                href=\"#\"\n                                className={`text-sm text-seqblue download-fasta-of-all hover:text-seqorange cursor-pointer py-0.5 px-0.5 ${!this.props.atLeastOneHit && 'disabled'}`}\n                                onClick={this.props.atLeastOneHit ? this.downloadFastaOfAll : (e) => e.preventDefault()}>\n                                    FASTA of all hits\n                            </a>\n                        </li>\n                    }\n                    {\n                        !(this.props.data.imported_xml || this.props.data.non_parse_seqids) && <li className=\"mb-1\">\n                            <a\n                                href=\"#\"\n                                className=\"flex text-sm download-fasta-of-selected text-seqblue disabled py-0.5 px-0.5\"\n                                onClick={this.downloadFastaOfSelected}>\n                                FASTA of <span className=\"font-bold px-0.5\"></span> selected hit(s)\n                            </a>\n                        </li>\n                    }\n                    <li className=\"hover:bg-gray-200 mb-1\">\n                        <a href=\"#\" className={`text-sm text-seqblue download-alignment-of-all hover:text-seqorange cursor-pointer py-0.5 px-0.5 ${!this.props.atLeastOneHit && 'disabled'}`}>\n                            Alignment of all hits\n                        </a>\n                    </li>\n                    <li className=\"mb-1\">\n                        <a href=\"#\" className=\"flex text-sm download-alignment-of-selected text-seqblue disabled py-0.5 px-0.5\">\n                            Alignment of <span className=\"font-bold px-0.5\"></span> selected hit(s)\n                        </a>\n                    </li>\n                    {\n                        !this.props.data.imported_xml && <li className=\"hover:bg-gray-200 mb-1\">\n                            <a href={'download/' + this.props.data.search_id + '.std_tsv'}>\n                                <div className=\"relative flex flex-col items-center group\">\n                                    <div className=\"flex items-center w-full\">\n                                        <span className=\"w-full text-sm text-seqblue hover:text-seqorange download cursor-pointer py-0.5 px-0.5\">Standard tabular report</span>\n                                        <div className=\"absolute hidden left-full ml-2 items-center group-hover:flex tooltip-wrap\">\n                                            <div className=\"w-0 h-0 border-y-8 border-r-8 border-t-transparent border-b-transparent border-r-black -mr-px\"></div>\n                                            <span className=\"relative z-10 p-2 side-tooltip-text leading-4 text-center text-white whitespace-no-wrap bg-black shadow-lg rounded-md\">\n                                                15 columns: query and subject ID; scientific\n                                                name, alignment length, mismatches, gaps, identity,\n                                                start and end coordinates, e value, bitscore, query\n                                                coverage per subject and per HSP.\n                                            </span>\n                                        </div>\n                                    </div>\n                                </div>\n                            </a>\n                        </li>\n                    }\n                    {\n                        !this.props.data.imported_xml && <li className=\"hover:bg-gray-200 mb-1\">\n                            <a href={'download/' + this.props.data.search_id + '.full_tsv'}>\n                                <div className=\"relative flex flex-col items-center group\">\n                                    <div className=\"flex items-center w-full\">\n                                        <span className=\"w-full text-sm text-seqblue hover:text-seqorange download cursor-pointer py-0.5 px-0.5\">Full tabular report</span>\n                                        <div className=\"absolute hidden left-full ml-2 items-center group-hover:flex tooltip-wrap\">\n                                            <div className=\"w-0 h-0 border-y-8 border-r-8 border-t-transparent border-b-transparent border-r-black -mr-px\"></div>\n                                            <span className=\"relative z-10 p-2 side-tooltip-text leading-4 text-center text-white whitespace-no-wrap bg-black shadow-lg rounded-md\">\n                                                44 columns: query and subject ID, GI,\n                                                accessions, and length; alignment details;\n                                                taxonomy details of subject sequence(s) and\n                                                query coverage per subject and per HSP.\n                                            </span>\n                                        </div>\n                                    </div>\n                                </div>\n                            </a>\n                        </li>\n                    }\n                    {\n                        !this.props.data.imported_xml && <li className=\"hover:bg-gray-200 mb-1\">\n                            <a href={'download/' + this.props.data.search_id + '.xml'}>\n                                <div className=\"relative flex flex-col items-center group\">\n                                    <div className=\"flex items-center w-full\">\n                                        <span className=\"w-full text-sm text-seqblue hover:text-seqorange download cursor-pointer py-0.5 px-0.5\">Full XML report</span>\n                                        <div className=\"absolute hidden left-full ml-2 items-center group-hover:flex tooltip-wrap\">\n                                            <div className=\"w-0 h-0 border-y-8 border-r-8 border-t-transparent border-b-transparent border-r-black -mr-px\"></div>\n                                            <span className=\"relative z-10 p-2 side-tooltip-text leading-4 text-center text-white whitespace-no-wrap bg-black shadow-lg rounded-md\">\n                                                Results in XML format.\n                                            </span>\n                                        </div>\n                                    </div>\n                                </div>\n                            </a>\n                        </li>\n                    }\n                    {\n                        !this.props.data.imported_xml && <li className=\"hover:bg-gray-200 mb-1\">\n                            <a href={'download/' + this.props.data.search_id + '.pairwise'}>\n                                <div className=\"relative flex flex-col items-center group\">\n                                    <div className=\"flex items-center w-full\">\n                                        <span className=\"w-full text-sm text-seqblue hover:text-seqorange download cursor-pointer py-0.5 px-0.5\">Full Text report</span>\n                                        <div className=\"absolute hidden left-full ml-2 items-center group-hover:flex tooltip-wrap\">\n                                            <div className=\"w-0 h-0 border-y-8 border-r-8 border-t-transparent border-b-transparent border-r-black -mr-px\"></div>\n                                            <span className=\"relative z-10 p-2 side-tooltip-text leading-4 text-center text-white whitespace-no-wrap bg-black shadow-lg rounded-md\">\n                                                Results in text format.\n                                            </span>\n                                        </div>\n                                    </div>\n                                </div>\n                            </a>\n                        </li>\n                    }\n                    <DownloadLinks imported_xml={this.props.data.imported_xml} search_id={this.props.data.search_id} />\n                </ul>\n            </div>\n        );\n    }\n\n    sharingPanelJSX() {\n        return (\n            <div className=\"sharing-panel\">\n                <div className=\"pl-px table mb-0 w-full\">\n                    <h4 className=\"text-sm font-bold mb-0 mt-2.5\">\n                        Share results\n                    </h4>\n                </div>\n                <ul>\n                    {!this.props.cloudSharingEnabled &&\n                        <li className=\"hover:text-seqorange hover:bg-gray-200\">\n                            <a id=\"copyURL\" className=\"flex text-sm text-seqblue hover:text-seqorange copy-URL cursor-pointer py-0.5 px-0.5 w-full\" onClick={this.copyURL}>\n                                <div className=\"relative flex gap-2 items-center group w-full\">\n                                    <i className=\"fa fa-copy\"></i>\n                                    <div className=\"flex items-center\">\n                                        <span className=\"w-full\">Copy URL to clipboard</span>\n                                        <div id=\"tooltip\" className=\"absolute hidden left-full ml-2 items-center\">\n                                            <div className=\"flex items-center\">\n                                                <div className=\"w-0 h-0 border-y-8 border-r-8 border-t-transparent border-b-transparent border-r-black -mr-px\"></div>\n                                                <span className=\"relative z-10 p-2 side-tooltip-text leading-4 text-center text-white whitespace-no-wrap bg-black shadow-lg rounded-md\">\n                                                    Copied!\n                                                </span>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </div>\n                            </a>\n                        </li>\n                    }\n                    {!this.props.cloudSharingEnabled &&\n                        <li className=\"hover:text-seqorange hover:bg-gray-200\">\n                            <a id=\"sendEmail\" className=\"flex text-sm text-seqblue hover:text-seqorange email-URL cursor-pointer py-0.5 px-0.5 w-full\"\n                                href={asMailtoHref(this.props.data.querydb, this.props.data.program, this.props.data.queries.length, window.location.href)}\n                                target=\"_blank\" rel=\"noopener noreferrer\">\n                                <div className=\"relative flex gap-2 items-center group w-full\">\n                                    <i className=\"fa fa-envelope\"></i>\n                                    <div className=\"flex items-center w-full\">\n                                        <span className=\"w-full\">Send by email</span>\n                                        <div className=\"absolute hidden left-full ml-2 items-center group-hover:flex tooltip-wrap\">\n                                            <div className=\"w-0 h-0 border-y-8 border-r-8 border-t-transparent border-b-transparent border-r-black -mr-px\"></div>\n                                            <span className=\"relative z-10 p-2 side-tooltip-text leading-4 text-center text-white whitespace-no-wrap bg-black shadow-lg rounded-md\">\n                                                Send by email\n                                            </span>\n                                        </div>\n                                    </div>\n                                </div>\n                            </a>\n                        </li>\n                    }\n                    {this.props.cloudSharingEnabled &&\n                        <li className=\"hover:text-seqorange hover:bg-gray-200\">\n                            <button className=\"flex text-sm text-seqblue hover:text-seqorange cloud-Post cursor-pointer py-0.5 px-0.5 w-full\" onClick={this.shareCloudInit}>\n                                <div className=\"relative flex gap-2 items-center group w-full\">\n                                    <i className=\"fa fa-cloud\"></i>\n                                    <div className=\"flex items-center\">\n                                        <span className=\"w-full\">Share to cloud</span>\n                                        <div className=\"absolute hidden left-full ml-2 items-center group-hover:flex tooltip-wrap\">\n                                            <div className=\"w-0 h-0 border-y-8 border-r-8 border-t-transparent border-b-transparent border-r-black -mr-px\"></div>\n                                            <span className=\"relative z-10 p-2 side-tooltip-text leading-4 text-center text-white whitespace-no-wrap bg-black shadow-lg rounded-md\">\n                                                Results in pairwise format\n                                                Upload results to SequenceServer Cloud where it will become accessable\n                                                to everyone who has a link.\n                                            </span>\n                                        </div>\n                                    </div>\n                                </div>\n                            </button>\n                        </li>\n                    }\n                </ul>\n                {\n                    <CloudShareModal\n                        ref={this.cloudShareModal}\n                        querydb={this.props.data.querydb}\n                        program={this.props.data.program}\n                        queryLength={this.props.data.queries.length}\n                    />\n                }\n            </div>\n        );\n    }\n\n    render() {\n        return (\n            <div className=\"sidebar sticky top-0 print:hidden\">\n                {this.topPanelJSX()}\n                {this.downloadsPanelJSX()}\n                {this.sharingPanelJSX()}\n                <div className=\"referral-panel\">\n                    <div className=\"pl-px table mb-0 w-full text-sm\">\n                        <h4 className=\"font-bold mb-0 mt-2.5\">Recommend SequenceServer</h4>\n                        <p><a href=\"https://sequenceserver.com/referral-program\" target=\"_blank\" className=\"text-seqblue hover:text-seqorange\">Earn up to $400 per signup</a></p>\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n\n","var d3 = require('d3');\n\nexport function download_url(url, filename) {\n    var a = d3.select('body').append('a')\n    .attr('download', filename)\n    .style('display', 'none')\n    .attr('href', url);\n\n    a.node().click();\n    setTimeout(function() {\n        a.remove();\n    }, 100);\n}\n\nexport function generate_blob_url(blob) {\n    const url = window.URL.createObjectURL(blob);\n    return url;\n}\n\nexport function download_blob(blob, filename) {\n    if (typeof window.navigator.msSaveOrOpenBlob !== 'undefined') {\n        window.navigator.msSaveOrOpenBlob(blob, filename);\n    }else{\n        download_url(generate_blob_url(blob), filename);\n    }\n}\n\nexport function sanitize_filename(str) {\n    var san = str.replace(/[^a-zA-Z0-9=_\\-]/g, '_');\n    // Replace runs of underscores with single one.\n    san = san.replace(/_{2,}/g, '_');\n    // Remove any leading or trailing underscores.\n    san = san.replace(/^_/, '').replace(/_$/, '');\n    return san;\n}\n","import * as Exporter from './exporter';\nimport _ from 'underscore';\n\nexport default class AlignmentExporter {\n    constructor() {\n        this.prepare_alignments_for_export = this.prepare_alignments_for_export.bind(this);\n        this.export_alignments = this.export_alignments.bind(this);\n    }\n\n    wrap_string(str, width) {\n        return str.match(new RegExp(`.{1,${width}}`, 'g')).join('\\n');\n    }\n\n    generate_fasta(hsps) {\n        let fasta = '';\n\n        hsps.map(hsp => {\n            fasta += `>${hsp.query_id}:${hsp.qstart}-${hsp.qend}\\n`;\n            fasta += `${hsp.qseq}\\n`;\n            fasta += `>${hsp.query_id}:${hsp.qstart}-${hsp.qend}_alignment_${hsp.hit_id}:${hsp.sstart}-${hsp.send}\\n`;\n            fasta += `${hsp.midline}\\n`;\n            fasta += `>${hsp.hit_id}:${hsp.sstart}-${hsp.send}\\n`;\n            fasta += `${hsp.sseq}\\n`;\n        });\n\n        return fasta;\n    }\n\n    get_alignments_download_metadata(hsps, filename_prefix){\n        const fasta = this.generate_fasta(hsps);\n        const blob = new Blob([fasta], { type: 'text/fasta' });\n        const filename = Exporter.sanitize_filename(filename_prefix) + '.txt';\n        return {filename, blob};\n    }\n\n    prepare_alignments_for_export(hsps, filename_prefix) {\n        const { filename, blob } = this.get_alignments_download_metadata(hsps, filename_prefix);\n        return Exporter.generate_blob_url(blob, filename);\n    }\n\n    export_alignments(hsps, filename_prefix) {\n        const { filename, blob } = this.get_alignments_download_metadata(hsps, filename_prefix);\n        Exporter.download_blob(blob, filename);\n    }\n}\n","/**\n * svgExporter.js\n *\n * Exports <svg> as .svg or .png.\n *\n * Borrowed and modified from Kablammo which in turn is based on\n * https://github.com/NYTimes/svg-crowbar.\n *\n */\nimport * as Exporter from './exporter';\nimport * as d3 from 'd3';\n\n/**\n * Exports the given <svg> DOM node as a .svg file.\n */\nvar export_as_svg = function (svg, filename) {\n    var blob = new Blob([serialize_svg(svg)], { type: 'text/xml' });\n    filename = Exporter.sanitize_filename(filename) + '.svg';\n    Exporter.download_blob(blob, filename);\n};\n\n/**\n * Exports the given <svg> DOM node as a .png file.\n */\nvar export_as_png = function (svg, filename) {\n    if (typeof window.navigator.msSaveOrOpenBlob !== 'undefined') {\n        alert('Exporting PNG images is not supported in Internet Explorer. Please use Chrome or Firefox.');\n        return;\n    }\n\n    var raster_scale_factor = 5;\n\n    var canvas = document.getElementById('png-exporter');\n    var $svg = $(svg);\n\n    canvas.height = $svg.height() * raster_scale_factor;\n    canvas.width = $svg.width() * raster_scale_factor;\n\n    var img = new Image();\n    img.onload = function() {\n        var context = canvas.getContext('2d');\n        context.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n        filename = Exporter.sanitize_filename(filename) + '.png';\n        Exporter.download_url(canvas.toDataURL('image/png'), filename);\n    };\n\n    var svgString = serialize_svg(svg);\n    var encodedSvg = encodeURIComponent(svgString).replace(/%([0-9A-F]{2})/gi, function(match, p1) {\n        return String.fromCharCode('0x' + p1);\n    });\n    img.src = 'data:image/svg+xml;base64,' + window.btoa(encodedSvg);\n};\n\nvar serialize_svg = function(svg) {\n    // Clone svg first so that none of our changes to affect the actual SVG.\n    svg = svg.cloneNode(true);\n\n    d3.select(svg).attr('version', '1.1')\n        .insert('defs', ':first-child')\n        .append('style')\n        .attr('class', 'exported-css')\n        .attr('type', 'text/css')\n        .node()\n        .textContent = get_styles();\n\n    svg.removeAttribute('xmlns');\n    svg.removeAttribute('xlink');\n    svg.setAttributeNS(d3.namespaces.xmlns, 'xmlns', d3.namespaces.svg);\n    svg.setAttributeNS(d3.namespaces.xmlns, 'xmlns:xlink', d3.namespaces.xlink);\n\n    var source = (new XMLSerializer()).serializeToString(svg);\n    var doctype = '<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC ' +\n        '\"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">';\n    return doctype + source;\n};\n\nvar get_styles = function () {\n    var styles = '';\n\n    for (var i = 0; i < document.styleSheets.length; i++) {\n        (function process_ss(ss) {\n            // See if we can access ss.cssRules. Note that cssRules respects\n            // same-origin policy, as per\n            // https://code.google.com/p/chromium/issues/detail?id=49001#c10.\n            try {\n                // In IE and Chrome, if stylesheet originates from a different\n                // domain, ss.cssRules simply won't exist. In Firefox, if\n                // stylesheet originates from a different domain, trying\n                // to access ss.cssRules will throw a SecurityError.\n                // Hence, we must use // try/catch to detect this\n                // condition in Firefox.\n                if (!ss.cssRules)\n                    return;\n            } catch (e) {\n                // Rethrow exception if it's not a SecurityError.\n                if (e.name !== 'SecurityError')\n                    throw e;\n                return;\n            }\n\n            // Stylesheet should be included in SVG and has accessible cssRules, so\n            // serialize rules into string.\n            for (var i = 0; i < ss.cssRules.length; i++) {\n                let rule = ss.cssRules[i];\n                if (rule.type === CSSRule.IMPORT_RULE) {\n                    process_ss(rule.styleSheet);\n                } else {\n                    // TODO: Illustrator will crash on descendant selectors. To\n                    // circumvent this, we should ignore such selectors.\n\n                    let selectorText = rule.selectorText;\n                    if (selectorText && selectorText.indexOf('svg') !== -1)\n                        styles += '\\n' + rule.cssText;\n                }\n            }\n        })(document.styleSheets[i]);\n    }\n\n    return styles;\n};\n\nvar handle_click = function (export_callback) {\n    return function () {\n        var $svg = $(this).parents('.grapher').find('svg');\n        export_callback($svg[0], $svg.attr('data-name'));\n        return false;\n    };\n};\n\nvar $body = $('body');\n$body.on('click', '.export-to-svg', handle_click(export_as_svg));\n$body.on('click', '.export-to-png', handle_click(export_as_png));\n","export default class CollapsePreferences {\n    constructor(component) {\n        this.component = component;\n        this.collapsePreferences = JSON.parse(localStorage.getItem('collapsePreferences')) || [];\n    }\n\n    toggleCollapse() {\n        let currentlyCollapsed = this.component.state.collapsed;\n        this.component.setState({ collapsed: !currentlyCollapsed });\n\n        if (currentlyCollapsed) {\n            localStorage.setItem('collapsePreferences', JSON.stringify(this.collapsePreferences.filter((name) => name !== this.component.name)));\n        } else {\n            let uniqueCollapsePreferences = [... new Set(this.collapsePreferences.concat([this.component.name]))];\n            localStorage.setItem('collapsePreferences', JSON.stringify(uniqueCollapsePreferences));\n        }\n    }\n\n    preferenceStoredAsCollapsed() {\n        return this.collapsePreferences.includes(this.component.name);\n    }\n\n    renderCollapseIcon() {\n        return this.component.state.collapsed ? this.plusIcon() : this.minusIcon();\n    }\n\n    minusIcon() {\n        return <i className=\"print:!hidden fa-regular fa-square-minus\"></i>;\n    }\n\n    plusIcon() {\n        return <i className=\"print:!hidden fa-regular fa-square-plus\"></i>;\n    }\n}\n","import _ from 'underscore';\nimport React, { createRef, useState, useEffect, useCallback } from 'react';\n\nimport './svgExporter'; // create handlers for SVG and PNG download buttons\nimport CollapsePreferences from './collapse_preferences';\nimport useDetectPrint from \"react-detect-print\";\n\n// Grapher is a function that takes a Graph class and returns a React component.\n// This React component provides HTML boilerplate to add heading, to make the\n// graphs collapsible, to redraw graphs when window is resized, and SVG and PNG\n// export buttons and functionality.\nexport default function Grapher(Graph) {\n    return function Component(props) {\n        const alwaysShowName = Graph.alwaysShowName === undefined ? false : Graph.alwaysShowName();\n        const printing = useDetectPrint();\n        const name = Graph.name(props);\n        const [width, setWidth] = useState(window.innerWidth);\n        const [collapsed, setCollapsed] = useState(false);\n        const svgContainerRef = createRef();\n        let graph = null;\n\n        const graphId = () => Graph.graphId(props)\n\n        const graphLinksJSX = () => {\n            return (\n                <div className=\"hit-links float-right text-right text-blue-300 h-4 print:hidden\">\n                    <a href=\"#\" className=\"btn-link text-sm text-seqblue hover:text-seqorange cursor-pointer export-to-svg\">\n                        <i className=\"fa fa-download\" /> SVG\n                    </a>\n                    <span className=\"line px-1\">|</span>\n                    <a href=\"#\" className=\"btn-link text-sm text-seqblue hover:text-seqorange cursor-pointer export-to-png\">\n                        <i className=\"fa fa-download\" /> PNG\n                    </a>\n                </div>\n            );\n        }\n\n        const header = () => {\n            if(Graph.canCollapse()) {\n                return <div className=\"grapher-header pr-px\">\n                    <h4\n                        className=\"inline-block pl-px m-0 caption cursor-pointer text-sm\"\n                        onClick={() => collapsePreferences.toggleCollapse()}\n                    >\n                        {collapsePreferences.renderCollapseIcon()}\n                        <span className=\"print:hidden\">&nbsp;</span>{Graph.name(props)}\n                    </h4>\n                    {!collapsed && graphLinksJSX()}\n                </div>;\n            } else if (alwaysShowName) {\n                return <div className=\"grapher-histogram-header\" style={{ position: 'relative' }}>\n                    <h4 className=\"caption\">&nbsp;{Graph.name(props)}</h4>\n                    <div className=\"pull-right\" style={{ position: 'absolute', top: 0, right: 0 }}>\n                        {!collapsed && graphLinksJSX()}\n                    </div>\n                </div>;\n            } else {\n                return <div className=\"pr-px\">\n                    {!collapsed && graphLinksJSX()}\n                </div>;\n            }\n        }\n\n        const svgContainerJSX = () => {\n            var cssClasses = Graph.className() + ' svg-container hidden';\n            if (!collapsed) cssClasses += ' !block';\n            return (\n                <div\n                    ref={svgContainerRef}\n                    id={graphId()}\n                    className={cssClasses}\n                ></div>\n            );\n        }\n\n        const svgContainer = () => {\n            return $(svgContainerRef.current);\n        }\n\n        const draw = (printing = false) => {\n            let graphWidth = 'auto';\n            if (printing) graphWidth = '900';\n            // Clean slate.\n            svgContainer().empty();\n            graph = null;\n\n            // Draw if uncollapsed.\n            if (collapsed) return;\n\n            svgContainer().width(graphWidth);\n            graph = new Graph(svgContainer(), props);\n            svgContainer()\n                .find('svg')\n                .attr('data-name', Graph.dataName(props));\n        }\n\n        useEffect(() => {\n            // Attach a debounced listener to handle window resize events \n            // Updates the width state with the current window width, throttled to run at most once every 125ms\n            const handleResize = _.debounce(() => setWidth(window.innerWidth), 125);\n            window.addEventListener(\"resize\", handleResize);\n\n            const isCollapsed = collapsePreferences.preferenceStoredAsCollapsed();\n            setCollapsed(Graph.canCollapse() && (props.collapsed || isCollapsed))\n            draw();\n\n            return () => window.removeEventListener(\"resize\", handleResize)\n        }, [])\n\n        useEffect(() => {\n            draw(printing);\n        }, [printing, width])\n\n        const setState = (state) => {\n            setCollapsed(state.collapsed)\n        }\n\n        const collapsePreferences = new CollapsePreferences({name: name, state: { collapsed: collapsed }, setState: setState});\n\n        if (Graph.name(props) === null) {\n            return(null);\n        } else {\n            const printCss = collapsed ? 'print:hidden' : '';\n            const cssClasses = Graph.className() + ' grapher' + printCss;\n            return (\n                <div className={cssClasses}>\n                    {header()}\n                    {svgContainerJSX()}\n                </div>\n            )\n        }\n    }\n}\n","import Grapher from 'grapher';\n\nclass Graph {\n    static canCollapse() {\n        return false;\n    }\n\n    static name() {\n        return null;\n    }\n\n    static className() {\n        return null;\n    }\n\n    static dataName(_props) {\n        return null;\n    }\n\n    static graphId() {\n        return null;\n    }\n}\n\nexport default Grapher(Graph);\n","import { min, max } from './index.js';\n\nexport default (x, low = 0, high = 1) => {\n    return min(max(low, x), high);\n};\n","import limit from './limit.js';\n\nexport default (rgb) => {\n    rgb._clipped = false;\n    rgb._unclipped = rgb.slice(0);\n    for (let i = 0; i <= 3; i++) {\n        if (i < 3) {\n            if (rgb[i] < 0 || rgb[i] > 255) rgb._clipped = true;\n            rgb[i] = limit(rgb[i], 0, 255);\n        } else if (i === 3) {\n            rgb[i] = limit(rgb[i], 0, 1);\n        }\n    }\n    return rgb;\n};\n","// ported from jQuery's $.type\nconst classToType = {};\nfor (let name of [\n    'Boolean',\n    'Number',\n    'String',\n    'Function',\n    'Array',\n    'Date',\n    'RegExp',\n    'Undefined',\n    'Null'\n]) {\n    classToType[`[object ${name}]`] = name.toLowerCase();\n}\nexport default function (obj) {\n    return classToType[Object.prototype.toString.call(obj)] || 'object';\n}\n","import type from './type.js';\n\nexport default (args, keyOrder = null) => {\n    // if called with more than 3 arguments, we return the arguments\n    if (args.length >= 3) return Array.prototype.slice.call(args);\n    // with less than 3 args we check if first arg is object\n    // and use the keyOrder string to extract and sort properties\n    if (type(args[0]) == 'object' && keyOrder) {\n        return keyOrder\n            .split('')\n            .filter((k) => args[0][k] !== undefined)\n            .map((k) => args[0][k]);\n    }\n    // otherwise we just return the first argument\n    // (which we suppose is an array of args)\n    return args[0];\n};\n","import type from './type.js';\n\nexport default (args) => {\n    if (args.length < 2) return null;\n    const l = args.length - 1;\n    if (type(args[l]) == 'string') return args[l].toLowerCase();\n    return null;\n};\n","const { PI, min, max } = Math;\n\nexport { default as clip_rgb } from './clip_rgb.js';\nexport { default as limit } from './limit.js';\nexport { default as type } from './type.js';\nexport { default as unpack } from './unpack.js';\nexport { default as last } from './last.js';\n\nconst TWOPI = PI * 2;\nconst PITHIRD = PI / 3;\nconst DEG2RAD = PI / 180;\nconst RAD2DEG = 180 / PI;\n\nexport { PI, TWOPI, PITHIRD, DEG2RAD, RAD2DEG, min, max };\n","export default {\n    format: {},\n    autodetect: []\n};\n","import { last, clip_rgb, type } from './utils/index.js';\nimport _input from './io/input.js';\n\nclass Color {\n    constructor(...args) {\n        const me = this;\n        if (\n            type(args[0]) === 'object' &&\n            args[0].constructor &&\n            args[0].constructor === this.constructor\n        ) {\n            // the argument is already a Color instance\n            return args[0];\n        }\n        // last argument could be the mode\n        let mode = last(args);\n        let autodetect = false;\n        if (!mode) {\n            autodetect = true;\n            if (!_input.sorted) {\n                _input.autodetect = _input.autodetect.sort((a, b) => b.p - a.p);\n                _input.sorted = true;\n            }\n            // auto-detect format\n            for (let chk of _input.autodetect) {\n                mode = chk.test(...args);\n                if (mode) break;\n            }\n        }\n        if (_input.format[mode]) {\n            const rgb = _input.format[mode].apply(\n                null,\n                autodetect ? args : args.slice(0, -1)\n            );\n            me._rgb = clip_rgb(rgb);\n        } else {\n            throw new Error('unknown format: ' + args);\n        }\n        // add alpha channel\n        if (me._rgb.length === 3) me._rgb.push(1);\n    }\n    toString() {\n        if (type(this.hex) == 'function') return this.hex();\n        return `[${this._rgb.join(',')}]`;\n    }\n}\nexport default Color;\n","import Color from './Color.js';\nimport { version } from './version.js';\n\nconst chroma = (...args) => {\n    return new chroma.Color(...args);\n};\n\nchroma.Color = Color;\nchroma.version = version;\n\nexport default chroma;\n","// this gets updated automatically\nexport const version = '2.6.0';\n","import { unpack } from '../../utils/index.js';\nconst { max } = Math;\n\nconst rgb2cmyk = (...args) => {\n    let [r, g, b] = unpack(args, 'rgb');\n    r = r / 255;\n    g = g / 255;\n    b = b / 255;\n    const k = 1 - max(r, max(g, b));\n    const f = k < 1 ? 1 / (1 - k) : 0;\n    const c = (1 - r - k) * f;\n    const m = (1 - g - k) * f;\n    const y = (1 - b - k) * f;\n    return [c, m, y, k];\n};\n\nexport default rgb2cmyk;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { unpack, type } from '../../utils/index.js';\nimport cmyk2rgb from './cmyk2rgb.js';\nimport rgb2cmyk from './rgb2cmyk.js';\n\nColor.prototype.cmyk = function () {\n    return rgb2cmyk(this._rgb);\n};\n\nchroma.cmyk = (...args) => new Color(...args, 'cmyk');\n\ninput.format.cmyk = cmyk2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'cmyk');\n        if (type(args) === 'array' && args.length === 4) {\n            return 'cmyk';\n        }\n    }\n});\n","import { unpack } from '../../utils/index.js';\n\nconst cmyk2rgb = (...args) => {\n    args = unpack(args, 'cmyk');\n    const [c, m, y, k] = args;\n    const alpha = args.length > 4 ? args[4] : 1;\n    if (k === 1) return [0, 0, 0, alpha];\n    return [\n        c >= 1 ? 0 : 255 * (1 - c) * (1 - k), // r\n        m >= 1 ? 0 : 255 * (1 - m) * (1 - k), // g\n        y >= 1 ? 0 : 255 * (1 - y) * (1 - k), // b\n        alpha\n    ];\n};\n\nexport default cmyk2rgb;\n","import { unpack, last } from '../../utils/index.js';\nconst rnd = (a) => Math.round(a * 100) / 100;\n\n/*\n * supported arguments:\n * - hsl2css(h,s,l)\n * - hsl2css(h,s,l,a)\n * - hsl2css([h,s,l], mode)\n * - hsl2css([h,s,l,a], mode)\n * - hsl2css({h,s,l,a}, mode)\n */\nconst hsl2css = (...args) => {\n    const hsla = unpack(args, 'hsla');\n    let mode = last(args) || 'lsa';\n    hsla[0] = rnd(hsla[0] || 0);\n    hsla[1] = rnd(hsla[1] * 100) + '%';\n    hsla[2] = rnd(hsla[2] * 100) + '%';\n    if (mode === 'hsla' || (hsla.length > 3 && hsla[3] < 1)) {\n        hsla[3] = hsla.length > 3 ? hsla[3] : 1;\n        mode = 'hsla';\n    } else {\n        hsla.length = 3;\n    }\n    return `${mode}(${hsla.join(',')})`;\n};\n\nexport default hsl2css;\n","import { unpack, min, max } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - rgb2hsl(r,g,b)\n * - rgb2hsl(r,g,b,a)\n * - rgb2hsl([r,g,b])\n * - rgb2hsl([r,g,b,a])\n * - rgb2hsl({r,g,b,a})\n */\nconst rgb2hsl = (...args) => {\n    args = unpack(args, 'rgba');\n    let [r, g, b] = args;\n\n    r /= 255;\n    g /= 255;\n    b /= 255;\n\n    const minRgb = min(r, g, b);\n    const maxRgb = max(r, g, b);\n\n    const l = (maxRgb + minRgb) / 2;\n    let s, h;\n\n    if (maxRgb === minRgb) {\n        s = 0;\n        h = Number.NaN;\n    } else {\n        s =\n            l < 0.5\n                ? (maxRgb - minRgb) / (maxRgb + minRgb)\n                : (maxRgb - minRgb) / (2 - maxRgb - minRgb);\n    }\n\n    if (r == maxRgb) h = (g - b) / (maxRgb - minRgb);\n    else if (g == maxRgb) h = 2 + (b - r) / (maxRgb - minRgb);\n    else if (b == maxRgb) h = 4 + (r - g) / (maxRgb - minRgb);\n\n    h *= 60;\n    if (h < 0) h += 360;\n    if (args.length > 3 && args[3] !== undefined) return [h, s, l, args[3]];\n    return [h, s, l];\n};\n\nexport default rgb2hsl;\n","import { unpack, last } from '../../utils/index.js';\nimport hsl2css from './hsl2css.js';\nimport rgb2hsl from '../hsl/rgb2hsl.js';\nconst { round } = Math;\n\n/*\n * supported arguments:\n * - rgb2css(r,g,b)\n * - rgb2css(r,g,b,a)\n * - rgb2css([r,g,b], mode)\n * - rgb2css([r,g,b,a], mode)\n * - rgb2css({r,g,b,a}, mode)\n */\nconst rgb2css = (...args) => {\n    const rgba = unpack(args, 'rgba');\n    let mode = last(args) || 'rgb';\n    if (mode.substr(0, 3) == 'hsl') {\n        return hsl2css(rgb2hsl(rgba), mode);\n    }\n    rgba[0] = round(rgba[0]);\n    rgba[1] = round(rgba[1]);\n    rgba[2] = round(rgba[2]);\n    if (mode === 'rgba' || (rgba.length > 3 && rgba[3] < 1)) {\n        rgba[3] = rgba.length > 3 ? rgba[3] : 1;\n        mode = 'rgba';\n    }\n    return `${mode}(${rgba.slice(0, mode === 'rgb' ? 3 : 4).join(',')})`;\n};\n\nexport default rgb2css;\n","import { unpack } from '../../utils/index.js';\nconst { round } = Math;\n\nconst hsl2rgb = (...args) => {\n    args = unpack(args, 'hsl');\n    const [h, s, l] = args;\n    let r, g, b;\n    if (s === 0) {\n        r = g = b = l * 255;\n    } else {\n        const t3 = [0, 0, 0];\n        const c = [0, 0, 0];\n        const t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n        const t1 = 2 * l - t2;\n        const h_ = h / 360;\n        t3[0] = h_ + 1 / 3;\n        t3[1] = h_;\n        t3[2] = h_ - 1 / 3;\n        for (let i = 0; i < 3; i++) {\n            if (t3[i] < 0) t3[i] += 1;\n            if (t3[i] > 1) t3[i] -= 1;\n            if (6 * t3[i] < 1) c[i] = t1 + (t2 - t1) * 6 * t3[i];\n            else if (2 * t3[i] < 1) c[i] = t2;\n            else if (3 * t3[i] < 2) c[i] = t1 + (t2 - t1) * (2 / 3 - t3[i]) * 6;\n            else c[i] = t1;\n        }\n        [r, g, b] = [round(c[0] * 255), round(c[1] * 255), round(c[2] * 255)];\n    }\n    if (args.length > 3) {\n        // keep alpha channel\n        return [r, g, b, args[3]];\n    }\n    return [r, g, b, 1];\n};\n\nexport default hsl2rgb;\n","import hsl2rgb from '../hsl/hsl2rgb.js';\nimport input from '../input.js';\n\nconst RE_RGB = /^rgb\\(\\s*(-?\\d+),\\s*(-?\\d+)\\s*,\\s*(-?\\d+)\\s*\\)$/;\nconst RE_RGBA =\n    /^rgba\\(\\s*(-?\\d+),\\s*(-?\\d+)\\s*,\\s*(-?\\d+)\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\nconst RE_RGB_PCT =\n    /^rgb\\(\\s*(-?\\d+(?:\\.\\d+)?)%,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\nconst RE_RGBA_PCT =\n    /^rgba\\(\\s*(-?\\d+(?:\\.\\d+)?)%,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\nconst RE_HSL =\n    /^hsl\\(\\s*(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\nconst RE_HSLA =\n    /^hsla\\(\\s*(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\n\nconst { round } = Math;\n\nconst css2rgb = (css) => {\n    css = css.toLowerCase().trim();\n    let m;\n\n    if (input.format.named) {\n        try {\n            return input.format.named(css);\n            // eslint-disable-next-line\n        } catch (e) {}\n    }\n\n    // rgb(250,20,0)\n    if ((m = css.match(RE_RGB))) {\n        const rgb = m.slice(1, 4);\n        for (let i = 0; i < 3; i++) {\n            rgb[i] = +rgb[i];\n        }\n        rgb[3] = 1; // default alpha\n        return rgb;\n    }\n\n    // rgba(250,20,0,0.4)\n    if ((m = css.match(RE_RGBA))) {\n        const rgb = m.slice(1, 5);\n        for (let i = 0; i < 4; i++) {\n            rgb[i] = +rgb[i];\n        }\n        return rgb;\n    }\n\n    // rgb(100%,0%,0%)\n    if ((m = css.match(RE_RGB_PCT))) {\n        const rgb = m.slice(1, 4);\n        for (let i = 0; i < 3; i++) {\n            rgb[i] = round(rgb[i] * 2.55);\n        }\n        rgb[3] = 1; // default alpha\n        return rgb;\n    }\n\n    // rgba(100%,0%,0%,0.4)\n    if ((m = css.match(RE_RGBA_PCT))) {\n        const rgb = m.slice(1, 5);\n        for (let i = 0; i < 3; i++) {\n            rgb[i] = round(rgb[i] * 2.55);\n        }\n        rgb[3] = +rgb[3];\n        return rgb;\n    }\n\n    // hsl(0,100%,50%)\n    if ((m = css.match(RE_HSL))) {\n        const hsl = m.slice(1, 4);\n        hsl[1] *= 0.01;\n        hsl[2] *= 0.01;\n        const rgb = hsl2rgb(hsl);\n        rgb[3] = 1;\n        return rgb;\n    }\n\n    // hsla(0,100%,50%,0.5)\n    if ((m = css.match(RE_HSLA))) {\n        const hsl = m.slice(1, 4);\n        hsl[1] *= 0.01;\n        hsl[2] *= 0.01;\n        const rgb = hsl2rgb(hsl);\n        rgb[3] = +m[4]; // default alpha = 1\n        return rgb;\n    }\n};\n\ncss2rgb.test = (s) => {\n    return (\n        RE_RGB.test(s) ||\n        RE_RGBA.test(s) ||\n        RE_RGB_PCT.test(s) ||\n        RE_RGBA_PCT.test(s) ||\n        RE_HSL.test(s) ||\n        RE_HSLA.test(s)\n    );\n};\n\nexport default css2rgb;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\n\nimport rgb2css from './rgb2css.js';\nimport css2rgb from './css2rgb.js';\n\nColor.prototype.css = function (mode) {\n    return rgb2css(this._rgb, mode);\n};\n\nchroma.css = (...args) => new Color(...args, 'css');\n\ninput.format.css = css2rgb;\n\ninput.autodetect.push({\n    p: 5,\n    test: (h, ...rest) => {\n        if (!rest.length && type(h) === 'string' && css2rgb.test(h)) {\n            return 'css';\n        }\n    }\n});\n","import Color from '../../Color.js';\nimport chroma from '../../chroma.js';\nimport input from '../input.js';\nimport { unpack } from '../../utils/index.js';\n\ninput.format.gl = (...args) => {\n    const rgb = unpack(args, 'rgba');\n    rgb[0] *= 255;\n    rgb[1] *= 255;\n    rgb[2] *= 255;\n    return rgb;\n};\n\nchroma.gl = (...args) => new Color(...args, 'gl');\n\nColor.prototype.gl = function () {\n    const rgb = this._rgb;\n    return [rgb[0] / 255, rgb[1] / 255, rgb[2] / 255, rgb[3]];\n};\n","import { unpack } from '../../utils/index.js';\nconst { floor } = Math;\n\n/*\n * this is basically just HSV with some minor tweaks\n *\n * hue.. [0..360]\n * chroma .. [0..1]\n * grayness .. [0..1]\n */\n\nconst hcg2rgb = (...args) => {\n    args = unpack(args, 'hcg');\n    let [h, c, _g] = args;\n    let r, g, b;\n    _g = _g * 255;\n    const _c = c * 255;\n    if (c === 0) {\n        r = g = b = _g;\n    } else {\n        if (h === 360) h = 0;\n        if (h > 360) h -= 360;\n        if (h < 0) h += 360;\n        h /= 60;\n        const i = floor(h);\n        const f = h - i;\n        const p = _g * (1 - c);\n        const q = p + _c * (1 - f);\n        const t = p + _c * f;\n        const v = p + _c;\n        switch (i) {\n            case 0:\n                [r, g, b] = [v, t, p];\n                break;\n            case 1:\n                [r, g, b] = [q, v, p];\n                break;\n            case 2:\n                [r, g, b] = [p, v, t];\n                break;\n            case 3:\n                [r, g, b] = [p, q, v];\n                break;\n            case 4:\n                [r, g, b] = [t, p, v];\n                break;\n            case 5:\n                [r, g, b] = [v, p, q];\n                break;\n        }\n    }\n    return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default hcg2rgb;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hcg2rgb from './hcg2rgb.js';\nimport rgb2hcg from './rgb2hcg.js';\n\nColor.prototype.hcg = function () {\n    return rgb2hcg(this._rgb);\n};\n\nchroma.hcg = (...args) => new Color(...args, 'hcg');\n\ninput.format.hcg = hcg2rgb;\n\ninput.autodetect.push({\n    p: 1,\n    test: (...args) => {\n        args = unpack(args, 'hcg');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'hcg';\n        }\n    }\n});\n","import { unpack, max, min } from '../../utils/index.js';\n\nconst rgb2hcg = (...args) => {\n    const [r, g, b] = unpack(args, 'rgb');\n    const minRgb = min(r, g, b);\n    const maxRgb = max(r, g, b);\n    const delta = maxRgb - minRgb;\n    const c = (delta * 100) / 255;\n    const _g = (minRgb / (255 - delta)) * 100;\n    let h;\n    if (delta === 0) {\n        h = Number.NaN;\n    } else {\n        if (r === maxRgb) h = (g - b) / delta;\n        if (g === maxRgb) h = 2 + (b - r) / delta;\n        if (b === maxRgb) h = 4 + (r - g) / delta;\n        h *= 60;\n        if (h < 0) h += 360;\n    }\n    return [h, c, _g];\n};\n\nexport default rgb2hcg;\n","const RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\nconst RE_HEXA = /^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/;\n\nconst hex2rgb = (hex) => {\n    if (hex.match(RE_HEX)) {\n        // remove optional leading #\n        if (hex.length === 4 || hex.length === 7) {\n            hex = hex.substr(1);\n        }\n        // expand short-notation to full six-digit\n        if (hex.length === 3) {\n            hex = hex.split('');\n            hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n        }\n        const u = parseInt(hex, 16);\n        const r = u >> 16;\n        const g = (u >> 8) & 0xff;\n        const b = u & 0xff;\n        return [r, g, b, 1];\n    }\n\n    // match rgba hex format, eg #FF000077\n    if (hex.match(RE_HEXA)) {\n        if (hex.length === 5 || hex.length === 9) {\n            // remove optional leading #\n            hex = hex.substr(1);\n        }\n        // expand short-notation to full eight-digit\n        if (hex.length === 4) {\n            hex = hex.split('');\n            hex =\n                hex[0] +\n                hex[0] +\n                hex[1] +\n                hex[1] +\n                hex[2] +\n                hex[2] +\n                hex[3] +\n                hex[3];\n        }\n        const u = parseInt(hex, 16);\n        const r = (u >> 24) & 0xff;\n        const g = (u >> 16) & 0xff;\n        const b = (u >> 8) & 0xff;\n        const a = Math.round(((u & 0xff) / 0xff) * 100) / 100;\n        return [r, g, b, a];\n    }\n\n    // we used to check for css colors here\n    // if _input.css? and rgb = _input.css hex\n    //     return rgb\n\n    throw new Error(`unknown hex color: ${hex}`);\n};\n\nexport default hex2rgb;\n","import { unpack, last } from '../../utils/index.js';\nconst { round } = Math;\n\nconst rgb2hex = (...args) => {\n    let [r, g, b, a] = unpack(args, 'rgba');\n    let mode = last(args) || 'auto';\n    if (a === undefined) a = 1;\n    if (mode === 'auto') {\n        mode = a < 1 ? 'rgba' : 'rgb';\n    }\n    r = round(r);\n    g = round(g);\n    b = round(b);\n    const u = (r << 16) | (g << 8) | b;\n    let str = '000000' + u.toString(16); //#.toUpperCase();\n    str = str.substr(str.length - 6);\n    let hxa = '0' + round(a * 255).toString(16);\n    hxa = hxa.substr(hxa.length - 2);\n    switch (mode.toLowerCase()) {\n        case 'rgba':\n            return `#${str}${hxa}`;\n        case 'argb':\n            return `#${hxa}${str}`;\n        default:\n            return `#${str}`;\n    }\n};\n\nexport default rgb2hex;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport { type } from '../../utils/index.js';\nimport input from '../input.js';\nimport hex2rgb from './hex2rgb.js';\nimport rgb2hex from './rgb2hex.js';\n\nColor.prototype.hex = function (mode) {\n    return rgb2hex(this._rgb, mode);\n};\n\nchroma.hex = (...args) => new Color(...args, 'hex');\n\ninput.format.hex = hex2rgb;\ninput.autodetect.push({\n    p: 4,\n    test: (h, ...rest) => {\n        if (\n            !rest.length &&\n            type(h) === 'string' &&\n            [3, 4, 5, 6, 7, 8, 9].indexOf(h.length) >= 0\n        ) {\n            return 'hex';\n        }\n    }\n});\n","import { unpack, limit, TWOPI, PITHIRD } from '../../utils/index.js';\nconst { cos } = Math;\n\n/*\n * hue [0..360]\n * saturation [0..1]\n * intensity [0..1]\n */\nconst hsi2rgb = (...args) => {\n    /*\n    borrowed from here:\n    http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/hsi2rgb.cpp\n    */\n    args = unpack(args, 'hsi');\n    let [h, s, i] = args;\n    let r, g, b;\n\n    if (isNaN(h)) h = 0;\n    if (isNaN(s)) s = 0;\n    // normalize hue\n    if (h > 360) h -= 360;\n    if (h < 0) h += 360;\n    h /= 360;\n    if (h < 1 / 3) {\n        b = (1 - s) / 3;\n        r = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n        g = 1 - (b + r);\n    } else if (h < 2 / 3) {\n        h -= 1 / 3;\n        r = (1 - s) / 3;\n        g = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n        b = 1 - (r + g);\n    } else {\n        h -= 2 / 3;\n        g = (1 - s) / 3;\n        b = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n        r = 1 - (g + b);\n    }\n    r = limit(i * r * 3);\n    g = limit(i * g * 3);\n    b = limit(i * b * 3);\n    return [r * 255, g * 255, b * 255, args.length > 3 ? args[3] : 1];\n};\n\nexport default hsi2rgb;\n","import { unpack, TWOPI } from '../../utils/index.js';\nconst { min, sqrt, acos } = Math;\n\nconst rgb2hsi = (...args) => {\n    /*\n    borrowed from here:\n    http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/rgb2hsi.cpp\n    */\n    let [r, g, b] = unpack(args, 'rgb');\n    r /= 255;\n    g /= 255;\n    b /= 255;\n    let h;\n    const min_ = min(r, g, b);\n    const i = (r + g + b) / 3;\n    const s = i > 0 ? 1 - min_ / i : 0;\n    if (s === 0) {\n        h = NaN;\n    } else {\n        h = (r - g + (r - b)) / 2;\n        h /= sqrt((r - g) * (r - g) + (r - b) * (g - b));\n        h = acos(h);\n        if (b > g) {\n            h = TWOPI - h;\n        }\n        h /= TWOPI;\n    }\n    return [h * 360, s, i];\n};\n\nexport default rgb2hsi;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsi2rgb from './hsi2rgb.js';\nimport rgb2hsi from './rgb2hsi.js';\n\nColor.prototype.hsi = function () {\n    return rgb2hsi(this._rgb);\n};\n\nchroma.hsi = (...args) => new Color(...args, 'hsi');\n\ninput.format.hsi = hsi2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'hsi');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'hsi';\n        }\n    }\n});\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsl2rgb from './hsl2rgb.js';\nimport rgb2hsl from './rgb2hsl.js';\n\nColor.prototype.hsl = function () {\n    return rgb2hsl(this._rgb);\n};\n\nchroma.hsl = (...args) => new Color(...args, 'hsl');\n\ninput.format.hsl = hsl2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'hsl');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'hsl';\n        }\n    }\n});\n","import { unpack } from '../../utils/index.js';\nconst { floor } = Math;\n\nconst hsv2rgb = (...args) => {\n    args = unpack(args, 'hsv');\n    let [h, s, v] = args;\n    let r, g, b;\n    v *= 255;\n    if (s === 0) {\n        r = g = b = v;\n    } else {\n        if (h === 360) h = 0;\n        if (h > 360) h -= 360;\n        if (h < 0) h += 360;\n        h /= 60;\n\n        const i = floor(h);\n        const f = h - i;\n        const p = v * (1 - s);\n        const q = v * (1 - s * f);\n        const t = v * (1 - s * (1 - f));\n\n        switch (i) {\n            case 0:\n                [r, g, b] = [v, t, p];\n                break;\n            case 1:\n                [r, g, b] = [q, v, p];\n                break;\n            case 2:\n                [r, g, b] = [p, v, t];\n                break;\n            case 3:\n                [r, g, b] = [p, q, v];\n                break;\n            case 4:\n                [r, g, b] = [t, p, v];\n                break;\n            case 5:\n                [r, g, b] = [v, p, q];\n                break;\n        }\n    }\n    return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default hsv2rgb;\n","import { unpack } from '../../utils/index.js';\nconst { min, max } = Math;\n\n/*\n * supported arguments:\n * - rgb2hsv(r,g,b)\n * - rgb2hsv([r,g,b])\n * - rgb2hsv({r,g,b})\n */\nconst rgb2hsl = (...args) => {\n    args = unpack(args, 'rgb');\n    let [r, g, b] = args;\n    const min_ = min(r, g, b);\n    const max_ = max(r, g, b);\n    const delta = max_ - min_;\n    let h, s, v;\n    v = max_ / 255.0;\n    if (max_ === 0) {\n        h = Number.NaN;\n        s = 0;\n    } else {\n        s = delta / max_;\n        if (r === max_) h = (g - b) / delta;\n        if (g === max_) h = 2 + (b - r) / delta;\n        if (b === max_) h = 4 + (r - g) / delta;\n        h *= 60;\n        if (h < 0) h += 360;\n    }\n    return [h, s, v];\n};\n\nexport default rgb2hsl;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsv2rgb from './hsv2rgb.js';\nimport rgb2hsv from './rgb2hsv.js';\n\nColor.prototype.hsv = function () {\n    return rgb2hsv(this._rgb);\n};\n\nchroma.hsv = (...args) => new Color(...args, 'hsv');\n\ninput.format.hsv = hsv2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'hsv');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'hsv';\n        }\n    }\n});\n","export default {\n    // Corresponds roughly to RGB brighter/darker\n    Kn: 18,\n\n    // D65 standard referent\n    Xn: 0.95047,\n    Yn: 1,\n    Zn: 1.08883,\n\n    t0: 0.137931034, // 4 / 29\n    t1: 0.206896552, // 6 / 29\n    t2: 0.12841855, // 3 * t1 * t1\n    t3: 0.008856452 // t1 * t1 * t1\n};\n","import LAB_CONSTANTS from './lab-constants.js';\nimport { unpack } from '../../utils/index.js';\nconst { pow } = Math;\n\n/*\n * L* [0..100]\n * a [-100..100]\n * b [-100..100]\n */\nconst lab2rgb = (...args) => {\n    args = unpack(args, 'lab');\n    const [l, a, b] = args;\n    let x, y, z, r, g, b_;\n\n    y = (l + 16) / 116;\n    x = isNaN(a) ? y : y + a / 500;\n    z = isNaN(b) ? y : y - b / 200;\n\n    y = LAB_CONSTANTS.Yn * lab_xyz(y);\n    x = LAB_CONSTANTS.Xn * lab_xyz(x);\n    z = LAB_CONSTANTS.Zn * lab_xyz(z);\n\n    r = xyz_rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z); // D65 -> sRGB\n    g = xyz_rgb(-0.969266 * x + 1.8760108 * y + 0.041556 * z);\n    b_ = xyz_rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z);\n\n    return [r, g, b_, args.length > 3 ? args[3] : 1];\n};\n\nconst xyz_rgb = (r) => {\n    return 255 * (r <= 0.00304 ? 12.92 * r : 1.055 * pow(r, 1 / 2.4) - 0.055);\n};\n\nconst lab_xyz = (t) => {\n    return t > LAB_CONSTANTS.t1\n        ? t * t * t\n        : LAB_CONSTANTS.t2 * (t - LAB_CONSTANTS.t0);\n};\n\nexport default lab2rgb;\n","import LAB_CONSTANTS from './lab-constants.js';\nimport { unpack } from '../../utils/index.js';\nconst { pow } = Math;\n\nconst rgb2lab = (...args) => {\n    const [r, g, b] = unpack(args, 'rgb');\n    const [x, y, z] = rgb2xyz(r, g, b);\n    const l = 116 * y - 16;\n    return [l < 0 ? 0 : l, 500 * (x - y), 200 * (y - z)];\n};\n\nconst rgb_xyz = (r) => {\n    if ((r /= 255) <= 0.04045) return r / 12.92;\n    return pow((r + 0.055) / 1.055, 2.4);\n};\n\nconst xyz_lab = (t) => {\n    if (t > LAB_CONSTANTS.t3) return pow(t, 1 / 3);\n    return t / LAB_CONSTANTS.t2 + LAB_CONSTANTS.t0;\n};\n\nconst rgb2xyz = (r, g, b) => {\n    r = rgb_xyz(r);\n    g = rgb_xyz(g);\n    b = rgb_xyz(b);\n    const x = xyz_lab(\n        (0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / LAB_CONSTANTS.Xn\n    );\n    const y = xyz_lab(\n        (0.2126729 * r + 0.7151522 * g + 0.072175 * b) / LAB_CONSTANTS.Yn\n    );\n    const z = xyz_lab(\n        (0.0193339 * r + 0.119192 * g + 0.9503041 * b) / LAB_CONSTANTS.Zn\n    );\n    return [x, y, z];\n};\n\nexport default rgb2lab;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport lab2rgb from './lab2rgb.js';\nimport rgb2lab from './rgb2lab.js';\n\nColor.prototype.lab = function () {\n    return rgb2lab(this._rgb);\n};\n\nchroma.lab = (...args) => new Color(...args, 'lab');\n\ninput.format.lab = lab2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'lab');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'lab';\n        }\n    }\n});\n","import { unpack, DEG2RAD } from '../../utils/index.js';\nconst { sin, cos } = Math;\n\nconst lch2lab = (...args) => {\n    /*\n    Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel.\n    These formulas were invented by David Dalrymple to obtain maximum contrast without going\n    out of gamut if the parameters are in the range 0-1.\n\n    A saturation multiplier was added by Gregor Aisch\n    */\n    let [l, c, h] = unpack(args, 'lch');\n    if (isNaN(h)) h = 0;\n    h = h * DEG2RAD;\n    return [l, cos(h) * c, sin(h) * c];\n};\n\nexport default lch2lab;\n","import { unpack } from '../../utils/index.js';\nimport lch2lab from './lch2lab.js';\nimport lab2rgb from '../lab/lab2rgb.js';\n\nconst lch2rgb = (...args) => {\n    args = unpack(args, 'lch');\n    const [l, c, h] = args;\n    const [L, a, b_] = lch2lab(l, c, h);\n    const [r, g, b] = lab2rgb(L, a, b_);\n    return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default lch2rgb;\n","import { unpack, RAD2DEG } from '../../utils/index.js';\nconst { sqrt, atan2, round } = Math;\n\nconst lab2lch = (...args) => {\n    const [l, a, b] = unpack(args, 'lab');\n    const c = sqrt(a * a + b * b);\n    let h = (atan2(b, a) * RAD2DEG + 360) % 360;\n    if (round(c * 10000) === 0) h = Number.NaN;\n    return [l, c, h];\n};\n\nexport default lab2lch;\n","import { unpack } from '../../utils/index.js';\nimport rgb2lab from '../lab/rgb2lab.js';\nimport lab2lch from './lab2lch.js';\n\nconst rgb2lch = (...args) => {\n    const [r, g, b] = unpack(args, 'rgb');\n    const [l, a, b_] = rgb2lab(r, g, b);\n    return lab2lch(l, a, b_);\n};\n\nexport default rgb2lch;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport lch2rgb from './lch2rgb.js';\nimport hcl2rgb from './hcl2rgb.js';\nimport rgb2lch from './rgb2lch.js';\n\nColor.prototype.lch = function () {\n    return rgb2lch(this._rgb);\n};\nColor.prototype.hcl = function () {\n    return rgb2lch(this._rgb).reverse();\n};\n\nchroma.lch = (...args) => new Color(...args, 'lch');\nchroma.hcl = (...args) => new Color(...args, 'hcl');\n\ninput.format.lch = lch2rgb;\ninput.format.hcl = hcl2rgb;\n['lch', 'hcl'].forEach((m) =>\n    input.autodetect.push({\n        p: 2,\n        test: (...args) => {\n            args = unpack(args, m);\n            if (type(args) === 'array' && args.length === 3) {\n                return m;\n            }\n        }\n    })\n);\n","import { unpack } from '../../utils/index.js';\nimport lch2rgb from './lch2rgb.js';\n\nconst hcl2rgb = (...args) => {\n    const hcl = unpack(args, 'hcl').reverse();\n    return lch2rgb(...hcl);\n};\n\nexport default hcl2rgb;\n","/**\n\tX11 color names\n\n\thttp://www.w3.org/TR/css3-color/#svg-color\n*/\n\nconst w3cx11 = {\n    aliceblue: '#f0f8ff',\n    antiquewhite: '#faebd7',\n    aqua: '#00ffff',\n    aquamarine: '#7fffd4',\n    azure: '#f0ffff',\n    beige: '#f5f5dc',\n    bisque: '#ffe4c4',\n    black: '#000000',\n    blanchedalmond: '#ffebcd',\n    blue: '#0000ff',\n    blueviolet: '#8a2be2',\n    brown: '#a52a2a',\n    burlywood: '#deb887',\n    cadetblue: '#5f9ea0',\n    chartreuse: '#7fff00',\n    chocolate: '#d2691e',\n    coral: '#ff7f50',\n    cornflowerblue: '#6495ed',\n    cornsilk: '#fff8dc',\n    crimson: '#dc143c',\n    cyan: '#00ffff',\n    darkblue: '#00008b',\n    darkcyan: '#008b8b',\n    darkgoldenrod: '#b8860b',\n    darkgray: '#a9a9a9',\n    darkgreen: '#006400',\n    darkgrey: '#a9a9a9',\n    darkkhaki: '#bdb76b',\n    darkmagenta: '#8b008b',\n    darkolivegreen: '#556b2f',\n    darkorange: '#ff8c00',\n    darkorchid: '#9932cc',\n    darkred: '#8b0000',\n    darksalmon: '#e9967a',\n    darkseagreen: '#8fbc8f',\n    darkslateblue: '#483d8b',\n    darkslategray: '#2f4f4f',\n    darkslategrey: '#2f4f4f',\n    darkturquoise: '#00ced1',\n    darkviolet: '#9400d3',\n    deeppink: '#ff1493',\n    deepskyblue: '#00bfff',\n    dimgray: '#696969',\n    dimgrey: '#696969',\n    dodgerblue: '#1e90ff',\n    firebrick: '#b22222',\n    floralwhite: '#fffaf0',\n    forestgreen: '#228b22',\n    fuchsia: '#ff00ff',\n    gainsboro: '#dcdcdc',\n    ghostwhite: '#f8f8ff',\n    gold: '#ffd700',\n    goldenrod: '#daa520',\n    gray: '#808080',\n    green: '#008000',\n    greenyellow: '#adff2f',\n    grey: '#808080',\n    honeydew: '#f0fff0',\n    hotpink: '#ff69b4',\n    indianred: '#cd5c5c',\n    indigo: '#4b0082',\n    ivory: '#fffff0',\n    khaki: '#f0e68c',\n    laserlemon: '#ffff54',\n    lavender: '#e6e6fa',\n    lavenderblush: '#fff0f5',\n    lawngreen: '#7cfc00',\n    lemonchiffon: '#fffacd',\n    lightblue: '#add8e6',\n    lightcoral: '#f08080',\n    lightcyan: '#e0ffff',\n    lightgoldenrod: '#fafad2',\n    lightgoldenrodyellow: '#fafad2',\n    lightgray: '#d3d3d3',\n    lightgreen: '#90ee90',\n    lightgrey: '#d3d3d3',\n    lightpink: '#ffb6c1',\n    lightsalmon: '#ffa07a',\n    lightseagreen: '#20b2aa',\n    lightskyblue: '#87cefa',\n    lightslategray: '#778899',\n    lightslategrey: '#778899',\n    lightsteelblue: '#b0c4de',\n    lightyellow: '#ffffe0',\n    lime: '#00ff00',\n    limegreen: '#32cd32',\n    linen: '#faf0e6',\n    magenta: '#ff00ff',\n    maroon: '#800000',\n    maroon2: '#7f0000',\n    maroon3: '#b03060',\n    mediumaquamarine: '#66cdaa',\n    mediumblue: '#0000cd',\n    mediumorchid: '#ba55d3',\n    mediumpurple: '#9370db',\n    mediumseagreen: '#3cb371',\n    mediumslateblue: '#7b68ee',\n    mediumspringgreen: '#00fa9a',\n    mediumturquoise: '#48d1cc',\n    mediumvioletred: '#c71585',\n    midnightblue: '#191970',\n    mintcream: '#f5fffa',\n    mistyrose: '#ffe4e1',\n    moccasin: '#ffe4b5',\n    navajowhite: '#ffdead',\n    navy: '#000080',\n    oldlace: '#fdf5e6',\n    olive: '#808000',\n    olivedrab: '#6b8e23',\n    orange: '#ffa500',\n    orangered: '#ff4500',\n    orchid: '#da70d6',\n    palegoldenrod: '#eee8aa',\n    palegreen: '#98fb98',\n    paleturquoise: '#afeeee',\n    palevioletred: '#db7093',\n    papayawhip: '#ffefd5',\n    peachpuff: '#ffdab9',\n    peru: '#cd853f',\n    pink: '#ffc0cb',\n    plum: '#dda0dd',\n    powderblue: '#b0e0e6',\n    purple: '#800080',\n    purple2: '#7f007f',\n    purple3: '#a020f0',\n    rebeccapurple: '#663399',\n    red: '#ff0000',\n    rosybrown: '#bc8f8f',\n    royalblue: '#4169e1',\n    saddlebrown: '#8b4513',\n    salmon: '#fa8072',\n    sandybrown: '#f4a460',\n    seagreen: '#2e8b57',\n    seashell: '#fff5ee',\n    sienna: '#a0522d',\n    silver: '#c0c0c0',\n    skyblue: '#87ceeb',\n    slateblue: '#6a5acd',\n    slategray: '#708090',\n    slategrey: '#708090',\n    snow: '#fffafa',\n    springgreen: '#00ff7f',\n    steelblue: '#4682b4',\n    tan: '#d2b48c',\n    teal: '#008080',\n    thistle: '#d8bfd8',\n    tomato: '#ff6347',\n    turquoise: '#40e0d0',\n    violet: '#ee82ee',\n    wheat: '#f5deb3',\n    white: '#ffffff',\n    whitesmoke: '#f5f5f5',\n    yellow: '#ffff00',\n    yellowgreen: '#9acd32'\n};\n\nexport default w3cx11;\n","import Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\n\nimport w3cx11 from '../../colors/w3cx11.js';\nimport hex2rgb from '../hex/hex2rgb.js';\nimport rgb2hex from '../hex/rgb2hex.js';\n\nColor.prototype.name = function () {\n    const hex = rgb2hex(this._rgb, 'rgb');\n    for (let n of Object.keys(w3cx11)) {\n        if (w3cx11[n] === hex) return n.toLowerCase();\n    }\n    return hex;\n};\n\ninput.format.named = (name) => {\n    name = name.toLowerCase();\n    if (w3cx11[name]) return hex2rgb(w3cx11[name]);\n    throw new Error('unknown color name: ' + name);\n};\n\ninput.autodetect.push({\n    p: 5,\n    test: (h, ...rest) => {\n        if (!rest.length && type(h) === 'string' && w3cx11[h.toLowerCase()]) {\n            return 'named';\n        }\n    }\n});\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\nimport num2rgb from './num2rgb.js';\nimport rgb2num from './rgb2num.js';\n\nColor.prototype.num = function () {\n    return rgb2num(this._rgb);\n};\n\nchroma.num = (...args) => new Color(...args, 'num');\n\ninput.format.num = num2rgb;\n\ninput.autodetect.push({\n    p: 5,\n    test: (...args) => {\n        if (\n            args.length === 1 &&\n            type(args[0]) === 'number' &&\n            args[0] >= 0 &&\n            args[0] <= 0xffffff\n        ) {\n            return 'num';\n        }\n    }\n});\n","import { unpack } from '../../utils/index.js';\n\nconst rgb2num = (...args) => {\n    const [r, g, b] = unpack(args, 'rgb');\n    return (r << 16) + (g << 8) + b;\n};\n\nexport default rgb2num;\n","import { type } from '../../utils/index.js';\n\nconst num2rgb = (num) => {\n    if (type(num) == 'number' && num >= 0 && num <= 0xffffff) {\n        const r = num >> 16;\n        const g = (num >> 8) & 0xff;\n        const b = num & 0xff;\n        return [r, g, b, 1];\n    }\n    throw new Error('unknown num color: ' + num);\n};\n\nexport default num2rgb;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { unpack, type } from '../../utils/index.js';\nconst { round } = Math;\n\nColor.prototype.rgb = function (rnd = true) {\n    if (rnd === false) return this._rgb.slice(0, 3);\n    return this._rgb.slice(0, 3).map(round);\n};\n\nColor.prototype.rgba = function (rnd = true) {\n    return this._rgb.slice(0, 4).map((v, i) => {\n        return i < 3 ? (rnd === false ? v : round(v)) : v;\n    });\n};\n\nchroma.rgb = (...args) => new Color(...args, 'rgb');\n\ninput.format.rgb = (...args) => {\n    const rgba = unpack(args, 'rgba');\n    if (rgba[3] === undefined) rgba[3] = 1;\n    return rgba;\n};\n\ninput.autodetect.push({\n    p: 3,\n    test: (...args) => {\n        args = unpack(args, 'rgba');\n        if (\n            type(args) === 'array' &&\n            (args.length === 3 ||\n                (args.length === 4 &&\n                    type(args[3]) == 'number' &&\n                    args[3] >= 0 &&\n                    args[3] <= 1))\n        ) {\n            return 'rgb';\n        }\n    }\n});\n","/*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n */\n\nconst { log } = Math;\n\nconst temperature2rgb = (kelvin) => {\n    const temp = kelvin / 100;\n    let r, g, b;\n    if (temp < 66) {\n        r = 255;\n        g =\n            temp < 6\n                ? 0\n                : -155.25485562709179 -\n                  0.44596950469579133 * (g = temp - 2) +\n                  104.49216199393888 * log(g);\n        b =\n            temp < 20\n                ? 0\n                : -254.76935184120902 +\n                  0.8274096064007395 * (b = temp - 10) +\n                  115.67994401066147 * log(b);\n    } else {\n        r =\n            351.97690566805693 +\n            0.114206453784165 * (r = temp - 55) -\n            40.25366309332127 * log(r);\n        g =\n            325.4494125711974 +\n            0.07943456536662342 * (g = temp - 50) -\n            28.0852963507957 * log(g);\n        b = 255;\n    }\n    return [r, g, b, 1];\n};\n\nexport default temperature2rgb;\n","/*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n **/\n\nimport temperature2rgb from './temperature2rgb.js';\nimport { unpack } from '../../utils/index.js';\nconst { round } = Math;\n\nconst rgb2temperature = (...args) => {\n    const rgb = unpack(args, 'rgb');\n    const r = rgb[0],\n        b = rgb[2];\n    let minTemp = 1000;\n    let maxTemp = 40000;\n    const eps = 0.4;\n    let temp;\n    while (maxTemp - minTemp > eps) {\n        temp = (maxTemp + minTemp) * 0.5;\n        const rgb = temperature2rgb(temp);\n        if (rgb[2] / rgb[0] >= b / r) {\n            maxTemp = temp;\n        } else {\n            minTemp = temp;\n        }\n    }\n    return round(temp);\n};\n\nexport default rgb2temperature;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport temperature2rgb from './temperature2rgb.js';\nimport rgb2temperature from './rgb2temperature.js';\n\nColor.prototype.temp =\n    Color.prototype.kelvin =\n    Color.prototype.temperature =\n        function () {\n            return rgb2temperature(this._rgb);\n        };\n\nchroma.temp =\n    chroma.kelvin =\n    chroma.temperature =\n        (...args) => new Color(...args, 'temp');\n\ninput.format.temp =\n    input.format.kelvin =\n    input.format.temperature =\n        temperature2rgb;\n","import { unpack } from '../../utils/index.js';\nconst { pow, sign } = Math;\n\n/*\n * L* [0..100]\n * a [-100..100]\n * b [-100..100]\n */\nconst oklab2rgb = (...args) => {\n    args = unpack(args, 'lab');\n    const [L, a, b] = args;\n\n    const l = pow(L + 0.3963377774 * a + 0.2158037573 * b, 3);\n    const m = pow(L - 0.1055613458 * a - 0.0638541728 * b, 3);\n    const s = pow(L - 0.0894841775 * a - 1.291485548 * b, 3);\n\n    return [\n        255 * lrgb2rgb(+4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s),\n        255 * lrgb2rgb(-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s),\n        255 * lrgb2rgb(-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s),\n        args.length > 3 ? args[3] : 1\n    ];\n};\n\nexport default oklab2rgb;\n\nfunction lrgb2rgb(c) {\n    const abs = Math.abs(c);\n    if (abs > 0.0031308) {\n        return (sign(c) || 1) * (1.055 * pow(abs, 1 / 2.4) - 0.055);\n    }\n    return c * 12.92;\n}\n","import { unpack } from '../../utils/index.js';\nconst { cbrt, pow, sign } = Math;\n\nconst rgb2oklab = (...args) => {\n    // OKLab color space implementation taken from\n    // https://bottosson.github.io/posts/oklab/\n    const [r, g, b] = unpack(args, 'rgb');\n    const [lr, lg, lb] = [\n        rgb2lrgb(r / 255),\n        rgb2lrgb(g / 255),\n        rgb2lrgb(b / 255)\n    ];\n    const l = cbrt(0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb);\n    const m = cbrt(0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb);\n    const s = cbrt(0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb);\n\n    return [\n        0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\n        1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\n        0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n    ];\n};\n\nexport default rgb2oklab;\n\nfunction rgb2lrgb(c) {\n    const abs = Math.abs(c);\n    if (abs < 0.04045) {\n        return c / 12.92;\n    }\n    return (sign(c) || 1) * pow((abs + 0.055) / 1.055, 2.4);\n}\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport oklab2rgb from './oklab2rgb.js';\nimport rgb2oklab from './rgb2oklab.js';\n\nColor.prototype.oklab = function () {\n    return rgb2oklab(this._rgb);\n};\n\nchroma.oklab = (...args) => new Color(...args, 'oklab');\n\ninput.format.oklab = oklab2rgb;\n\ninput.autodetect.push({\n    p: 3,\n    test: (...args) => {\n        args = unpack(args, 'oklab');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'oklab';\n        }\n    }\n});\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport oklch2rgb from './oklch2rgb.js';\nimport rgb2oklch from './rgb2oklch.js';\n\nColor.prototype.oklch = function () {\n    return rgb2oklch(this._rgb);\n};\n\nchroma.oklch = (...args) => new Color(...args, 'oklch');\n\ninput.format.oklch = oklch2rgb;\n\ninput.autodetect.push({\n    p: 3,\n    test: (...args) => {\n        args = unpack(args, 'oklch');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'oklch';\n        }\n    }\n});\n","import { unpack } from '../../utils/index.js';\nimport rgb2oklab from '../oklab/rgb2oklab.js';\nimport lab2lch from '../lch/lab2lch.js';\n\nconst rgb2oklch = (...args) => {\n    const [r, g, b] = unpack(args, 'rgb');\n    const [l, a, b_] = rgb2oklab(r, g, b);\n    return lab2lch(l, a, b_);\n};\n\nexport default rgb2oklch;\n","import { unpack } from '../../utils/index.js';\nimport lch2lab from '../lch/lch2lab.js';\nimport oklab2rgb from '../oklab/oklab2rgb.js';\n\nconst oklch2rgb = (...args) => {\n    args = unpack(args, 'lch');\n    const [l, c, h] = args;\n    const [L, a, b_] = lch2lab(l, c, h);\n    const [r, g, b] = oklab2rgb(L, a, b_);\n    return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default oklch2rgb;\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\n\nColor.prototype.alpha = function (a, mutate = false) {\n    if (a !== undefined && type(a) === 'number') {\n        if (mutate) {\n            this._rgb[3] = a;\n            return this;\n        }\n        return new Color([this._rgb[0], this._rgb[1], this._rgb[2], a], 'rgb');\n    }\n    return this._rgb[3];\n};\n","import Color from '../Color.js';\n\nColor.prototype.clipped = function () {\n    return this._rgb._clipped || false;\n};\n","import '../io/lab/index.js';\nimport Color from '../Color.js';\nimport LAB_CONSTANTS from '../io/lab/lab-constants.js';\n\nColor.prototype.darken = function (amount = 1) {\n    const me = this;\n    const lab = me.lab();\n    lab[0] -= LAB_CONSTANTS.Kn * amount;\n    return new Color(lab, 'lab').alpha(me.alpha(), true);\n};\n\nColor.prototype.brighten = function (amount = 1) {\n    return this.darken(-amount);\n};\n\nColor.prototype.darker = Color.prototype.darken;\nColor.prototype.brighter = Color.prototype.brighten;\n","import Color from '../Color.js';\n\nColor.prototype.get = function (mc) {\n    const [mode, channel] = mc.split('.');\n    const src = this[mode]();\n    if (channel) {\n        const i = mode.indexOf(channel) - (mode.substr(0, 2) === 'ok' ? 2 : 0);\n        if (i > -1) return src[i];\n        throw new Error(`unknown channel ${channel} in mode ${mode}`);\n    } else {\n        return src;\n    }\n};\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\nconst { pow } = Math;\n\nconst EPS = 1e-7;\nconst MAX_ITER = 20;\n\nColor.prototype.luminance = function (lum, mode = 'rgb') {\n    if (lum !== undefined && type(lum) === 'number') {\n        if (lum === 0) {\n            // return pure black\n            return new Color([0, 0, 0, this._rgb[3]], 'rgb');\n        }\n        if (lum === 1) {\n            // return pure white\n            return new Color([255, 255, 255, this._rgb[3]], 'rgb');\n        }\n        // compute new color using...\n        let cur_lum = this.luminance();\n        let max_iter = MAX_ITER;\n\n        const test = (low, high) => {\n            const mid = low.interpolate(high, 0.5, mode);\n            const lm = mid.luminance();\n            if (Math.abs(lum - lm) < EPS || !max_iter--) {\n                // close enough\n                return mid;\n            }\n            return lm > lum ? test(low, mid) : test(mid, high);\n        };\n\n        const rgb = (\n            cur_lum > lum\n                ? test(new Color([0, 0, 0]), this)\n                : test(this, new Color([255, 255, 255]))\n        ).rgb();\n        return new Color([...rgb, this._rgb[3]]);\n    }\n    return rgb2luminance(...this._rgb.slice(0, 3));\n};\n\nconst rgb2luminance = (r, g, b) => {\n    // relative luminance\n    // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n    r = luminance_x(r);\n    g = luminance_x(g);\n    b = luminance_x(b);\n    return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n};\n\nconst luminance_x = (x) => {\n    x /= 255;\n    return x <= 0.03928 ? x / 12.92 : pow((x + 0.055) / 1.055, 2.4);\n};\n","export default {};\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\nimport interpolator from '../interpolator/index.js';\n\nexport default (col1, col2, f = 0.5, ...rest) => {\n    let mode = rest[0] || 'lrgb';\n    if (!interpolator[mode] && !rest.length) {\n        // fall back to the first supported mode\n        mode = Object.keys(interpolator)[0];\n    }\n    if (!interpolator[mode]) {\n        throw new Error(`interpolation mode ${mode} is not defined`);\n    }\n    if (type(col1) !== 'object') col1 = new Color(col1);\n    if (type(col2) !== 'object') col2 = new Color(col2);\n    return interpolator[mode](col1, col2, f).alpha(\n        col1.alpha() + f * (col2.alpha() - col1.alpha())\n    );\n};\n","import Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\nColor.prototype.mix = Color.prototype.interpolate = function (\n    col2,\n    f = 0.5,\n    ...rest\n) {\n    return mix(this, col2, f, ...rest);\n};\n","import Color from '../Color.js';\n\nColor.prototype.premultiply = function (mutate = false) {\n    const rgb = this._rgb;\n    const a = rgb[3];\n    if (mutate) {\n        this._rgb = [rgb[0] * a, rgb[1] * a, rgb[2] * a, a];\n        return this;\n    } else {\n        return new Color([rgb[0] * a, rgb[1] * a, rgb[2] * a, a], 'rgb');\n    }\n};\n","import '../io/lch/index.js';\nimport Color from '../Color.js';\nimport LAB_CONSTANTS from '../io/lab/lab-constants.js';\n\nColor.prototype.saturate = function (amount = 1) {\n    const me = this;\n    const lch = me.lch();\n    lch[1] += LAB_CONSTANTS.Kn * amount;\n    if (lch[1] < 0) lch[1] = 0;\n    return new Color(lch, 'lch').alpha(me.alpha(), true);\n};\n\nColor.prototype.desaturate = function (amount = 1) {\n    return this.saturate(-amount);\n};\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\n\nColor.prototype.set = function (mc, value, mutate = false) {\n    const [mode, channel] = mc.split('.');\n    const src = this[mode]();\n    if (channel) {\n        const i = mode.indexOf(channel) - (mode.substr(0, 2) === 'ok' ? 2 : 0);\n        if (i > -1) {\n            if (type(value) == 'string') {\n                switch (value.charAt(0)) {\n                    case '+':\n                        src[i] += +value;\n                        break;\n                    case '-':\n                        src[i] += +value;\n                        break;\n                    case '*':\n                        src[i] *= +value.substr(1);\n                        break;\n                    case '/':\n                        src[i] /= +value.substr(1);\n                        break;\n                    default:\n                        src[i] = +value;\n                }\n            } else if (type(value) === 'number') {\n                src[i] = value;\n            } else {\n                throw new Error(`unsupported value for Color.set`);\n            }\n            const out = new Color(src, mode);\n            if (mutate) {\n                this._rgb = out._rgb;\n                return this;\n            }\n            return out;\n        }\n        throw new Error(`unknown channel ${channel} in mode ${mode}`);\n    } else {\n        return src;\n    }\n};\n","import '../io/lab/index.js';\nimport Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\nColor.prototype.tint = function (f = 0.5, ...rest) {\n    return mix(this, 'white', f, ...rest);\n};\n\nColor.prototype.shade = function (f = 0.5, ...rest) {\n    return mix(this, 'black', f, ...rest);\n};\n","import Color from '../Color.js';\nimport index from './index.js';\n\nconst rgb = (col1, col2, f) => {\n    const xyz0 = col1._rgb;\n    const xyz1 = col2._rgb;\n    return new Color(\n        xyz0[0] + f * (xyz1[0] - xyz0[0]),\n        xyz0[1] + f * (xyz1[1] - xyz0[1]),\n        xyz0[2] + f * (xyz1[2] - xyz0[2]),\n        'rgb'\n    );\n};\n\n// register interpolator\nindex.rgb = rgb;\n\nexport default rgb;\n","import Color from '../Color.js';\nconst { sqrt, pow } = Math;\nimport index from './index.js';\n\nconst lrgb = (col1, col2, f) => {\n    const [x1, y1, z1] = col1._rgb;\n    const [x2, y2, z2] = col2._rgb;\n    return new Color(\n        sqrt(pow(x1, 2) * (1 - f) + pow(x2, 2) * f),\n        sqrt(pow(y1, 2) * (1 - f) + pow(y2, 2) * f),\n        sqrt(pow(z1, 2) * (1 - f) + pow(z2, 2) * f),\n        'rgb'\n    );\n};\n\n// register interpolator\nindex.lrgb = lrgb;\n\nexport default lrgb;\n","import '../io/lab/index.js';\nimport index from './index.js';\nimport Color from '../Color.js';\n\nconst lab = (col1, col2, f) => {\n    const xyz0 = col1.lab();\n    const xyz1 = col2.lab();\n    return new Color(\n        xyz0[0] + f * (xyz1[0] - xyz0[0]),\n        xyz0[1] + f * (xyz1[1] - xyz0[1]),\n        xyz0[2] + f * (xyz1[2] - xyz0[2]),\n        'lab'\n    );\n};\n\n// register interpolator\nindex.lab = lab;\n\nexport default lab;\n","import Color from '../Color.js';\n\nexport default (col1, col2, f, m) => {\n    let xyz0, xyz1;\n    if (m === 'hsl') {\n        xyz0 = col1.hsl();\n        xyz1 = col2.hsl();\n    } else if (m === 'hsv') {\n        xyz0 = col1.hsv();\n        xyz1 = col2.hsv();\n    } else if (m === 'hcg') {\n        xyz0 = col1.hcg();\n        xyz1 = col2.hcg();\n    } else if (m === 'hsi') {\n        xyz0 = col1.hsi();\n        xyz1 = col2.hsi();\n    } else if (m === 'lch' || m === 'hcl') {\n        m = 'hcl';\n        xyz0 = col1.hcl();\n        xyz1 = col2.hcl();\n    } else if (m === 'oklch') {\n        xyz0 = col1.oklch().reverse();\n        xyz1 = col2.oklch().reverse();\n    }\n\n    let hue0, hue1, sat0, sat1, lbv0, lbv1;\n    if (m.substr(0, 1) === 'h' || m === 'oklch') {\n        [hue0, sat0, lbv0] = xyz0;\n        [hue1, sat1, lbv1] = xyz1;\n    }\n\n    let sat, hue, lbv, dh;\n\n    if (!isNaN(hue0) && !isNaN(hue1)) {\n        // both colors have hue\n        if (hue1 > hue0 && hue1 - hue0 > 180) {\n            dh = hue1 - (hue0 + 360);\n        } else if (hue1 < hue0 && hue0 - hue1 > 180) {\n            dh = hue1 + 360 - hue0;\n        } else {\n            dh = hue1 - hue0;\n        }\n        hue = hue0 + f * dh;\n    } else if (!isNaN(hue0)) {\n        hue = hue0;\n        if ((lbv1 == 1 || lbv1 == 0) && m != 'hsv') sat = sat0;\n    } else if (!isNaN(hue1)) {\n        hue = hue1;\n        if ((lbv0 == 1 || lbv0 == 0) && m != 'hsv') sat = sat1;\n    } else {\n        hue = Number.NaN;\n    }\n\n    if (sat === undefined) sat = sat0 + f * (sat1 - sat0);\n    lbv = lbv0 + f * (lbv1 - lbv0);\n    return m === 'oklch'\n        ? new Color([lbv, sat, hue], m)\n        : new Color([hue, sat, lbv], m);\n};\n","import '../io/lch/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst lch = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'lch');\n};\n\n// register interpolator\nindex.lch = lch;\nindex.hcl = lch;\n\nexport default lch;\n","import '../io/num/index.js';\nimport index from './index.js';\n\nimport Color from '../Color.js';\n\nconst num = (col1, col2, f) => {\n    const c1 = col1.num();\n    const c2 = col2.num();\n    return new Color(c1 + f * (c2 - c1), 'num');\n};\n\n// register interpolator\nindex.num = num;\n\nexport default num;\n","import '../io/hcg/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hcg = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'hcg');\n};\n\n// register interpolator\nindex.hcg = hcg;\n\nexport default hcg;\n","import '../io/hsi/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsi = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'hsi');\n};\n\n// register interpolator\nindex.hsi = hsi;\n\nexport default hsi;\n","import '../io/hsl/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsl = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'hsl');\n};\n\n// register interpolator\nindex.hsl = hsl;\n\nexport default hsl;\n","import '../io/hsv/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsv = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'hsv');\n};\n\n// register interpolator\nindex.hsv = hsv;\n\nexport default hsv;\n","import '../io/oklab/index.js';\nimport index from './index.js';\nimport Color from '../Color.js';\n\nconst oklab = (col1, col2, f) => {\n    const xyz0 = col1.oklab();\n    const xyz1 = col2.oklab();\n    return new Color(\n        xyz0[0] + f * (xyz1[0] - xyz0[0]),\n        xyz0[1] + f * (xyz1[1] - xyz0[1]),\n        xyz0[2] + f * (xyz1[2] - xyz0[2]),\n        'oklab'\n    );\n};\n\n// register interpolator\nindex.oklab = oklab;\n\nexport default oklab;\n","import '../io/lch/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst oklch = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'oklch');\n};\n\n// register interpolator\nindex.oklch = oklch;\n\nexport default oklch;\n","import Color from '../Color.js';\nimport { clip_rgb } from '../utils/index.js';\n\nconst { pow, sqrt, PI, cos, sin, atan2 } = Math;\n\nexport default (colors, mode = 'lrgb', weights = null) => {\n    const l = colors.length;\n    if (!weights) weights = Array.from(new Array(l)).map(() => 1);\n    // normalize weights\n    const k =\n        l /\n        weights.reduce(function (a, b) {\n            return a + b;\n        });\n    weights.forEach((w, i) => {\n        weights[i] *= k;\n    });\n    // convert colors to Color objects\n    colors = colors.map((c) => new Color(c));\n    if (mode === 'lrgb') {\n        return _average_lrgb(colors, weights);\n    }\n    const first = colors.shift();\n    const xyz = first.get(mode);\n    const cnt = [];\n    let dx = 0;\n    let dy = 0;\n    // initial color\n    for (let i = 0; i < xyz.length; i++) {\n        xyz[i] = (xyz[i] || 0) * weights[0];\n        cnt.push(isNaN(xyz[i]) ? 0 : weights[0]);\n        if (mode.charAt(i) === 'h' && !isNaN(xyz[i])) {\n            const A = (xyz[i] / 180) * PI;\n            dx += cos(A) * weights[0];\n            dy += sin(A) * weights[0];\n        }\n    }\n\n    let alpha = first.alpha() * weights[0];\n    colors.forEach((c, ci) => {\n        const xyz2 = c.get(mode);\n        alpha += c.alpha() * weights[ci + 1];\n        for (let i = 0; i < xyz.length; i++) {\n            if (!isNaN(xyz2[i])) {\n                cnt[i] += weights[ci + 1];\n                if (mode.charAt(i) === 'h') {\n                    const A = (xyz2[i] / 180) * PI;\n                    dx += cos(A) * weights[ci + 1];\n                    dy += sin(A) * weights[ci + 1];\n                } else {\n                    xyz[i] += xyz2[i] * weights[ci + 1];\n                }\n            }\n        }\n    });\n\n    for (let i = 0; i < xyz.length; i++) {\n        if (mode.charAt(i) === 'h') {\n            let A = (atan2(dy / cnt[i], dx / cnt[i]) / PI) * 180;\n            while (A < 0) A += 360;\n            while (A >= 360) A -= 360;\n            xyz[i] = A;\n        } else {\n            xyz[i] = xyz[i] / cnt[i];\n        }\n    }\n    alpha /= l;\n    return new Color(xyz, mode).alpha(alpha > 0.99999 ? 1 : alpha, true);\n};\n\nconst _average_lrgb = (colors, weights) => {\n    const l = colors.length;\n    const xyz = [0, 0, 0, 0];\n    for (let i = 0; i < colors.length; i++) {\n        const col = colors[i];\n        const f = weights[i] / l;\n        const rgb = col._rgb;\n        xyz[0] += pow(rgb[0], 2) * f;\n        xyz[1] += pow(rgb[1], 2) * f;\n        xyz[2] += pow(rgb[2], 2) * f;\n        xyz[3] += rgb[3] * f;\n    }\n    xyz[0] = sqrt(xyz[0]);\n    xyz[1] = sqrt(xyz[1]);\n    xyz[2] = sqrt(xyz[2]);\n    if (xyz[3] > 0.9999999) xyz[3] = 1;\n    return new Color(clip_rgb(xyz));\n};\n","// minimal multi-purpose interface\n\n// @requires utils color analyze\nimport chroma from '../chroma.js';\nimport { limit, type } from '../utils/index.js';\n\nconst { pow } = Math;\n\nexport default function (colors) {\n    // constructor\n    let _mode = 'rgb';\n    let _nacol = chroma('#ccc');\n    let _spread = 0;\n    // const _fixed = false;\n    let _domain = [0, 1];\n    let _pos = [];\n    let _padding = [0, 0];\n    let _classes = false;\n    let _colors = [];\n    let _out = false;\n    let _min = 0;\n    let _max = 1;\n    let _correctLightness = false;\n    let _colorCache = {};\n    let _useCache = true;\n    let _gamma = 1;\n\n    // private methods\n\n    const setColors = function (colors) {\n        colors = colors || ['#fff', '#000'];\n        if (\n            colors &&\n            type(colors) === 'string' &&\n            chroma.brewer &&\n            chroma.brewer[colors.toLowerCase()]\n        ) {\n            colors = chroma.brewer[colors.toLowerCase()];\n        }\n        if (type(colors) === 'array') {\n            // handle single color\n            if (colors.length === 1) {\n                colors = [colors[0], colors[0]];\n            }\n            // make a copy of the colors\n            colors = colors.slice(0);\n            // convert to chroma classes\n            for (let c = 0; c < colors.length; c++) {\n                colors[c] = chroma(colors[c]);\n            }\n            // auto-fill color position\n            _pos.length = 0;\n            for (let c = 0; c < colors.length; c++) {\n                _pos.push(c / (colors.length - 1));\n            }\n        }\n        resetCache();\n        return (_colors = colors);\n    };\n\n    const getClass = function (value) {\n        if (_classes != null) {\n            const n = _classes.length - 1;\n            let i = 0;\n            while (i < n && value >= _classes[i]) {\n                i++;\n            }\n            return i - 1;\n        }\n        return 0;\n    };\n\n    let tMapLightness = (t) => t;\n    let tMapDomain = (t) => t;\n\n    // const classifyValue = function(value) {\n    //     let val = value;\n    //     if (_classes.length > 2) {\n    //         const n = _classes.length-1;\n    //         const i = getClass(value);\n    //         const minc = _classes[0] + ((_classes[1]-_classes[0]) * (0 + (_spread * 0.5)));  // center of 1st class\n    //         const maxc = _classes[n-1] + ((_classes[n]-_classes[n-1]) * (1 - (_spread * 0.5)));  // center of last class\n    //         val = _min + ((((_classes[i] + ((_classes[i+1] - _classes[i]) * 0.5)) - minc) / (maxc-minc)) * (_max - _min));\n    //     }\n    //     return val;\n    // };\n\n    const getColor = function (val, bypassMap) {\n        let col, t;\n        if (bypassMap == null) {\n            bypassMap = false;\n        }\n        if (isNaN(val) || val === null) {\n            return _nacol;\n        }\n        if (!bypassMap) {\n            if (_classes && _classes.length > 2) {\n                // find the class\n                const c = getClass(val);\n                t = c / (_classes.length - 2);\n            } else if (_max !== _min) {\n                // just interpolate between min/max\n                t = (val - _min) / (_max - _min);\n            } else {\n                t = 1;\n            }\n        } else {\n            t = val;\n        }\n\n        // domain map\n        t = tMapDomain(t);\n\n        if (!bypassMap) {\n            t = tMapLightness(t); // lightness correction\n        }\n\n        if (_gamma !== 1) {\n            t = pow(t, _gamma);\n        }\n\n        t = _padding[0] + t * (1 - _padding[0] - _padding[1]);\n\n        t = limit(t, 0, 1);\n\n        const k = Math.floor(t * 10000);\n\n        if (_useCache && _colorCache[k]) {\n            col = _colorCache[k];\n        } else {\n            if (type(_colors) === 'array') {\n                //for i in [0.._pos.length-1]\n                for (let i = 0; i < _pos.length; i++) {\n                    const p = _pos[i];\n                    if (t <= p) {\n                        col = _colors[i];\n                        break;\n                    }\n                    if (t >= p && i === _pos.length - 1) {\n                        col = _colors[i];\n                        break;\n                    }\n                    if (t > p && t < _pos[i + 1]) {\n                        t = (t - p) / (_pos[i + 1] - p);\n                        col = chroma.interpolate(\n                            _colors[i],\n                            _colors[i + 1],\n                            t,\n                            _mode\n                        );\n                        break;\n                    }\n                }\n            } else if (type(_colors) === 'function') {\n                col = _colors(t);\n            }\n            if (_useCache) {\n                _colorCache[k] = col;\n            }\n        }\n        return col;\n    };\n\n    var resetCache = () => (_colorCache = {});\n\n    setColors(colors);\n\n    // public interface\n\n    const f = function (v) {\n        const c = chroma(getColor(v));\n        if (_out && c[_out]) {\n            return c[_out]();\n        } else {\n            return c;\n        }\n    };\n\n    f.classes = function (classes) {\n        if (classes != null) {\n            if (type(classes) === 'array') {\n                _classes = classes;\n                _domain = [classes[0], classes[classes.length - 1]];\n            } else {\n                const d = chroma.analyze(_domain);\n                if (classes === 0) {\n                    _classes = [d.min, d.max];\n                } else {\n                    _classes = chroma.limits(d, 'e', classes);\n                }\n            }\n            return f;\n        }\n        return _classes;\n    };\n\n    f.domain = function (domain) {\n        if (!arguments.length) {\n            return _domain;\n        }\n        _min = domain[0];\n        _max = domain[domain.length - 1];\n        _pos = [];\n        const k = _colors.length;\n        if (domain.length === k && _min !== _max) {\n            // update positions\n            for (let d of Array.from(domain)) {\n                _pos.push((d - _min) / (_max - _min));\n            }\n        } else {\n            for (let c = 0; c < k; c++) {\n                _pos.push(c / (k - 1));\n            }\n            if (domain.length > 2) {\n                // set domain map\n                const tOut = domain.map((d, i) => i / (domain.length - 1));\n                const tBreaks = domain.map((d) => (d - _min) / (_max - _min));\n                if (!tBreaks.every((val, i) => tOut[i] === val)) {\n                    tMapDomain = (t) => {\n                        if (t <= 0 || t >= 1) return t;\n                        let i = 0;\n                        while (t >= tBreaks[i + 1]) i++;\n                        const f =\n                            (t - tBreaks[i]) / (tBreaks[i + 1] - tBreaks[i]);\n                        const out = tOut[i] + f * (tOut[i + 1] - tOut[i]);\n                        return out;\n                    };\n                }\n            }\n        }\n        _domain = [_min, _max];\n        return f;\n    };\n\n    f.mode = function (_m) {\n        if (!arguments.length) {\n            return _mode;\n        }\n        _mode = _m;\n        resetCache();\n        return f;\n    };\n\n    f.range = function (colors, _pos) {\n        setColors(colors, _pos);\n        return f;\n    };\n\n    f.out = function (_o) {\n        _out = _o;\n        return f;\n    };\n\n    f.spread = function (val) {\n        if (!arguments.length) {\n            return _spread;\n        }\n        _spread = val;\n        return f;\n    };\n\n    f.correctLightness = function (v) {\n        if (v == null) {\n            v = true;\n        }\n        _correctLightness = v;\n        resetCache();\n        if (_correctLightness) {\n            tMapLightness = function (t) {\n                const L0 = getColor(0, true).lab()[0];\n                const L1 = getColor(1, true).lab()[0];\n                const pol = L0 > L1;\n                let L_actual = getColor(t, true).lab()[0];\n                const L_ideal = L0 + (L1 - L0) * t;\n                let L_diff = L_actual - L_ideal;\n                let t0 = 0;\n                let t1 = 1;\n                let max_iter = 20;\n                while (Math.abs(L_diff) > 1e-2 && max_iter-- > 0) {\n                    (function () {\n                        if (pol) {\n                            L_diff *= -1;\n                        }\n                        if (L_diff < 0) {\n                            t0 = t;\n                            t += (t1 - t) * 0.5;\n                        } else {\n                            t1 = t;\n                            t += (t0 - t) * 0.5;\n                        }\n                        L_actual = getColor(t, true).lab()[0];\n                        return (L_diff = L_actual - L_ideal);\n                    })();\n                }\n                return t;\n            };\n        } else {\n            tMapLightness = (t) => t;\n        }\n        return f;\n    };\n\n    f.padding = function (p) {\n        if (p != null) {\n            if (type(p) === 'number') {\n                p = [p, p];\n            }\n            _padding = p;\n            return f;\n        } else {\n            return _padding;\n        }\n    };\n\n    f.colors = function (numColors, out) {\n        // If no arguments are given, return the original colors that were provided\n        if (arguments.length < 2) {\n            out = 'hex';\n        }\n        let result = [];\n\n        if (arguments.length === 0) {\n            result = _colors.slice(0);\n        } else if (numColors === 1) {\n            result = [f(0.5)];\n        } else if (numColors > 1) {\n            const dm = _domain[0];\n            const dd = _domain[1] - dm;\n            result = __range__(0, numColors, false).map((i) =>\n                f(dm + (i / (numColors - 1)) * dd)\n            );\n        } else {\n            // returns all colors based on the defined classes\n            colors = [];\n            let samples = [];\n            if (_classes && _classes.length > 2) {\n                for (\n                    let i = 1, end = _classes.length, asc = 1 <= end;\n                    asc ? i < end : i > end;\n                    asc ? i++ : i--\n                ) {\n                    samples.push((_classes[i - 1] + _classes[i]) * 0.5);\n                }\n            } else {\n                samples = _domain;\n            }\n            result = samples.map((v) => f(v));\n        }\n\n        if (chroma[out]) {\n            result = result.map((c) => c[out]());\n        }\n        return result;\n    };\n\n    f.cache = function (c) {\n        if (c != null) {\n            _useCache = c;\n            return f;\n        } else {\n            return _useCache;\n        }\n    };\n\n    f.gamma = function (g) {\n        if (g != null) {\n            _gamma = g;\n            return f;\n        } else {\n            return _gamma;\n        }\n    };\n\n    f.nodata = function (d) {\n        if (d != null) {\n            _nacol = chroma(d);\n            return f;\n        } else {\n            return _nacol;\n        }\n    };\n\n    return f;\n}\n\nfunction __range__(left, right, inclusive) {\n    let range = [];\n    let ascending = left < right;\n    let end = !inclusive ? right : ascending ? right + 1 : right - 1;\n    for (let i = left; ascending ? i < end : i > end; ascending ? i++ : i--) {\n        range.push(i);\n    }\n    return range;\n}\n","//\n// interpolates between a set of colors uzing a bezier spline\n//\n\n// @requires utils lab\nimport Color from '../Color.js';\nimport '../io/lab/index.js';\nimport scale from './scale.js';\n\n// nth row of the pascal triangle\nconst binom_row = function (n) {\n    let row = [1, 1];\n    for (let i = 1; i < n; i++) {\n        let newrow = [1];\n        for (let j = 1; j <= row.length; j++) {\n            newrow[j] = (row[j] || 0) + row[j - 1];\n        }\n        row = newrow;\n    }\n    return row;\n};\n\nconst bezier = function (colors) {\n    let I, lab0, lab1, lab2;\n    colors = colors.map((c) => new Color(c));\n    if (colors.length === 2) {\n        // linear interpolation\n        [lab0, lab1] = colors.map((c) => c.lab());\n        I = function (t) {\n            const lab = [0, 1, 2].map((i) => lab0[i] + t * (lab1[i] - lab0[i]));\n            return new Color(lab, 'lab');\n        };\n    } else if (colors.length === 3) {\n        // quadratic bezier interpolation\n        [lab0, lab1, lab2] = colors.map((c) => c.lab());\n        I = function (t) {\n            const lab = [0, 1, 2].map(\n                (i) =>\n                    (1 - t) * (1 - t) * lab0[i] +\n                    2 * (1 - t) * t * lab1[i] +\n                    t * t * lab2[i]\n            );\n            return new Color(lab, 'lab');\n        };\n    } else if (colors.length === 4) {\n        // cubic bezier interpolation\n        let lab3;\n        [lab0, lab1, lab2, lab3] = colors.map((c) => c.lab());\n        I = function (t) {\n            const lab = [0, 1, 2].map(\n                (i) =>\n                    (1 - t) * (1 - t) * (1 - t) * lab0[i] +\n                    3 * (1 - t) * (1 - t) * t * lab1[i] +\n                    3 * (1 - t) * t * t * lab2[i] +\n                    t * t * t * lab3[i]\n            );\n            return new Color(lab, 'lab');\n        };\n    } else if (colors.length >= 5) {\n        // general case (degree n bezier)\n        let labs, row, n;\n        labs = colors.map((c) => c.lab());\n        n = colors.length - 1;\n        row = binom_row(n);\n        I = function (t) {\n            const u = 1 - t;\n            const lab = [0, 1, 2].map((i) =>\n                labs.reduce(\n                    (sum, el, j) =>\n                        sum + row[j] * u ** (n - j) * t ** j * el[i],\n                    0\n                )\n            );\n            return new Color(lab, 'lab');\n        };\n    } else {\n        throw new RangeError('No point in running bezier with only one color.');\n    }\n    return I;\n};\n\nexport default (colors) => {\n    const f = bezier(colors);\n    f.scale = () => scale(f);\n    return f;\n};\n","/*\n * interpolates between a set of colors uzing a bezier spline\n * blend mode formulas taken from https://web.archive.org/web/20180110014946/http://www.venture-ware.com/kevin/coding/lets-learn-math-photoshop-blend-modes/\n */\n\nimport '../io/rgb/index.js';\nimport chroma from '../chroma.js';\n\nconst blend = (bottom, top, mode) => {\n    if (!blend[mode]) {\n        throw new Error('unknown blend mode ' + mode);\n    }\n    return blend[mode](bottom, top);\n};\n\nconst blend_f = (f) => (bottom, top) => {\n    const c0 = chroma(top).rgb();\n    const c1 = chroma(bottom).rgb();\n    return chroma.rgb(f(c0, c1));\n};\n\nconst each = (f) => (c0, c1) => {\n    const out = [];\n    out[0] = f(c0[0], c1[0]);\n    out[1] = f(c0[1], c1[1]);\n    out[2] = f(c0[2], c1[2]);\n    return out;\n};\n\nconst normal = (a) => a;\nconst multiply = (a, b) => (a * b) / 255;\nconst darken = (a, b) => (a > b ? b : a);\nconst lighten = (a, b) => (a > b ? a : b);\nconst screen = (a, b) => 255 * (1 - (1 - a / 255) * (1 - b / 255));\nconst overlay = (a, b) =>\n    b < 128 ? (2 * a * b) / 255 : 255 * (1 - 2 * (1 - a / 255) * (1 - b / 255));\nconst burn = (a, b) => 255 * (1 - (1 - b / 255) / (a / 255));\nconst dodge = (a, b) => {\n    if (a === 255) return 255;\n    a = (255 * (b / 255)) / (1 - a / 255);\n    return a > 255 ? 255 : a;\n};\n\n// # add = (a,b) ->\n// #     if (a + b > 255) then 255 else a + b\n\nblend.normal = blend_f(each(normal));\nblend.multiply = blend_f(each(multiply));\nblend.screen = blend_f(each(screen));\nblend.overlay = blend_f(each(overlay));\nblend.darken = blend_f(each(darken));\nblend.lighten = blend_f(each(lighten));\nblend.dodge = blend_f(each(dodge));\nblend.burn = blend_f(each(burn));\n// blend.add = blend_f(each(add));\n\nexport default blend;\n","// cubehelix interpolation\n// based on D.A. Green \"A colour scheme for the display of astronomical intensity images\"\n// http://astron-soc.in/bulletin/11June/289392011.pdf\nimport { type, clip_rgb, TWOPI } from '../utils/index.js';\nimport chroma from '../chroma.js';\nconst { pow, sin, cos } = Math;\n\nexport default function (\n    start = 300,\n    rotations = -1.5,\n    hue = 1,\n    gamma = 1,\n    lightness = [0, 1]\n) {\n    let dh = 0,\n        dl;\n    if (type(lightness) === 'array') {\n        dl = lightness[1] - lightness[0];\n    } else {\n        dl = 0;\n        lightness = [lightness, lightness];\n    }\n    const f = function (fract) {\n        const a = TWOPI * ((start + 120) / 360 + rotations * fract);\n        const l = pow(lightness[0] + dl * fract, gamma);\n        const h = dh !== 0 ? hue[0] + fract * dh : hue;\n        const amp = (h * l * (1 - l)) / 2;\n        const cos_a = cos(a);\n        const sin_a = sin(a);\n        const r = l + amp * (-0.14861 * cos_a + 1.78277 * sin_a);\n        const g = l + amp * (-0.29227 * cos_a - 0.90649 * sin_a);\n        const b = l + amp * (+1.97294 * cos_a);\n        return chroma(clip_rgb([r * 255, g * 255, b * 255, 1]));\n    };\n    f.start = function (s) {\n        if (s == null) {\n            return start;\n        }\n        start = s;\n        return f;\n    };\n    f.rotations = function (r) {\n        if (r == null) {\n            return rotations;\n        }\n        rotations = r;\n        return f;\n    };\n    f.gamma = function (g) {\n        if (g == null) {\n            return gamma;\n        }\n        gamma = g;\n        return f;\n    };\n    f.hue = function (h) {\n        if (h == null) {\n            return hue;\n        }\n        hue = h;\n        if (type(hue) === 'array') {\n            dh = hue[1] - hue[0];\n            if (dh === 0) {\n                hue = hue[1];\n            }\n        } else {\n            dh = 0;\n        }\n        return f;\n    };\n    f.lightness = function (h) {\n        if (h == null) {\n            return lightness;\n        }\n        if (type(h) === 'array') {\n            lightness = h;\n            dl = h[1] - h[0];\n        } else {\n            lightness = [h, h];\n            dl = 0;\n        }\n        return f;\n    };\n    f.scale = () => chroma.scale(f);\n    f.hue(hue);\n    return f;\n}\n","import Color from '../Color.js';\nconst digits = '0123456789abcdef';\n\nconst { floor, random } = Math;\n\nexport default () => {\n    let code = '#';\n    for (let i = 0; i < 6; i++) {\n        code += digits.charAt(floor(random() * 16));\n    }\n    return new Color(code, 'hex');\n};\n","import type from './type.js';\n\nconst { log, pow, floor, abs } = Math;\n\nexport function analyze(data, key = null) {\n    const r = {\n        min: Number.MAX_VALUE,\n        max: Number.MAX_VALUE * -1,\n        sum: 0,\n        values: [],\n        count: 0\n    };\n    if (type(data) === 'object') {\n        data = Object.values(data);\n    }\n    data.forEach((val) => {\n        if (key && type(val) === 'object') val = val[key];\n        if (val !== undefined && val !== null && !isNaN(val)) {\n            r.values.push(val);\n            r.sum += val;\n            if (val < r.min) r.min = val;\n            if (val > r.max) r.max = val;\n            r.count += 1;\n        }\n    });\n\n    r.domain = [r.min, r.max];\n\n    r.limits = (mode, num) => limits(r, mode, num);\n\n    return r;\n}\n\nexport function limits(data, mode = 'equal', num = 7) {\n    if (type(data) == 'array') {\n        data = analyze(data);\n    }\n    const { min, max } = data;\n    const values = data.values.sort((a, b) => a - b);\n\n    if (num === 1) {\n        return [min, max];\n    }\n\n    const limits = [];\n\n    if (mode.substr(0, 1) === 'c') {\n        // continuous\n        limits.push(min);\n        limits.push(max);\n    }\n\n    if (mode.substr(0, 1) === 'e') {\n        // equal interval\n        limits.push(min);\n        for (let i = 1; i < num; i++) {\n            limits.push(min + (i / num) * (max - min));\n        }\n        limits.push(max);\n    } else if (mode.substr(0, 1) === 'l') {\n        // log scale\n        if (min <= 0) {\n            throw new Error(\n                'Logarithmic scales are only possible for values > 0'\n            );\n        }\n        const min_log = Math.LOG10E * log(min);\n        const max_log = Math.LOG10E * log(max);\n        limits.push(min);\n        for (let i = 1; i < num; i++) {\n            limits.push(pow(10, min_log + (i / num) * (max_log - min_log)));\n        }\n        limits.push(max);\n    } else if (mode.substr(0, 1) === 'q') {\n        // quantile scale\n        limits.push(min);\n        for (let i = 1; i < num; i++) {\n            const p = ((values.length - 1) * i) / num;\n            const pb = floor(p);\n            if (pb === p) {\n                limits.push(values[pb]);\n            } else {\n                // p > pb\n                const pr = p - pb;\n                limits.push(values[pb] * (1 - pr) + values[pb + 1] * pr);\n            }\n        }\n        limits.push(max);\n    } else if (mode.substr(0, 1) === 'k') {\n        // k-means clustering\n        /*\n        implementation based on\n        http://code.google.com/p/figue/source/browse/trunk/figue.js#336\n        simplified for 1-d input values\n        */\n        let cluster;\n        const n = values.length;\n        const assignments = new Array(n);\n        const clusterSizes = new Array(num);\n        let repeat = true;\n        let nb_iters = 0;\n        let centroids = null;\n\n        // get seed values\n        centroids = [];\n        centroids.push(min);\n        for (let i = 1; i < num; i++) {\n            centroids.push(min + (i / num) * (max - min));\n        }\n        centroids.push(max);\n\n        while (repeat) {\n            // assignment step\n            for (let j = 0; j < num; j++) {\n                clusterSizes[j] = 0;\n            }\n            for (let i = 0; i < n; i++) {\n                const value = values[i];\n                let mindist = Number.MAX_VALUE;\n                let best;\n                for (let j = 0; j < num; j++) {\n                    const dist = abs(centroids[j] - value);\n                    if (dist < mindist) {\n                        mindist = dist;\n                        best = j;\n                    }\n                    clusterSizes[best]++;\n                    assignments[i] = best;\n                }\n            }\n\n            // update centroids step\n            const newCentroids = new Array(num);\n            for (let j = 0; j < num; j++) {\n                newCentroids[j] = null;\n            }\n            for (let i = 0; i < n; i++) {\n                cluster = assignments[i];\n                if (newCentroids[cluster] === null) {\n                    newCentroids[cluster] = values[i];\n                } else {\n                    newCentroids[cluster] += values[i];\n                }\n            }\n            for (let j = 0; j < num; j++) {\n                newCentroids[j] *= 1 / clusterSizes[j];\n            }\n\n            // check convergence\n            repeat = false;\n            for (let j = 0; j < num; j++) {\n                if (newCentroids[j] !== centroids[j]) {\n                    repeat = true;\n                    break;\n                }\n            }\n\n            centroids = newCentroids;\n            nb_iters++;\n\n            if (nb_iters > 200) {\n                repeat = false;\n            }\n        }\n\n        // finished k-means clustering\n        // the next part is borrowed from gabrielflor.it\n        const kClusters = {};\n        for (let j = 0; j < num; j++) {\n            kClusters[j] = [];\n        }\n        for (let i = 0; i < n; i++) {\n            cluster = assignments[i];\n            kClusters[cluster].push(values[i]);\n        }\n        let tmpKMeansBreaks = [];\n        for (let j = 0; j < num; j++) {\n            tmpKMeansBreaks.push(kClusters[j][0]);\n            tmpKMeansBreaks.push(kClusters[j][kClusters[j].length - 1]);\n        }\n        tmpKMeansBreaks = tmpKMeansBreaks.sort((a, b) => a - b);\n        limits.push(tmpKMeansBreaks[0]);\n        for (let i = 1; i < tmpKMeansBreaks.length; i += 2) {\n            const v = tmpKMeansBreaks[i];\n            if (!isNaN(v) && limits.indexOf(v) === -1) {\n                limits.push(v);\n            }\n        }\n    }\n    return limits;\n}\n","import Color from '../Color.js';\nimport '../ops/luminance.js';\n\nexport default (a, b) => {\n    // WCAG contrast ratio\n    // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n    a = new Color(a);\n    b = new Color(b);\n    const l1 = a.luminance();\n    const l2 = b.luminance();\n    return l1 > l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05);\n};\n","import Color from '../Color.js';\nconst { sqrt, pow, min, max, atan2, abs, cos, sin, exp, PI } = Math;\n\nexport default function (a, b, Kl = 1, Kc = 1, Kh = 1) {\n    // Delta E (CIE 2000)\n    // see http://www.brucelindbloom.com/index.html?Eqn_DeltaE_CIE2000.html\n    var rad2deg = function (rad) {\n        return (360 * rad) / (2 * PI);\n    };\n    var deg2rad = function (deg) {\n        return (2 * PI * deg) / 360;\n    };\n    a = new Color(a);\n    b = new Color(b);\n    const [L1, a1, b1] = Array.from(a.lab());\n    const [L2, a2, b2] = Array.from(b.lab());\n    const avgL = (L1 + L2) / 2;\n    const C1 = sqrt(pow(a1, 2) + pow(b1, 2));\n    const C2 = sqrt(pow(a2, 2) + pow(b2, 2));\n    const avgC = (C1 + C2) / 2;\n    const G = 0.5 * (1 - sqrt(pow(avgC, 7) / (pow(avgC, 7) + pow(25, 7))));\n    const a1p = a1 * (1 + G);\n    const a2p = a2 * (1 + G);\n    const C1p = sqrt(pow(a1p, 2) + pow(b1, 2));\n    const C2p = sqrt(pow(a2p, 2) + pow(b2, 2));\n    const avgCp = (C1p + C2p) / 2;\n    const arctan1 = rad2deg(atan2(b1, a1p));\n    const arctan2 = rad2deg(atan2(b2, a2p));\n    const h1p = arctan1 >= 0 ? arctan1 : arctan1 + 360;\n    const h2p = arctan2 >= 0 ? arctan2 : arctan2 + 360;\n    const avgHp =\n        abs(h1p - h2p) > 180 ? (h1p + h2p + 360) / 2 : (h1p + h2p) / 2;\n    const T =\n        1 -\n        0.17 * cos(deg2rad(avgHp - 30)) +\n        0.24 * cos(deg2rad(2 * avgHp)) +\n        0.32 * cos(deg2rad(3 * avgHp + 6)) -\n        0.2 * cos(deg2rad(4 * avgHp - 63));\n    let deltaHp = h2p - h1p;\n    deltaHp =\n        abs(deltaHp) <= 180\n            ? deltaHp\n            : h2p <= h1p\n              ? deltaHp + 360\n              : deltaHp - 360;\n    deltaHp = 2 * sqrt(C1p * C2p) * sin(deg2rad(deltaHp) / 2);\n    const deltaL = L2 - L1;\n    const deltaCp = C2p - C1p;\n    const sl = 1 + (0.015 * pow(avgL - 50, 2)) / sqrt(20 + pow(avgL - 50, 2));\n    const sc = 1 + 0.045 * avgCp;\n    const sh = 1 + 0.015 * avgCp * T;\n    const deltaTheta = 30 * exp(-pow((avgHp - 275) / 25, 2));\n    const Rc = 2 * sqrt(pow(avgCp, 7) / (pow(avgCp, 7) + pow(25, 7)));\n    const Rt = -Rc * sin(2 * deg2rad(deltaTheta));\n    const result = sqrt(\n        pow(deltaL / (Kl * sl), 2) +\n            pow(deltaCp / (Kc * sc), 2) +\n            pow(deltaHp / (Kh * sh), 2) +\n            Rt * (deltaCp / (Kc * sc)) * (deltaHp / (Kh * sh))\n    );\n    return max(0, min(100, result));\n}\n","// some pre-defined color scales:\nimport chroma from '../chroma.js';\nimport '../io/hsl/index.js';\nimport scale from '../generator/scale.js';\n\nexport default {\n    cool() {\n        return scale([chroma.hsl(180, 1, 0.9), chroma.hsl(250, 0.7, 0.4)]);\n    },\n    hot() {\n        return scale(['#000', '#f00', '#ff0', '#fff'], [0, 0.25, 0.75, 1]).mode(\n            'rgb'\n        );\n    }\n};\n","/**\n    ColorBrewer colors for chroma.js\n\n    Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The\n    Pennsylvania State University.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software distributed\n    under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n    CONDITIONS OF ANY KIND, either express or implied. See the License for the\n    specific language governing permissions and limitations under the License.\n*/\n\nconst colorbrewer = {\n    // sequential\n    OrRd: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'],\n    PuBu: ['#fff7fb', '#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858'],\n    BuPu: ['#f7fcfd', '#e0ecf4', '#bfd3e6', '#9ebcda', '#8c96c6', '#8c6bb1', '#88419d', '#810f7c', '#4d004b'],\n    Oranges: ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704'],\n    BuGn: ['#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45', '#006d2c', '#00441b'],\n    YlOrBr: ['#ffffe5', '#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02', '#993404', '#662506'],\n    YlGn: ['#ffffe5', '#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443', '#006837', '#004529'],\n    Reds: ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d'],\n    RdPu: ['#fff7f3', '#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e', '#7a0177', '#49006a'],\n    Greens: ['#f7fcf5', '#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b'],\n    YlGnBu: ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#253494', '#081d58'],\n    Purples: ['#fcfbfd', '#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d'],\n    GnBu: ['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081'],\n    Greys: ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525', '#000000'],\n    YlOrRd: ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a', '#e31a1c', '#bd0026', '#800026'],\n    PuRd: ['#f7f4f9', '#e7e1ef', '#d4b9da', '#c994c7', '#df65b0', '#e7298a', '#ce1256', '#980043', '#67001f'],\n    Blues: ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b'],\n    PuBuGn: ['#fff7fb', '#ece2f0', '#d0d1e6', '#a6bddb', '#67a9cf', '#3690c0', '#02818a', '#016c59', '#014636'],\n    Viridis: ['#440154', '#482777', '#3f4a8a', '#31678e', '#26838f', '#1f9d8a', '#6cce5a', '#b6de2b', '#fee825'],\n\n    // diverging\n    Spectral: ['#9e0142', '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#e6f598', '#abdda4', '#66c2a5', '#3288bd', '#5e4fa2'],\n    RdYlGn: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#d9ef8b', '#a6d96a', '#66bd63', '#1a9850', '#006837'],\n    RdBu: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#f7f7f7', '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', '#053061'],\n    PiYG: ['#8e0152', '#c51b7d', '#de77ae', '#f1b6da', '#fde0ef', '#f7f7f7', '#e6f5d0', '#b8e186', '#7fbc41', '#4d9221', '#276419'],\n    PRGn: ['#40004b', '#762a83', '#9970ab', '#c2a5cf', '#e7d4e8', '#f7f7f7', '#d9f0d3', '#a6dba0', '#5aae61', '#1b7837', '#00441b'],\n    RdYlBu: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695'],\n    BrBG: ['#543005', '#8c510a', '#bf812d', '#dfc27d', '#f6e8c3', '#f5f5f5', '#c7eae5', '#80cdc1', '#35978f', '#01665e', '#003c30'],\n    RdGy: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#ffffff', '#e0e0e0', '#bababa', '#878787', '#4d4d4d', '#1a1a1a'],\n    PuOr: ['#7f3b08', '#b35806', '#e08214', '#fdb863', '#fee0b6', '#f7f7f7', '#d8daeb', '#b2abd2', '#8073ac', '#542788', '#2d004b'],\n\n    // qualitative\n    Set2: ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f', '#e5c494', '#b3b3b3'],\n    Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666'],\n    Set1: ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf', '#999999'],\n    Set3: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'],\n    Dark2: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'],\n    Paired: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'],\n    Pastel2: ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae', '#f1e2cc', '#cccccc'],\n    Pastel1: ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6', '#ffffcc', '#e5d8bd', '#fddaec', '#f2f2f2']\n};\n\n// add lowercase aliases for case-insensitive matches\nfor (let key of Object.keys(colorbrewer)) {\n    colorbrewer[key.toLowerCase()] = colorbrewer[key];\n}\n\nexport default colorbrewer;\n","import chroma from './src/chroma.js';\n\n// feel free to comment out anything to rollup\n// a smaller chroma.js built\n\n// io --> convert colors\nimport './src/io/cmyk/index.js';\nimport './src/io/css/index.js';\nimport './src/io/gl/index.js';\nimport './src/io/hcg/index.js';\nimport './src/io/hex/index.js';\nimport './src/io/hsi/index.js';\nimport './src/io/hsl/index.js';\nimport './src/io/hsv/index.js';\nimport './src/io/lab/index.js';\nimport './src/io/lch/index.js';\nimport './src/io/named/index.js';\nimport './src/io/num/index.js';\nimport './src/io/rgb/index.js';\nimport './src/io/temp/index.js';\nimport './src/io/oklab/index.js';\nimport './src/io/oklch/index.js';\n\n// operators --> modify existing Colors\nimport './src/ops/alpha.js';\nimport './src/ops/clipped.js';\nimport './src/ops/darken.js';\nimport './src/ops/get.js';\nimport './src/ops/luminance.js';\nimport './src/ops/mix.js';\nimport './src/ops/premultiply.js';\nimport './src/ops/saturate.js';\nimport './src/ops/set.js';\nimport './src/ops/shade.js';\n\n// interpolators\nimport './src/interpolator/rgb.js';\nimport './src/interpolator/lrgb.js';\nimport './src/interpolator/lab.js';\nimport './src/interpolator/lch.js';\nimport './src/interpolator/num.js';\nimport './src/interpolator/hcg.js';\nimport './src/interpolator/hsi.js';\nimport './src/interpolator/hsl.js';\nimport './src/interpolator/hsv.js';\nimport './src/interpolator/oklab.js';\nimport './src/interpolator/oklch.js';\n\n// generators -- > create new colors\nimport average from './src/generator/average.js';\nimport bezier from './src/generator/bezier.js';\nimport blend from './src/generator/blend.js';\nimport cubehelix from './src/generator/cubehelix.js';\nimport mix from './src/generator/mix.js';\nimport random from './src/generator/random.js';\nimport scale from './src/generator/scale.js';\n\n// other utility methods\nimport { analyze } from './src/utils/analyze.js';\nimport contrast from './src/utils/contrast.js';\nimport deltaE from './src/utils/delta-e.js';\nimport distance from './src/utils/distance.js';\nimport { limits } from './src/utils/analyze.js';\nimport valid from './src/utils/valid.js';\nimport input from './src/io/input.js';\n\n// scale\nimport scales from './src/utils/scales.js';\n\n// colors\nimport colors from './src/colors/w3cx11.js';\nimport brewer from './src/colors/colorbrewer.js';\n\nObject.assign(chroma, {\n    average,\n    bezier,\n    blend,\n    cubehelix,\n    mix,\n    interpolate: mix,\n    random,\n    scale,\n    analyze,\n    contrast,\n    deltaE,\n    distance,\n    limits,\n    valid,\n    scales,\n    input,\n    colors,\n    brewer\n});\n\nexport default chroma;\n","import Color from '../Color.js';\n\n// simple Euclidean distance\nexport default function (a, b, mode = 'lab') {\n    // Delta E (CIE 1976)\n    // see http://www.brucelindbloom.com/index.html?Equations.html\n    a = new Color(a);\n    b = new Color(b);\n    const l1 = a.get(mode);\n    const l2 = b.get(mode);\n    let sum_sq = 0;\n    for (let i in l1) {\n        const d = (l1[i] || 0) - (l2[i] || 0);\n        sum_sq += d * d;\n    }\n    return Math.sqrt(sum_sq);\n}\n","import Color from '../Color.js';\n\nexport default (...args) => {\n    try {\n        new Color(...args);\n        return true;\n        // eslint-disable-next-line\n    } catch (e) {\n        return false;\n    }\n};\n","import Histogram from 'histogram';\nimport chroma from 'chroma-js';\n\nclass ReportPlugins {\n    constructor(parent) {\n        this.parent = parent;\n    }\n\n    init(_callback) {\n    }\n\n\n    queryResult(_query) {\n        return null;\n    }\n\n    generateStats() {\n        return (<Histogram />);\n    }\n}\n\nexport default ReportPlugins;\n","import React, { useState } from 'react';\nimport CollapsePreferences from '../collapse_preferences';\n\nconst ReportHeader = (props) => {\n    const [state, setState] = useState({ collapsed: null });\n    const [renderable, _setRenderable] = useState(props.renderable === undefined ? true : props.renderable);\n    const collapsePreferences = new CollapsePreferences({ name: props.name, state: { ...state }, setState: setState });\n\n    if (state.collapsed === null) setState({ collapsed: collapsePreferences.preferenceStoredAsCollapsed() });\n    if (!renderable) return null;\n\n    return (\n        <div className={`${state.collapsed ? 'print:!hidden' : ''}`}>\n            <h3 className=\"caption font-bold border-b-2 border-seqorange\" onClick={() => collapsePreferences.toggleCollapse()}>\n                {collapsePreferences.renderCollapseIcon()}\n                <span> {props.name}</span>\n            </h3>\n            <div className='mx-1 print:mx-0'>\n                {!state.collapsed && props.renderContent()}\n            </div>\n        </div>\n    );\n};\n\nexport default ReportHeader;\n","import ReportHeader from './report_header';\nimport _ from 'underscore';\n\nconst RunSummary = (props) => {\n    const renderContent = () => {\n        return (\n            <div className=\"overview mr-0 mb-0\">\n                <p className=\"m-0 text-sm\">\n                    <strong>SequenceServer {props.seqserv_version}</strong> using{' '}\n                    <strong>{props.program_version}</strong>\n                    {props.submitted_at &&\n                        `, query submitted on ${props.submitted_at}`}\n                </p>\n                <p className=\"m-0 text-sm\">\n                    <strong> Databases: </strong>\n                    {props.querydb\n                        .map((db) => {\n                            return db.title;\n                        })\n                        .join(', ')}{' '}\n                    ({props.stats.nsequences} sequences,&nbsp;\n                    {props.stats.ncharacters} characters)\n                </p>\n                <p className=\"m-0 text-sm\">\n                    <strong>Parameters: </strong>{' '}\n                    {_.map(props.params, function (val, key) {\n                        return key + ' ' + val;\n                    }).join(', ')}\n                </p>\n                <p className=\"m-0 text-sm\">\n                    Please cite:{' '}\n                    <a href=\"https://doi.org/10.1093/molbev/msz185\" className=\"text-seqblue hover:text-seqorange\">\n                        https://doi.org/10.1093/molbev/msz185\n                    </a>\n                </p>\n            </div>\n        );\n    };\n\n    return <ReportHeader name=\"Run Summary\" renderContent={renderContent} />;\n};\n\nexport default RunSummary;\n","import _ from 'underscore';\nimport * as d3 from 'd3';\nexport function get_colors_for_evalue(evalue, hits) {\n    var colors = d3.scaleLog()\n        .domain([\n            d3.min([1e-5, d3.min(hits.map(function (d) {\n                if (parseFloat(d.evalue) === 0.0) return undefined;\n                return d.evalue;\n            }))]),\n            d3.max(hits.map(function (d) {\n                return d.evalue;\n            }))\n        ])\n        .range([0,0.8]);\n    var rgb = colors(evalue);\n    return d3.hsl(20, 0.82 , rgb);\n}\n\nexport function toLetters(num) {\n    var mod = num % 26,\n        pow = num / 26 | 0,\n        out = mod ? String.fromCharCode(96 + mod) : (--pow, 'z');\n    return pow ? toLetters(pow) + out : out;\n}\n\nexport function getPrefix(str) {\n    if (str.length === 0) return '';\n\n    var lastChar = str.charAt(str.length - 1);\n    return /[a-zA-Z]/.test(lastChar) ? lastChar : '';\n}\n\n/**\n * Defines how ticks will be formatted.\n *\n * Examples: 200 aa, 2.4 kbp, 7.6 Mbp.\n *\n * Borrowed from Kablammo. Modified by Priyam based on https://github.com/mbostock/d3/issues/1722.\n */\nexport function tick_formatter(scale, seq_type) {\n    var prefix = d3.format('~s')\n    var suffixes = {amino_acid: 'aa', nucleic_acid: 'bp'};\n\n    return function (d) {\n        return `${prefix(d)}${suffixes[seq_type]}`\n            .replace(/([a-zA-Z]+)/, ' $1')\n    };\n}\n\nexport function get_seq_type(algorithm) {\n    var SEQ_TYPES = {\n        blastn: {\n            query_seq_type:   'nucleic_acid',\n            subject_seq_type: 'nucleic_acid'\n        },\n        blastp: {\n            query_seq_type:   'amino_acid',\n            subject_seq_type: 'amino_acid'\n        },\n        blastx: {\n            query_seq_type:   'nucleic_acid',\n            subject_seq_type: 'amino_acid'\n        },\n        tblastx: {\n            query_seq_type:   'nucleic_acid',\n            subject_seq_type: 'nucleic_acid'\n        },\n        tblastn: {\n            query_seq_type:   'amino_acid',\n            subject_seq_type: 'nucleic_acid'\n        }\n    };\n    return SEQ_TYPES[algorithm];\n}\n\nexport function prettify_evalue(evalue) {\n    var matches = evalue.toString().split('e');\n    var base  = matches[0];\n    var power = matches[1];\n\n    if (power)\n    {\n        var s = parseFloat(base).toFixed(2);\n        var element = '<span>'+s+' &times; 10<sup>'+power+'</sup></span>';\n        return element;\n    }\n    else {\n        if (!(base % 1==0))\n            return parseFloat(base).toFixed(2);\n        else\n            return base;\n    }\n}\n","import React from 'react';\n\nvar Utils = {\n    /***********************************\n     * Formatters for hits & hsp table *\n     ***********************************/\n\n    // Formats an array of two elements as \"first (last)\".\n    format_2_tuple: function (tuple) {\n        return (tuple[0] + ' (' + tuple[tuple.length - 1] + ')');\n    },\n\n    /**\n     * Returns fraction as percentage\n     */\n    inPercentage: function (num, den) {\n        var x = (num * 100.0 / den).toFixed(1);\n        if (x % 1 == 0) {\n            x = parseInt(x, 10);\n            return `${x}%`;\n        }\n        else {\n            return `${x}%`;\n        }\n    },\n\n    /**\n     * Returns fractional representation as String.\n     */\n    inFraction: function (num , den) {\n        return num + '/' + den;\n    },\n\n    /**\n     * Returns given Float as String formatted to two decimal places.\n     */\n    inTwoDecimal: function (num) {\n        return num.toFixed(2);\n    },\n\n    /**\n     * Returns zero if num is zero. Returns two decimal representation of num\n     * if num is between [1..10). Returns num in scientific notation otherwise.\n     */\n    inExponential: function (num) {\n        // Nothing to do if num is 0.\n        if (num === 0) {\n            return 0;\n        }\n\n        // Round to two decimal places if in the rane [1..10).\n        if (num >= 1 && num < 10)\n        {\n            return this.inTwoDecimal(num);\n        }\n\n        // Return numbers in the range [0..1) and [10..Inf] in\n        // scientific format.\n        var exp = num.toExponential(2);\n        var parts = exp.split('e');\n        var base  = parts[0];\n        var power = parts[1];\n        return <span>{base}&times;10<sup>{power}</sup></span>;\n    }\n};\n\nexport default Utils;\n","import * as d3 from 'd3';\nimport Circos from './circosjs';\nimport _ from 'underscore';\n\nimport Grapher from 'grapher';\nimport * as Helpers from './visualisation_helpers';\nimport Utils from './utils';\n\nclass Graph {\n    static canCollapse() {\n        return true;\n    }\n\n    static name() {\n        return 'Chord diagram of queries and their top hits';\n    }\n\n    static className() {\n        return 'circos';\n    }\n\n    static graphId(props) {\n        return 'circos-collapse';\n    }\n\n    static dataName(props) {\n        return 'Circos-visualisation';\n    }\n\n    constructor($svgContainer, props) {\n        this.queries = [];\n        props.queries.forEach((query) => {\n            if (query.hits.length > 0) {\n                this.queries.push(query);\n            }\n        });\n        this.svgContainer = $svgContainer;\n        this.seq_type = Helpers.get_seq_type(props.program);\n        this.algorithm = props.program;\n        // Initialize dimensions\n        this.width = this.svgContainer.width();\n        this.height = 600;\n        this.innerRadius = 200;\n        this.outerRadius = 230;\n\n        // Initialize data arrays\n        this.query_arr = [];\n        this.hit_arr = [];\n        this.layout_arr = [];\n        this.chords_arr = [];\n\n        // Initialize other properties\n        this.hsp_count = 50;\n        this.denominator = 1;\n        this.spacing = 20;\n        this.labelSpacing = 10;\n        this.initiate();\n    }\n\n    initiate() {\n        // Call initialization methods\n        this.construct_layout();\n        this.iterator_for_edits();\n\n        // Remove duplicate hits\n        this.hit_arr = _.uniq(this.hit_arr);\n\n        // Handle spacing\n        this.handle_spacing();\n\n        // Insert the circos container\n        d3.select(this.svgContainer[0])\n            .insert('div', ':first-child')\n            .attr('class', 'circosContainer');\n\n        // Create the instance\n        this.create_instance(this.svgContainer, this.width, this.height);\n\n        // Render the instance or show an error\n        if (this.chords_arr.length && this.layout_arr.length) {\n            this.instance_render();\n        } else {\n            this.render_error();\n        }\n\n        // Setup the tooltip\n        this.setupTooltip();\n        // this.drawLegend();\n    }\n\n    iterator_for_edits() {\n        this.max_length = this.calculate_max_length();\n        if (this.hit_arr.length > 10) {\n            this.complex_layout_edits();\n        }\n    }\n\n    // Generate both layout_arr and chords_arr with top hsps set by this.hsp_count\n    construct_layout() {\n        var num_karyotype = 32;\n        var num_queries = this.queries.length;\n        var x = Math.min(num_karyotype / 2, num_queries);\n        var num_hits = (num_karyotype - x) / x;\n        this.new_layout = [];\n        this.data = _.map(this.queries, _.bind(this.processQuery, this, x, num_hits));\n    }\n\n    processQuery(x, num_hits, query) {\n        if (this.query_arr.length < x) {\n            var label = query.id;\n            var len = query.length;\n            var item1 = {\n                len: len,\n                color: '#8dd3c7',\n                label: label,\n                id: 'Query_' + this.clean_id(query.id),\n                ori_id: label,\n            };\n            this.layout_arr.push(item1);\n            _.map(query.hits, _.bind(this.processHit, this, num_hits, query));\n        }\n        this.query_arr.push(query.id);\n        return query;\n    }\n\n    processHit(num_hits, query, hit) {\n        if (hit.number < num_hits) {\n            if (_.indexOf(this.hit_arr, hit.id) == -1) {\n                var label = hit.id;\n                var len = hit.length;\n                this.hit_arr.push(hit.id);\n                var item2 = {\n                    len: len,\n                    color: '#80b1d3',\n                    label: label,\n                    id: 'Hit_' + this.clean_id(hit.id),\n                    ori_id: label,\n                };\n                this.layout_arr.push(item2);\n            }\n            _.map(hit.hsps, _.bind(this.processHSP, this, query, hit));\n        }\n        return hit;\n    }\n\n    processHSP(query, hit, hsp) {\n        this.chords_arr.push([\n            'Query_' + this.clean_id(query.id),\n            hsp.qstart,\n            hsp.qend,\n            'Hit_' + this.clean_id(hit.id),\n            hsp.sstart,\n            hsp.send,\n            hit.number,\n            hsp,\n        ]);\n        return hsp;\n    }\n\n    // rearraging hit and query karyotypes to have all query in one place\n    rearrange_new_layout() {\n        _.each(\n            this.new_layout,\n            _.bind(function (obj) {\n                var id = obj.id.slice(0, 3);\n                if (id == 'Que') {\n                    this.layout_arr.push(obj);\n                }\n            }, this)\n        );\n        _.each(\n            this.new_layout,\n            _.bind(function (obj) {\n                var id = obj.id.slice(0, 3);\n                if (id == 'Hit') {\n                    this.layout_arr.push(obj);\n                }\n            }, this)\n        );\n    }\n\n    // label edits along with deleting hits which are too small to display\n    complex_layout_edits() {\n        this.delete_from_layout = [];\n        this.delete_from_chords = [];\n        _.each(\n            this.layout_arr,\n            _.bind(function (obj, index) {\n                var rel_length = (obj.len / this.max_length).toFixed(3);\n                var label = obj.label;\n                if (rel_length < 0.1 && obj.id.slice(0, 3) != 'Que') {\n                    this.delete_from_layout.push(obj);\n                    this.hit_arr.slice(_.indexOf(this.hit_arr, obj.label), 1); // corresponding delete from hit_arr\n                }\n            }, this)\n        );\n    }\n\n    // get the chords_arr index based on hit or query id\n    check_in_chords_arr(id, type, index) {\n        var count = 0;\n        _.each(\n            this.chords_arr,\n            _.bind(function (obj) {\n                if (type == 'Que') {\n                    if (obj[0] != id) {\n                        count++;\n                    }\n                }\n            }, this)\n        );\n        if (count == this.chords_arr.length) {\n            console.log('no record found ' + id);\n            this.delete_arr.push(index);\n        }\n    }\n\n    // get index of hit_arr based on id\n    find_index_of_hit(id) {\n        var found;\n        _.each(\n            this.queries,\n            _.bind(function (query) {\n                _.each(\n                    query.hits,\n                    _.bind(function (hit) {\n                        var check_id = 'Hit_' + this.clean_id(hit.id);\n                        if (id == check_id) {\n                            found = hit.id;\n                        }\n                    }, this)\n                );\n            }, this)\n        );\n        return _.indexOf(this.layout_arr, found);\n    }\n\n    edit_labels() {\n        console.log('label edits');\n        _.each(\n            this.layout_arr,\n            _.bind(function (obj) {\n                var rel_length = (obj.len / this.max_length).toFixed(3);\n                var label = obj.label;\n                if (rel_length < 0.41) {\n                    obj.label = '..';\n                } else if (label.length > 10) {\n                    obj.label = label.slice(0, 2) + '...';\n                } else {\n                    obj.label = obj.ori_id;\n                }\n            }, this)\n        );\n    }\n\n    calculate_multipliers() {\n        var sum_query_length = 0;\n        var sum_hit_length = 0;\n        _.each(\n            this.query_arr,\n            _.bind(function (id) {\n                _.each(\n                    this.data,\n                    _.bind(function (query) {\n                        if (id == query.id) {\n                            sum_query_length += query.length;\n                        }\n                    }, this)\n                );\n            }, this)\n        );\n\n        _.each(\n            this.data,\n            _.bind(function (query) {\n                _.each(\n                    query.hits,\n                    _.bind(function (hit) {\n                        var index = _.indexOf(this.hit_arr, hit.id);\n                        if (index >= 0) {\n                            sum_hit_length += hit.length;\n                        }\n                    }, this)\n                );\n            }, this)\n        );\n        var mid_sum = (sum_query_length + sum_hit_length) / 2;\n        console.log(\n            'mid sum ' +\n      mid_sum +\n      ' hit_sum ' +\n      sum_hit_length +\n      ' query_sum ' +\n      sum_query_length\n        );\n        this.query_multiplier = (mid_sum / sum_query_length).toFixed(3);\n        this.hit_multiplier = (mid_sum / sum_hit_length).toFixed(3);\n        console.log(\n            'query ' + this.query_multiplier + ' hit ' + this.hit_multiplier\n        );\n    }\n\n    handle_spacing() {\n        if (this.max_length > 16000) {\n            this.spacing = 200;\n        } else if (this.max_length > 12000) {\n            this.spacing = 150;\n        } else if (this.max_length > 8000) {\n            this.spacing = 100;\n        } else if (this.max_length > 4000) {\n            this.spacing = 75;\n        } else if (this.max_length > 1800) {\n            this.spacing = 50;\n        }\n    }\n\n    calculate_max_length() {\n        var max = 0;\n        _.each(this.layout_arr, function (obj) {\n            if (max < obj.len) {\n                max = obj.len;\n            }\n        });\n        return max;\n    }\n\n    clean_id(id) {\n        return id.replace(/[^a-zA-Z0-9]/g, '');\n    }\n\n    create_instance(container, width, height) {\n        this.instance = new Circos({\n            container: '.circosContainer',\n            width: width,\n            height: height,\n        });\n        this.chord_layout();\n        this.instance_layout();\n    }\n\n    chord_layout() {\n        if (this.chords_arr.length > 32) {\n            this.paletteSize = 32;\n        } else {\n            this.paletteSize = this.chords_arr.length;\n        }\n        return {\n            colorPaletteSize: this.paletteSize,\n            // color: 'rgb(0,0,0)',\n            colorPalette: 'RdYlBu', // colors of chords based on last value in chords\n            // tooltipContent: 'Hiten',\n            opacity: 0.85, // add opacity to ribbons\n        };\n    }\n\n    instance_layout() {\n        return {\n            innerRadius: this.innerRadius,\n            outerRadius: this.outerRadius,\n            cornerRadius: 1, // rounding at edges of karyotypes\n            labels: {\n                display: true,\n                size: '10px',\n                radialOffset: 10,\n            },\n            ticks: {\n                display: true,\n                spacing: this.spacing, // the ticks values to display\n                labelSpacing: this.labelSpacing, // ticks value apper in interval\n                labelDenominator: this.denominator, // divide the value by this value\n                labelSuffix: '',\n                labelSize: '10px',\n                majorSpacing: this.labelSpacing, // major ticks apper in interval\n                size: {\n                    minor: 0, // to remove minor ticks\n                    major: 4,\n                },\n            },\n        };\n    }\n\n    instance_render() {\n        this.instance.layout(this.instance_layout(), this.layout_arr);\n        this.instance.chord('chord1', this.chord_layout(), this.chords_arr);\n        this.instance.render();\n    }\n\n    render_error() {\n        this.svgContainer.find('svg').remove();\n        this.svg = d3\n            .select(this.svgContainer[0])\n            .insert('svg', ':first-child')\n            .attr('width', this.svgContainer.width())\n            .attr('height', this.svgContainer.height())\n            .append('g')\n            .attr('class', 'circos-error')\n            .attr(\n                'transform',\n                'translate(' +\n        this.svgContainer.width() / 2 +\n        ',' +\n        this.svgContainer.height() / 2 +\n        ')'\n            )\n            .append('text')\n            .attr('text-anchor', 'start')\n            .attr('dy', '-0.25em')\n            .attr('x', -175)\n            .style('font-size', '14px')\n            .text('Chord diagram looks great with fewer than 16 queries');\n    }\n\n    layoutReset() {\n        this.layoutHide = [];\n        _.each(this.layout_arr, function (obj) {\n            $('.' + obj.id).css('opacity', 1);\n        });\n    }\n\n    chordsReset() {\n        this.chordsHide = [];\n        _.each(this.chords_arr, function (obj) {\n            var slen = obj[1] + obj[2];\n            var tlen = obj[4] + obj[5];\n            $('#' + obj[0] + '_' + slen + '_' + obj[3] + '_' + tlen).show();\n        });\n    }\n\n    chordsCheck(id, type) {\n        _.each(\n            this.chords_arr,\n            _.bind(function (obj, index) {\n                if (type == 'Que') {\n                    if (obj[0] == id) {\n                        this.chordsHide.push(index);\n                        this.layoutHide.push(obj[3]);\n                    }\n                }\n                if (type == 'Hit') {\n                    if (obj[3] == id) {\n                        this.chordsHide.push(index);\n                        this.layoutHide.push(obj[0]);\n                    }\n                }\n            }, this)\n        );\n    }\n\n    chordsClean() {\n        _.each(\n            this.chords_arr,\n            _.bind(function (obj, index) {\n                if (_.indexOf(this.chordsHide, index) == -1) {\n                    var slen = obj[1] + obj[2];\n                    var tlen = obj[4] + obj[5];\n                    $('#' + obj[0] + '_' + slen + '_' + obj[3] + '_' + tlen).hide();\n                }\n            }, this)\n        );\n    }\n\n    layoutClean() {\n        _.each(\n            this.layout_arr,\n            _.bind(function (obj, index) {\n                if (_.indexOf(this.layoutHide, obj.id) == -1) {\n                    $('.' + obj.id).css('opacity', 0.1);\n                }\n            }, this)\n        );\n    }\n\n    setupTooltip() {\n        var selected = {};\n        $('.circos-distribution').on(\n            'click',\n            _.bind(function (event) {\n                event.stopPropagation();\n                this.layoutReset();\n                this.chordsReset();\n                selected = {};\n            }, this)\n        );\n        _.each(\n            this.query_arr,\n            _.bind(function (id, index) {\n                this.chordsHide = [];\n                this.layoutHide = [];\n                if (id) {\n                    $('.circos .Query_' + this.clean_id(id))\n                        .attr('title', id)\n                        .on(\n                            'click',\n                            _.bind(function (event) {\n                                event.stopPropagation();\n                                if (selected[index] != id) {\n                                    selected[index] = id;\n                                    var cleaned_id = 'Query_' + this.clean_id(id);\n                                    this.layoutHide.push(cleaned_id);\n                                    this.chordsCheck(cleaned_id, 'Que');\n                                    this.chordsClean();\n                                    this.layoutClean();\n                                } else {\n                                    selected[index] = 0;\n                                    this.layoutReset();\n                                    this.chordsReset();\n                                }\n                            }, this)\n                        );\n                }\n            }, this)\n        );\n        _.each(\n            this.hit_arr,\n            _.bind(function (id, index) {\n                this.chordsHide = [];\n                this.layoutHide = [];\n                if (id) {\n                    $('.circos .Hit_' + this.clean_id(id))\n                        .attr('title', id)\n                        .on(\n                            'click',\n                            _.bind(function (event) {\n                                event.stopPropagation();\n                                if (selected[index] != id) {\n                                    selected[index] = id;\n                                    var cleaned_id = 'Hit_' + this.clean_id(id);\n                                    this.layoutHide.push(cleaned_id);\n                                    this.chordsCheck(cleaned_id, 'Hit');\n                                    this.chordsClean();\n                                    this.layoutClean();\n                                } else {\n                                    selected[index] = 0;\n                                    this.layoutReset();\n                                    this.chordsReset();\n                                }\n                            }, this)\n                        );\n                }\n            }, this)\n        );\n        var algorithm = this.algorithm;\n        _.each(this.chords_arr, function (obj) {\n            $('#' + obj[0] + '_' + obj[3])\n                .attr('title', function () {\n                    // E value and identity.\n                    var alt_tooltip =\n            'E value: ' +\n            Helpers.prettify_evalue(obj[7].evalue) +\n            `, Identities: ${Utils.inPercentage(\n                obj[7].identity,\n                obj[7].length\n            )}`;\n                    // Positives (for protein alignment).\n                    if (algorithm != 'blastn') {\n                        alt_tooltip += `<br>Positives: ${Utils.inPercentage(\n                            obj[7].positives,\n                            obj[7].length\n                        )}`;\n                    }\n                    // Gaps. My understanding is that identities and gaps should add up to 100%.\n                    alt_tooltip += `, Gaps: ${Utils.inPercentage(\n                        obj[7].gaps,\n                        obj[7].length\n                    )}`;\n                    return alt_tooltip;\n                });\n        });\n        $('.circos').tooltip({\n            position: {\n                my: 'left+3 bottom-3',\n                at: 'right bottom',\n                using: function(position, feedback) {\n                  $(this).css(position);\n                  $('<div>')\n                    .addClass('arrow')\n                    .addClass(feedback.vertical)\n                    .addClass(feedback.horizontal)\n                    .appendTo(this);\n                }\n            },\n            items: '.chord1 path, .cs-layout g',\n            show: false,\n            hide: false,\n            content: function() {\n                var title = $(this).attr('title');\n                if (!title) return false;\n                var parsedHTML = $.parseHTML(title);\n                return parsedHTML;\n            }\n        });\n    }\n\n    ratioCalculate(value, min, max, scope, reverse, logScale) {\n        var fraction, scaleLogBase, x;\n        scaleLogBase = logScale ? 2.3 : 1;\n        if (\n            min === max ||\n      (value === min && !reverse) ||\n      (value === max && reverse)\n        ) {\n            return 0;\n        }\n        if (value === max || (value === min && reverse)) {\n            return scope - 1;\n        }\n        fraction = (value - min) / (max - min);\n        x = Math.exp((1 / scaleLogBase) * Math.log(fraction));\n        if (reverse) {\n            x = 1 - x;\n        }\n        return Math.floor(scope * x);\n    }\n\n    drawLegend() {\n        this.ratioHSP = [];\n        _.each(\n            this.chords_arr,\n            _.bind(function (obj) {\n                var item = { number: obj[6], evalue: obj[7].evalue };\n                this.ratioHSP.push(item);\n            }, this)\n        );\n        var min = d3.min(this.ratioHSP, function (d) {\n            return d.number;\n        });\n        var max = d3.max(this.ratioHSP, function (d) {\n            return d.number;\n        });\n        console.log('chords_arr ' + this.chords_arr.length);\n        console.log('ratioHSP test ' + this.ratioHSP.length);\n        console.log('paletteSize ' + this.paletteSize);\n        console.log('min ' + min + ' max ' + max);\n        this.legend = d3\n            .select(this.svgContainer[0])\n            .insert('svg', ':first-child')\n            .attr('height', 20)\n            .attr('width', this.ratioHSP.length * 30)\n            .attr('transform', 'translate(10, 10)')\n            .append('g')\n            .attr('class', 'RdYlBu')\n            .attr('transform', 'translate(10, 0)');\n\n        var bar = this.legend\n            .selectAll('.bar')\n            .data(this.ratioHSP)\n            .enter()\n            .append('g')\n            .attr('class', 'g')\n            .attr('transform', function (d, i) {\n                return 'translate(' + i * 30 + ',0)';\n            })\n            .append('rect')\n            .attr(\n                'class',\n                _.bind(function (d, i) {\n                    var s = this.ratioCalculate(\n                        d.number,\n                        min,\n                        max,\n                        this.paletteSize,\n                        false,\n                        false\n                    );\n                    console.log('calc ratio ' + s);\n                    return 'q' + s + '-' + this.paletteSize;\n                }, this)\n            )\n            .attr('title', function (d) {\n                return d.evalue;\n            })\n            .attr('x', 1)\n            .attr('width', 30)\n            .attr('height', 20);\n        // .attr('fill','#43ff21');\n\n        var scale = d3.scaleLinear().domain([0, 250]).range([0, 100]);\n\n        // this.legend.append('rect')\n        //     .attr('x', 7*14)\n        //     .attr('width', 2*10)\n        //     .attr('height', 10)\n        //     .attr('fill','#43ff21');\n        //\n        // this.legend.append('text')\n        //     .attr('class','text-legend')\n        //     .attr('transform','translate('+10+',0)')\n        //     .attr('x',6*14)\n        //     .text('Weaker Hits');\n        //\n        // this.legend.append('text')\n        //     .attr('class','text-legend')\n        //     .attr('transform','translate('+10+',0)')\n        //     .attr('x',9*14)\n        //     .text('Stronger Hits');\n\n        // bar.selectAll('rect')\n\n    // this.legend.append('rect')\n    //     .attr('x',1)\n    //     .attr('width', 10)\n    //     .attr('height', 10)\n    //     .attr('fill','#232323');\n    }\n}\n\nexport default Grapher(Graph);\n","import Circos from '../circos';\nimport ReportHeader from './report_header';\n\nconst GraphicalOverview = ({queries, program, plugins}) => {\n    /**\n    * Does the report have at least two hits? This is used to determine\n    * whether Circos should be enabled or not.\n    */\n    const atLeastTwoHits = () => {\n        let hitNum = 0;\n        return queries.some((query) => {\n            hitNum += query.hits.length;\n            return hitNum > 1;\n        });\n    }\n\n    const renderContent = () => {\n        if(!atLeastTwoHits()) return null;\n\n        return (\n            <>\n                <Circos queries={queries} program={program} />\n                {plugins.generateStats(queries)}\n            </>\n        )\n    }\n\n    return (\n        <ReportHeader name=\"Graphical Overview\" renderContent={renderContent} renderable={atLeastTwoHits()} />\n    )\n}\n\nexport default GraphicalOverview;\n","import * as d3 from 'd3';\nimport _ from 'underscore';\nimport Grapher from 'grapher';\nimport * as Helpers from './visualisation_helpers';\nimport Utils from './utils';\n\nclass Graph {\n    static canCollapse() {\n        return true;\n    }\n\n    static name() {\n        return 'Graphical overview of aligning hit sequences to the query';\n    }\n\n    static className() {\n        return 'alignment-overview';\n    }\n\n    static graphId(props) {\n        return 'alignment_'+props.query.number;\n    }\n\n    static dataName(props) {\n        return 'Alignment-Overview-'+props.query.id;\n    }\n\n    constructor($svgContainer, props) {\n        this.svg_container = $svgContainer;\n        var $queryDiv = $svgContainer.parents('.resultn');\n        var hits = this.extractData(props.query.hits, props.query.number);\n        this.graphIt($queryDiv, $svgContainer, 0, 20, null, hits);\n    }\n\n    extractData(query_hits, number) {\n        var hits = [];\n        query_hits.map(function (hit) {\n            var _hsps = [];\n            var hsps = hit.hsps;\n            _.each(hsps, function (hsp) {\n                var _hsp = {};\n                _hsp.hspEvalue = hsp.evalue;\n                _hsp.hspStart = hsp.qstart;\n                _hsp.hspEnd = hsp.qend;\n                _hsp.hspFrame = hsp.sframe;\n                _hsp.hspId = 'Query_' + number + '_hit_' + hit.number + '_hsp_' + hsp.number;\n                _hsp.hspIdentity = hsp.identity;\n                _hsp.hspGaps = hsp.gaps;\n                _hsp.hspPositives = hsp.positives;\n                _hsp.hspLength = hsp.length;\n                _hsps.push(_hsp);\n            });\n            _hsps.hitId = hit.id;\n            _hsps.hitDef = 'Query_'+number+'_hit_'+hit.number;\n            _hsps.hitEvalue = hit.hsps[0].evalue;\n            hits.push(_hsps);\n        });\n        return hits;\n    }\n\n    setupClick($graphDiv) {\n        $('a', $graphDiv).click(function (evt) {\n            evt.preventDefault();\n            evt.stopPropagation();\n            window.location.hash = $(this).attr('href');\n        });\n    }\n\n    graphControls($queryDiv, $graphDiv, isInit, opts, hits) {\n        var MIN_HITS_TO_SHOW = 20;\n\n        var totalHits, shownHits, lessButton, moreButton;\n\n        var countHits = function () {\n            totalHits = hits.length;\n            shownHits = $queryDiv.find('.ghit > g').length;\n        };\n\n        var setupButtons = function($queryDiv, $graphDiv) {\n            $graphDiv\n                .append(\n                    $('<button/>')\n                        .addClass('btn btn-link text-sm text-seqblue hover:text-seqorange cursor-pointer more')\n                        .attr('type', 'button')\n                        .attr('data-parent-query', $queryDiv.attr('id'))\n                        .html('View More&nbsp;')\n                        .append(\n                            $('<i/>')\n                                .html('&nbsp;&nbsp;')\n                                .addClass('fa fa-angle-double-down')\n                        ),\n                    $('<button/>')\n                        .addClass('btn btn-link text-sm text-seqblue hover:text-seqorange cursor-pointer less')\n                        .attr('type', 'button')\n                        .attr('data-parent-query', $queryDiv.attr('id'))\n                        .html('View Less&nbsp;')\n                        .append(\n                            $('<i/>')\n                                .html('&nbsp;&nbsp;')\n                                .addClass('fa fa-angle-double-up')\n                        )\n                );\n\n            lessButton = $('.less', $graphDiv);\n            moreButton = $('.more', $graphDiv);\n        };\n\n        var initButtons = function () {\n            countHits();\n            if (totalHits === MIN_HITS_TO_SHOW ||\n            shownHits < MIN_HITS_TO_SHOW) {\n                lessButton.hide();\n                moreButton.hide();\n            }\n            else if (shownHits === totalHits) {\n                moreButton.hide();\n                lessButton.show();\n            }\n            else if (shownHits === MIN_HITS_TO_SHOW) {\n                lessButton.hide();\n                moreButton.show();\n            }\n            else {\n                lessButton.show();\n                moreButton.show();\n            }\n        };\n\n        // Setup view buttons' state properly if called for first time.\n        if (isInit === true) {\n            setupButtons($queryDiv, $graphDiv);\n            initButtons();\n        }\n\n        moreButton.on('click', _.bind(function (e) {\n            countHits();\n            this.graphIt($queryDiv, $graphDiv, shownHits, MIN_HITS_TO_SHOW, opts, hits);\n            initButtons();\n            e.stopPropagation();\n        },this));\n\n        lessButton.on('click', _.bind(function (e) {\n            countHits();\n            var diff = shownHits - MIN_HITS_TO_SHOW;\n\n            // Decrease number of shown hits by defined constant.\n            if (diff >= MIN_HITS_TO_SHOW) {\n                this.graphIt($queryDiv, $graphDiv, shownHits, -MIN_HITS_TO_SHOW, opts, hits);\n                initButtons();\n            }\n            else if (diff !== 0) {\n            // Ensure a certain number of hits always stay in graph.\n                this.graphIt($queryDiv, $graphDiv, shownHits, MIN_HITS_TO_SHOW - shownHits, opts, hits);\n                initButtons();\n            }\n            e.stopPropagation();\n        },this));\n    }\n\n    drawLegend(svg, options, width, height, hits) {\n        var svg_legend = svg.append('g')\n            .attr('transform',\n                'translate(0,' + (height - 1.75 * options.margin) + ')');\n\n        svg_legend.append('rect')\n            .attr('x', 7.5 * (width - 2 * options.margin) / 10)\n            .attr('width', 2 * (width - 4 * options.margin) / 10)\n            .attr('height', options.legend)\n            .attr('fill', 'url(#legend-grad)');\n\n        svg_legend.append('text')\n            .attr('class',' legend-text')\n            .attr('transform', 'translate(0, ' +options.legend +')')\n            .attr('x', 9.5 * (width - 2 * options.margin) / 10 + options.margin / 2)\n            .text('Weaker hits');\n        // .text(function() {\n        //   return Helpers.prettify_evalue(hits[hits.length-1].hitEvalue);\n        // })\n\n        svg_legend.append('text')\n            .attr('class',' legend-text')\n            .attr('transform', 'translate(0, ' + options.legend + ')')\n            .attr('x', 6.7 * (width - 2 * options.margin) / 10 - options.margin / 2)\n            .text('Stronger hits');\n        // .text(function () {\n        //   return Helpers.prettify_evalue(hits[0].hitEvalue);\n        // })\n\n        svg.append('linearGradient')\n            .attr('id', 'legend-grad')\n            .selectAll('stop')\n            .data([\n                {offset: '0%', color: '#000'},\n                {offset: '45%', color: '#c74f14'},\n                {offset: '100%', color: '#f6bea2'}\n            ])\n            .enter()\n            .append('stop')\n            .attr('offset', function (d) {\n                return d.offset;\n            })\n            .attr('stop-color', function (d) {\n                return d.color;\n            });\n    }\n\n    graphIt($queryDiv, $graphDiv, index, howMany, opts, inhits) {\n    /* barHeight: Height of each hit track.\n     * legend: Height reserved for the overview legend.\n     * margin: Margin around the svg element.\n     */\n        var defaults = {\n                barHeight: 4,\n                legend: inhits.length > 1 ? 3 : 0,\n                margin: 20\n            },\n            options = $.extend(defaults, opts);\n        var hits = inhits.slice(0 , index + howMany);\n\n        // Don't draw anything when no hits are obtained.\n        if (hits.length < 1) return false;\n\n        if (index !== 0) {\n        // Currently, we have no good way to extend pre-existing graph\n        // and hence, are removing the old one and redrawing.\n            $graphDiv.find('svg').remove();\n        }\n\n        var queryLen = $queryDiv.data().queryLen;\n        var q_i = $queryDiv.attr('id');\n\n        var width = $graphDiv.width();\n        var height = hits.length * (options.barHeight) +\n                     2 * options.legend + 4 * options.margin;\n\n        // var height = $graphDiv.height();\n\n        var SEQ_TYPES = {\n            blastn: 'nucleic_acid',\n            blastp: 'amino_acid',\n            blastx: 'nucleic_acid',\n            tblastx: 'nucleic_acid',\n            tblastn: 'amino_acid'\n        };\n\n        var svg = d3.select($graphDiv[0])\n            .selectAll('svg')\n            .data([hits])\n            .enter()\n            .insert('svg', ':first-child')\n            .attr('width', width)\n            .attr('height', height)\n            .append('g')\n            .attr('transform', 'translate(' + options.margin / 2 + ', ' + (1.5 * options.margin) + ')');\n\n        var x = d3.scaleLinear().range([0, width - options.margin]);\n\n        x.domain([1, queryLen]);\n\n        var algorithm = $queryDiv.data().algorithm;\n        var formatter = Helpers.tick_formatter(x, SEQ_TYPES[algorithm]);\n\n        var _tValues = x.ticks(11);\n        _tValues.pop();\n\n        var xAxis = d3.axisBottom(x)\n            .tickValues(_tValues.concat([1, queryLen]))\n            .tickFormat(formatter);\n\n        // Attach the axis to DOM (<svg> element)\n        var container = svg.append('g')\n            .attr('transform', 'translate(0, ' + options.margin + ')')\n            .append('g')\n            .attr('class', 'x axis')\n            .call(xAxis);\n\n        // Vertical alignment of ticks\n        container.selectAll('text')\n            .attr('x','25px')\n            .attr('y','2px')\n            .attr('transform','rotate(-90)');\n\n        var y = d3.scaleBand()\n            .range([0, height - 3 * options.margin - 2 * options.legend], 0.3);\n\n        y.domain(hits.map(function (d) {\n            return d.hitId;\n        }));\n\n        var gradScale = d3.scaleLog()\n            .domain([\n                d3.min([1e-5, d3.min(hits.map(function (d) {\n                    if (parseFloat(d.hitEvalue) === 0.0) return undefined;\n                    return d.hitEvalue;\n                }))\n                ]),\n                d3.max(hits.map(function (d) {\n                    return d.hitEvalue;\n                }))\n            ])\n            .range([0,0.8]);\n\n        svg.append('g')\n            .attr('class', 'ghit')\n            .attr('transform', 'translate(0, ' + 1.65 * (options.margin - options.legend) + ')')\n            .selectAll('.hits')\n            .data(hits)\n            .enter()\n            .append('g')\n            .each(function (d,i) {\n                // TODO: Avoid too many variables and improve naming.\n\n                d3.select(this)\n                    .selectAll('.hsp')\n                    .data(d).enter()\n                    .append('a')\n                    .each(function (v, j) {\n                    // Drawing the HSPs connector line using the same\n                    // color as that of the hit track (using lookahead).\n                        var yHspline = y(d.hitId) + options.barHeight / 2;\n                        var hsplineColor = d3.hsl(20, 0.82, gradScale(v.hspEvalue));\n\n                        if (j+1 < d.length) {\n                            if (d[j].hspEnd <= d[j+1].hspStart) {\n                                d3.select(this.parentNode)\n                                    .append('line')\n                                    .attr('x1', x(d[j].hspEnd))\n                                    .attr('y1', yHspline)\n                                    .attr('x2', x(d[j+1].hspStart))\n                                    .attr('y2', yHspline)\n                                    .attr('stroke', hsplineColor);\n                            }\n                            else if (d[j].hspStart > d[j+1].hspEnd) {\n                                d3.select(this.parentNode)\n                                    .append('line')\n                                    .attr('x1', x(d[j+1].hspEnd))\n                                    .attr('y1', yHspline)\n                                    .attr('x2', x(d[j].hspStart))\n                                    .attr('y2', yHspline)\n                                    .attr('stroke', hsplineColor);\n                            }\n                        }\n\n                        var alt_tooltip = d.hitId + '<br>E value: ' + Helpers.prettify_evalue(v.hspEvalue) +\n                            `<br>Identities: ${Utils.inPercentage(v.hspIdentity, v.hspLength)}`;\n                        // if chosen algorithm was blastn, the tooltip won't show the Positives% value in the tooltip\n                        if (algorithm != 'blastn'){\n                            alt_tooltip += `<br>Positives: ${Utils.inPercentage(v.hspPositives, v.hspLength)}`;\n                        }\n                        alt_tooltip += `, Gaps: ${Utils.inPercentage(v.hspGaps, v.hspLength)}`;\n\n                        // Draw the rectangular hit tracks itself.\n                        d3.select(this)\n                            .attr('xlink:href', '#' + q_i + '_hit_' + (i+1))\n                            .append('rect')\n                            .attr('title', alt_tooltip)\n                            .attr('class','bar')\n                            .attr('x', function (d) {\n                                return x(d.hspStart);\n                            })\n                            .attr('y', y(d.hitId))\n                            .attr('width', function (d) {\n                                return x(d.hspEnd - d.hspStart + 1);\n                            })\n                            .attr('height', options.barHeight)\n                            .attr('fill', d3.rgb(hsplineColor));\n                    });\n            });\n\n        // Draw legend only when more than one hit present\n        if (hits.length > 1) {\n            this.drawLegend(svg, options, width, height, inhits);\n        }\n        // Bind listener events once all the graphical elements have\n        // been drawn for first time.\n        if (index === 0) {\n            this.graphControls($queryDiv, $graphDiv, true, opts, inhits);\n        }\n        // Ensure clicking on 'rect' takes user to the relevant hit on all\n        // browsers.\n        this.setupClick($graphDiv);\n    }\n}\n\nvar HitsOverview = Grapher(Graph);\nexport default HitsOverview;\n","import * as d3 from 'd3';\nimport _ from 'underscore';\nimport Grapher from 'grapher';\nimport * as Helpers from './visualisation_helpers';\n\n/**\n * Renders Length Distribution of all hits per query\n */\n\nclass Graph {\n    static canCollapse() {\n        return true;\n    }\n\n    static name() {\n        return 'Length distribution of matching hit sequences';\n    }\n\n    static className() {\n        return 'length-distribution';\n    }\n\n    static graphId(props) {\n        return 'length_'+props.query.number;\n    }\n\n    static dataName(props) {\n        return 'length-distribution-'+props.query.id;\n    }\n\n    constructor($svg_container, props) {\n        this.query = props.query;\n        this._seq_type = Helpers.get_seq_type(props.algorithm);\n        this.svg_container = $svg_container;\n        if (props.algorithm == 'blastx') {\n            this.query_length = this.query.length / 3;\n        } else if (props.algorithm == 'tblastn') {\n            this.query_length = this.query.length * 3;\n        } else {\n            this.query_length = this.query.length;\n        }\n        this._margin = {top: 30, right: 25, bottom: 55, left: 12.5};\n        this.initiate($svg_container.width(), $svg_container.height());\n    }\n\n    initiate(width, height) {\n        this._width = width - this._margin.left - this._margin.right;\n        this._height = height - this._margin.top - this._margin.bottom;\n        this.svg = d3.select(this.svg_container[0]).insert('svg', ':first-child')\n            .attr('width', this._width + this._margin.right + this._margin.left)\n            .attr('height', this._height + this._margin.top + this._margin.bottom)\n            .append('g')\n            .attr('transform','translate('+this._margin.left+','+this._margin.top+')');\n        this.hit_lengths();\n        this.define_scale_and_bins();\n        this.update_data();\n        this.draw();\n    }\n\n    draw() {\n        this.draw_rectangles();\n        this.draw_query_line();\n        this.draw_axes();\n    }\n\n    define_scale_and_bins() {\n        this._scale_x = d3.scaleLinear()\n            .domain([\n                0,\n                (d3.max([this.query_length, d3.max(this._data)]) * 1.01)\n            ]).nice()\n            .range([0, this._width]);\n        this._bins = d3.bin()\n            .domain(this._scale_x.domain())\n            .thresholds(this._scale_x.ticks(50))(this._data);\n        this._scale_y = d3.scaleLinear()\n            .domain([0, d3.max(this._bins, function(d) { return d.length; })])\n            .range([this._height, 0]).nice();\n    }\n\n    hit_lengths() {\n        this._data = _.map(this.query.hits, _.iteratee('length'));\n    }\n\n    setupResponsiveness() {\n        var currentWidth = $(window).width();\n        console.log('cureent '+currentWidth);\n        var debounced_draw = _.debounce(_.bind(function () {\n            if (currentWidth != $(window).width()) {\n                console.log('redraw initiated '+this._height);\n                this.draw();\n                currentWidth = $(window).width();\n            }\n        }, this), 125);\n        $(window).resize(debounced_draw);\n    }\n\n    tick_formatter(seq_type) {\n        var ticks = this._scale_x.ticks();\n        var prefix = d3.format('~s');\n        var suffixes = {amino_acid: 'aa', nucleic_acid: 'bp'};\n        return function (d) {\n            if (d === 0) { return ; }\n            if (_.indexOf(ticks,d) >= 0) {\n                if (suffixes[seq_type] == 'aa') {\n                    return `${d} ${suffixes[seq_type]}`;\n                } else {\n                    return `${prefix(d)}${suffixes[seq_type]}`.replace(/([a-zA-Z]+)/, ' $1');\n                }\n            } else {\n                return ;\n            }\n        };\n    }\n\n    update_data() {\n        var self = this;\n        var data2 = [];\n        this._bins.map(function (bin) {\n            var inner_data = [];\n            bin.reverse();\n            var y0 = bin.length;\n            bin.map(function (d,i) {\n                var y1 = bin.length - (i+1);\n                var len_index = _.findIndex(self.query.hits, {length: d});\n                var evalue = self.query.hits[len_index].hsps[0].evalue;\n                var item = {\n                    value: d,\n                    id: self.query.hits[len_index].id,\n                    evalue: evalue,\n                    url: '#Query_'+self.query.number+'_hit_'+self.query.hits[len_index].number,\n                    y0: y0,\n                    y1: y0 += (y1 - y0),\n                    color: Helpers.get_colors_for_evalue(evalue,self.query.hits)\n                };\n                inner_data.push(item);\n            });\n            var item = {data: inner_data, x: bin.x0, dx: bin.x1, length: bin.length};\n            data2.push(item);\n        });\n        this._update_data = data2;\n    }\n\n    draw_rectangles() {\n        var self = this;\n        var bar = this.svg.selectAll('.bar')\n            .data(this._update_data)\n            .enter().append('g')\n            .attr('class', 'g')\n            .attr('transform', function(d) {\n                return 'translate('+(self._scale_x(d.x)+self._margin.left)+',0)';\n            });\n\n        bar.selectAll('rect')\n            .data(function (d) { return d.data; })\n            .enter().append('a')\n            .attr('xlink:href', function(i) { return i.url; })\n            .append('rect')\n            .attr('class','bar')\n            .attr('title', function(i) {\n                return i.id+' '+'<br>E value: '+Helpers.prettify_evalue(i.evalue)+'<br>Length: '+i.value;\n            })\n            .attr('x', 1)\n            .attr('y', function(i) { return (self._scale_y(i.y0)); })\n            .attr('width', self._scale_x(this._bins[1].x0) - self._scale_x(this._bins[0].x0) - 1)\n            .attr('height', function (i) { return self._scale_y(i.y1) - self._scale_y(i.y0); })\n            .attr('fill', function(i) {\n                return i.color;\n            });\n    }\n\n    draw_query_line() {\n        var query_line = this.svg.append('g')\n            .attr('class','query_line')\n            .attr('transform','translate('+(this._margin.left+this._scale_x(this.query_length))+',0)');\n\n        query_line.append('rect')\n            .attr('x',1)\n            .attr('class','bar')\n            .attr('width',4)\n            .attr('height',this._height)\n            .style('fill','#c74f14');\n\n        query_line.append('text')\n            .attr('dy', '0.75em')\n            .attr('y', -10)\n            .attr('x', 2)\n            .attr('text-anchor','start')\n            .text('Query')\n            .style('fill','#000')\n            .attr('transform','rotate(-45)');\n    }\n\n    draw_axes() {\n        var space, len;\n        len = this._scale_y.ticks().length;\n        if (len >= 5) {\n            space = 5;\n        } else {\n            space = len;\n        }\n        var formatter = this.tick_formatter(this._seq_type.subject_seq_type);\n        var x_axis = d3.axisTop(this._scale_x)\n            .ticks(50)\n            .tickFormat(formatter);\n        var y_axis = d3.axisLeft(this._scale_y)\n            .tickValues(this._scale_y.ticks(space))\n            .tickSizeOuter(0)\n            .tickFormat(function (e) {\n                if (Math.floor(e) != e) {\n                    return ;\n                }\n                return e;\n            });\n        var ticks = this._scale_y.ticks();\n        for (var i in ticks) {\n            if (ticks[i] % 1 != 0) {\n                y_axis.tickValues(d3.range(0, d3.max(this._bins, function(d) { return d.length; })+1));\n                break;\n            }\n        }\n        var self = this;\n        var xContainer = this.svg.append('g')\n            .attr('class', 'axis axis--x')\n            .attr('transform', 'translate('+this._margin.left+','+this._height+')')\n            .call(x_axis);\n\n        xContainer.selectAll('line').attr('y2',function (d) {\n            var ticks = self._scale_x.ticks();\n            if (_.indexOf(ticks, d) >= 0) {\n                return 7;\n            } else {\n                return 4;\n            }\n        });\n\n        xContainer.selectAll('text').style('text-anchor','end')\n            .attr('x', '-8px')\n            .attr('y', '3px')\n            .attr('dy', '0')\n            .attr('transform','rotate(-90)');\n\n        this.svg.append('g')\n            .attr('class','axis axis--y')\n            .attr('transform','translate('+this._margin.left+',0)')\n            .call(y_axis);\n    }\n}\n\nvar LengthDistribution = Grapher(Graph);\nexport default LengthDistribution;\n","import React, { Component, createRef } from 'react';\nimport _ from 'underscore';\n\nimport HitsOverview from './hits_overview';\nimport LengthDistribution from './length_distribution'; // length distribution of hits\nimport Utils from './utils';\nimport { fastqToFasta } from './fastq_to_fasta';\nimport CollapsePreferences from './collapse_preferences';\nimport './jquery_world';\n\n/**\n * Query component displays query defline, graphical overview, length\n * distribution, and hits table.\n */\nexport class ReportQuery extends Component {\n    // Each update cycle will cause all previous queries to be re-rendered.\n    // We avoid that by implementing shouldComponentUpdate life-cycle hook.\n    // The trick is to simply check if the components has recieved props\n    // before.\n    shouldComponentUpdate() {\n        // If the component has received props before, query property will\n        // be set on it. If it is, we return false so that the component\n        // is not re-rendered. If the query property is not set, we return\n        // true: this must be the first time react is trying to render the\n        // component.\n        return !this.props.query;\n    }\n    // Kind of public API //\n\n    /**\n     * Returns the id of query.\n     */\n    domID() {\n        return 'Query_' + this.props.query.number;\n    }\n\n    queryLength() {\n        return this.props.query.length;\n    }\n\n    /**\n     * Returns number of hits.\n     */\n    numhits() {\n        return this.props.query.hits.length;\n    }\n    headerJSX() {\n        var meta = `Length: ${this.queryLength().toLocaleString()}`;\n\n        if (this.props.showQueryCrumbs) {\n            meta = `query ${this.props.query.number}. ${meta}`;\n        }\n        return <div className=\"section-header border-b border-seqorange justify-between w-full flex flex-col sm:flex-row gap-4\">\n            <h3 className=\"text-base cursor-pointer flex flex-col sm:flex-row items-start\">\n                <strong>Query=<span className=\"ml-1\">{this.props.query.id}</span></strong>\n                <span className=\"ml-1\">{this.props.query.title}</span>\n            </h3>\n            <span className=\"label first-letter:capitalize text-sm text-right font-normal text-inherit pt-0 px-0\">{meta}</span>\n        </div>;\n    }\n\n    hitsListJSX() {\n        return <div className=\"pt-0 px-0 pb-px\">\n            <HitsOverview key={'GO_' + this.props.query.number} query={this.props.query} program={this.props.program} collapsed={this.props.veryBig} />\n            <LengthDistribution key={'LD_' + this.props.query.id} query={this.props.query} algorithm={this.props.program} />\n            <HitsTable key={'HT_' + this.props.query.number} query={this.props.query} imported_xml={this.props.imported_xml} />\n        </div>;\n    }\n\n    noHitsJSX() {\n        return <div className=\"pt-0 px-0 pb-px\">\n            <strong> ****** No BLAST hits found ****** </strong>\n        </div>;\n    }\n\n    render() {\n        return (\n            <div className=\"resultn mt-1.5\" id={this.domID()}\n                data-query-len={this.props.query.length}\n                data-algorithm={this.props.program}>\n                {this.headerJSX()}\n                {this.numhits() && this.hitsListJSX() || this.noHitsJSX()}\n            </div>\n        );\n    }\n}\n\n\n/**\n * Query widget for Search component.\n */\nexport class SearchQueryWidget extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            value: $('input#input_sequence').val() || ''\n        };\n        this.value = this.value.bind(this);\n        this.clear = this.clear.bind(this);\n        this.focus = this.focus.bind(this);\n        this.isEmpty = this.isEmpty.bind(this);\n        this.textarea = this.textarea.bind(this);\n        this.controls = this.controls.bind(this);\n        this.handleInput = this.handleInput.bind(this);\n        this.hideShowButton = this.hideShowButton.bind(this);\n        this.indicateError = this.indicateError.bind(this);\n        this.indicateNormal = this.indicateNormal.bind(this);\n        this.type = this.type.bind(this);\n        this.guessSequenceType = this.guessSequenceType.bind(this);\n        this.preProcessSequence = this.preProcessSequence.bind(this);\n        this.notify = this.notify.bind(this);\n\n        this.textareaRef = createRef();\n        this.controlsRef = createRef();\n    }\n\n\n    // LIFECYCLE Methods\n\n    componentDidMount() {\n        $('body').click(function () {\n            $('[data-notifications] [data-role=notification].active').hide('drop', { direction: 'up' }).removeClass('active');\n        });\n    }\n\n    componentDidUpdate() {\n        this.hideShowButton();\n        this.preProcessSequence();\n        this.props.onSequenceChanged(this.residuesCount());\n\n        var type = this.type();\n        if (!type || type !== this._type) {\n            this._type = type;\n            this.notify(type);\n            this.props.onSequenceTypeChanged(type);\n        }\n    }\n\n    // Kind of public API. //\n\n    /**\n     * Returns query sequence if no argument is provided (or null or undefined\n     * is provided as argument). Otherwise, sets query sequence to the given\n     * value and returns `this`.\n     *\n     * Default/initial state of query sequence is an empty string. Caller must\n     * explicitly provide empty string as argument to \"reset\" query sequence.\n     */\n    value(val) {\n        if (val == null) {\n            // i.e., val is null or undefined\n            return this.state.value;\n        }\n        else {\n            this.setState({\n                value: val\n            });\n            return this;\n        }\n    }\n\n    residuesCount() {\n        const sequence = this.value();\n        const lines = sequence.split('\\n');\n        const residuesCount = lines.reduce((count, line) => {\n            if (!line.startsWith('>')) {\n                return count + line.length;\n            }\n            return count;\n        }, 0);\n\n        return residuesCount;\n    }\n\n    /**\n     * Clears textarea. Returns `this`.\n     *\n     * Clearing textarea also causes it to be focussed.\n     */\n    clear() {\n        return this.value('').focus();\n    }\n\n    /**\n     * Focuses textarea. Returns `this`.\n     */\n    focus() {\n        this.textarea().focus();\n        return this;\n    }\n\n    /**\n     * Returns true if query is absent ('', undefined, null), false otherwise.\n     */\n    isEmpty() {\n        return !this.value();\n    }\n\n\n    // Internal helpers. //\n\n    textarea() {\n        return $(this.textareaRef.current);\n    }\n\n    controls() {\n        return $(this.controlsRef.current);\n    }\n\n    handleInput(evt) {\n        this.value(evt.target.value);\n    }\n\n    /**\n     * Hides or shows 'clear sequence' button.\n     *\n     * Rendering the 'clear sequence' button takes into account presence or\n     * absence of a scrollbar.\n     *\n     * Called by `componentDidUpdate`.\n     */\n    hideShowButton() {\n        if (!this.isEmpty()) {\n            // Calculation below is based on -\n            // http://chris-spittles.co.uk/jquery-calculate-scrollbar-width/\n            // FIXME: can reflow be avoided here?\n            var textareaNode = this.textarea()[0];\n            var sequenceControlsRight = textareaNode.offsetWidth - textareaNode.clientWidth;\n            this.controls().css('right', sequenceControlsRight + 17);\n            this.controls().removeClass('hidden');\n        }\n        else {\n            // FIXME: what are lines 1, 2, & 3 doing here?\n            this.textarea().parent().removeClass('has-error');\n            this.$sequenceFile = $('#sequence-file');\n            this.$sequenceFile.empty();\n\n            this.controls().addClass('hidden');\n        }\n    }\n\n    /**\n     * Put red border around textarea.\n     */\n    indicateError() {\n        this.textarea().parent().addClass('has-error');\n    }\n\n    /**\n     * Put normal blue border around textarea.\n     */\n    indicateNormal() {\n        this.textarea().parent().removeClass('has-error');\n    }\n\n    /**\n     * Returns type of the query sequence (nucleotide, protein, mixed).\n     *\n     * Query widget supports executing a callback when the query type changes.\n     * Components interested in query type should register a callback instead\n     * of directly calling this method.\n     */\n    type() {\n        let sequence = this.value().trim();\n        // FASTQ detected, but we don't know if conversion has succeeded yet\n        // will notify separately if it does\n        if (sequence.startsWith('@') ) { return undefined; }\n\n        var sequences = sequence.split(/>.*/);\n\n        var type, tmp;\n\n        for (var i = 0; i < sequences.length; i++) {\n            tmp = this.guessSequenceType(sequences[i]);\n\n            // could not guess the sequence type; try the next sequence\n            if (!tmp) { continue; }\n\n            if (!type) {\n                // successfully guessed the type of atleast one sequence\n                type = tmp;\n            }\n            else if (tmp !== type) {\n                // user has mixed different type of sequences\n                return 'mixed';\n            }\n        }\n\n        return type;\n    }\n\n    preProcessSequence() {\n        var sequence = this.value();\n        var updatedSequence = fastqToFasta(sequence);\n\n        if (sequence !== updatedSequence) {\n            this.value(updatedSequence);\n            this.notify('fastq');\n        }\n    }\n\n    /**\n     * Guesses and returns the type of the given sequence (nucleotide,\n     * protein).\n     */\n    guessSequenceType(sequence) {\n        // remove 'noisy' characters\n        sequence = sequence.replace(/[^A-Z]/gi, ''); // non-letter characters\n        sequence = sequence.replace(/[NX]/gi, ''); // ambiguous  characters\n\n        // can't determine the type of ultrashort queries\n        if (sequence.length < 10) {\n            return undefined;\n        }\n\n        // count the number of putative NA\n        var putative_NA_count = 0;\n        for (var i = 0; i < sequence.length; i++) {\n            if (sequence[i].match(/[ACGTU]/i)) {\n                putative_NA_count += 1;\n            }\n        }\n\n        var threshold = 0.9 * sequence.length;\n        return putative_NA_count > threshold ? 'nucleotide' : 'protein';\n    }\n\n    notify(type) {\n        this.indicateNormal();\n        clearTimeout(this.notification_timeout);\n        // $('[data-notifications] [data-role=notification].active').hide().removeClass('active');\n\n        if (type) {\n            $('#' + type + '-sequence-notification').show('drop', { direction: 'up' }).addClass('active');\n\n            this.notification_timeout = setTimeout(function () {\n                $('[data-notifications] [data-role=notification].active').hide('drop', { direction: 'up' }).removeClass('active');\n            }, 5000);\n\n            if (type === 'mixed') {\n                this.indicateError();\n            }\n        }\n    }\n\n    render() {\n        return (\n            <div className=\"relative\">\n                <div\n                    className=\"sequence\">\n                    <textarea\n                        id=\"sequence\" ref={this.textareaRef}\n                        className=\"block w-full p-4 text-gray-900 border border-gray-300 rounded-l-lg rounded-tr-lg bg-gray-50 text-sm font-mono min-h-52 resize-y\"\n                        name=\"sequence\" value={this.state.value}\n                        rows=\"6\"\n                        required=\"required\"\n                        placeholder=\"Paste query sequence(s) or drag file\n                        containing query sequence(s) in FASTA format here ...\"\n                        spellCheck=\"false\" autoFocus\n                        onChange={this.handleInput}>\n                    </textarea>\n                </div>\n                <div\n                    className=\"hidden absolute top-2 right-2\"\n                    ref={this.controlsRef}>\n                    <button\n                        type=\"button\"\n                        className=\"border border-gray-300 rounded bg-white hover:bg-gray-200\" id=\"btn-sequence-clear\"\n                        title=\"Clear query sequence(s).\"\n                        onClick={this.clear}>\n                        <span id=\"sequence-file\"></span>\n                        <i className=\"fa fa-times w-6 h-6 p-1\"></i>\n                        <span className=\"sr-only\">Clear query sequence(s).</span>\n                    </button>\n                </div>\n            </div>\n        );\n    }\n}\n\n\n/**\n * Renders summary of all hits per query in a tabular form.\n */\n\nclass HitsTable extends Component {\n    constructor(props) {\n        super(props);\n        this.name = 'Hit sequences producing significant alignments';\n        this.collapsePreferences = new CollapsePreferences(this);\n        this.state = {\n            collapsed: this.collapsePreferences.preferenceStoredAsCollapsed()\n        };\n    }\n\n    tableJSX() {\n        var hasName = _.every(this.props.query.hits, function (hit) {\n            return hit.sciname !== '';\n        });\n\n        // Width of sequence column is 55% when species name is not shown and\n        // query coverage is.\n        var seqwidth = 55;\n        // If we are going to show species name, then reduce the width of\n        // sequence column by the width of species column.\n        if (hasName) seqwidth -= 15;\n        // If we are not going to show query coverage (i.e. for imported XML),\n        // then increase the width of sequence column by the width of coverage\n        // column.\n        if (this.props.imported_xml) seqwidth += 15;\n\n        return <table\n            className=\"table table-hover table-condensed tabular-view text-sm min-w-full mb-0\">\n            <thead>\n                <tr className=\"text-neutral-500\">\n                    <th className=\"text-left font-normal\">#</th>\n                    <th style={{ width: `${seqwidth}%` }} className=\"text-left font-normal\">Similar sequences</th>\n                    {hasName && <th className=\"text-left font-normal w-2/12\">Species</th>}\n                    {!this.props.imported_xml && <th className=\"text-right font-normal w-2/12\">Query coverage (%)</th>}\n                    <th className=\"text-right font-normal w-1/12\">Total score</th>\n                    <th className=\"text-right font-normal w-1/12\">E value</th>\n                    <th className=\"text-right font-normal w-1/12\">Identity (%)</th>\n                </tr>\n            </thead>\n            <tbody>\n                {\n                    _.map(this.props.query.hits, _.bind(function (hit) {\n                        return (\n                            <tr key={hit.number}>\n                                <td className=\"text-left\">{hit.number + '.'}</td>\n                                <td>\n                                    <a href={'#Query_' + this.props.query.number + '_hit_' + hit.number}\n                                        className=\"text-sm text-seqblue hover:text-seqorange cursor-pointer pe-1 line-clamp-1 tooltip-item\" title={`${hit.id} ${hit.title}`}>{hit.id} {hit.title}</a>\n                                </td>\n                                {hasName &&\n                                    <td className=\"pe-1 line-clamp-1 tooltip-item\" title={hit.sciname}>\n                                        {hit.sciname}\n                                    </td>\n                                }\n                                {!this.props.imported_xml && <td className=\"text-right\">{hit.qcovs}</td>}\n                                <td className=\"pe-1 text-right\">{hit.total_score}</td>\n                                <td className=\"pe-1 text-right\">{Utils.inExponential(hit.hsps[0].evalue)}</td>\n                                <td className=\"pe-1 text-right\">{Utils.inPercentage(hit.hsps[0].identity, hit.hsps[0].length)}</td>\n                            </tr>\n                        );\n                    }, this))\n                }\n            </tbody>\n        </table>;\n    }\n\n    render() {\n        return (\n            <div className={`table-hit-overview ${this.state.collapsed ? 'print:hidden' : ''}`}>\n                <div className=\"grapher-header pr-px\">\n                    <h4 className=\"inline-block pl-px m-0 caption cursor-pointer text-sm caption\" onClick={() => this.collapsePreferences.toggleCollapse()}>\n                        {this.collapsePreferences.renderCollapseIcon()}\n                        <span> {this.name}</span>\n                    </h4>\n                </div>\n                <div id={'Query_' + this.props.query.number + 'HT_' + this.props.query.number} className=\"overflow-auto md:overflow-hidden\">\n                    {!this.state.collapsed && this.tableJSX()}\n                </div>\n            </div>\n        );\n    }\n}\n","import * as d3 from 'd3';\nimport _ from 'underscore';\nimport Grapher from 'grapher';\nimport * as Helpers from './visualisation_helpers';\n\n/**\n * Renders Kablammo visualization\n *\n * JSON received from server side is modified as JSON expected by kablammo's\n * graph.js.  All the relevant information including a SVG container where\n * visual needs to be rendered, is delegated to graph.js. graph.js renders\n * kablammo visualization and has all event handlers for events performed on\n * the visual.\n *\n * Event handlers related to downloading and viewing of alignments and images\n * have been extracted from grapher.js and interface.js and directly included\n * here.\n */\n\nclass Graph {\n    static canCollapse() {\n        return true;\n    }\n\n    static name() {\n        return 'Graphical overview of aligning region(s)';\n    }\n\n    static className() {\n        return 'kablammo';\n    }\n\n    static graphId(props) {\n        return 'kablammo_'+props.query.number+'_'+props.hit.number;\n    }\n\n    static dataName(props) {\n        return `Kablammo_query-${props.query.number}_${props.query.id}_${props.hit.id}`;\n    }\n\n    constructor($svgContainer, props) {\n        this._zoom_scale_by = 1.4;\n        this._padding_x = 12;\n        this._padding_y = 50;\n\n        this._canvas_height = $svgContainer.height();\n        this._canvas_width = $svgContainer.width();\n\n        this._results = Helpers.get_seq_type(props.algorithm);\n        this._query_id = props.query.id;\n        this._subject_id = props.hit.id;\n        this._query_length = props.query.length;\n        this._subject_length = props.hit.length;\n        this._show_numbers = props.showHSPCrumbs;\n        // this._hsps = this.toKablammo(props.hit.hsps, props.query);\n        this._hsps = props.hit.hsps;\n        this._maxBitScore = props.query.hits[0].hsps[0].bit_score;\n\n        this.svgContainer_d3 = d3.select($svgContainer[0]);\n        this._svg = {};\n\n        this._svg.jq = $(this._svg.raw);\n\n        this._scales = this._create_scales();\n        this.use_complement_coords = false;\n        this._axis_ticks = 10;\n\n        this._initiate();\n        this.bindHoverHandler($svgContainer);\n    }\n\n    bindHoverHandler ($svgContainer) {\n        // Raise polygon on hover.\n        $svgContainer.find('polygon').hover(\n            function () {\n                var $g = $(this).parent();\n                $g.parent().append($g);\n            }\n        );\n    }\n\n    _initiate() {\n        this._svg.d3 =\n          this.svgContainer_d3.insert('svg', ':first-child')\n              .attr('height', this._canvas_height)\n              .attr('width', this._canvas_width);\n        this._svg.raw = this._svg.d3._groups[0][0];\n        this._render_graph();\n    }\n\n    _rotate_axis_labels(text, text_anchor, dx, dy) {\n        text.style('text-anchor', text_anchor)\n            .attr('x', dx)\n            .attr('y', dy)\n        // When axis orientation is \"bottom\", d3 automataically applies a 0.71em\n        // dy offset to labels. As Inkscape does not seem to properly interpret\n        // such values, force them to be zero. When calling this function, then,\n        // you must compensate by adding 0.71em worth of offset to the dy value\n        // you provide.\n            .attr('dx', 0)\n            .attr('dy', 0)\n            .attr('transform', 'rotate(-90)');\n    }\n\n    _create_axis(scale, orientation, height, text_anchor, dx, dy, seq_type) {\n        var formatter = Helpers.tick_formatter(scale, seq_type);\n        var tvalues = scale.ticks();\n        var axis;\n        tvalues.pop();\n        if (orientation === 'top') {\n            axis = d3.axisTop(scale)\n        } else {\n            axis = d3.axisBottom(scale)\n        }\n\n        axis.ticks(this._axis_ticks)\n            .tickValues(tvalues.concat(scale.domain()))\n            .tickFormat(formatter)\n\n        var container = this._svg.d3.append('g')\n            .attr('class', 'axis')\n            .attr('transform', 'translate(0,' + height + ')')\n            .call(axis);\n        this._rotate_axis_labels(container.selectAll('text'), text_anchor, dx, dy);\n        return container;\n    }\n\n    _is_domain_within_orig(original_domain, new_domain) {\n        return original_domain[0] <= new_domain[0] && original_domain[1] >= new_domain[1];\n    }\n\n    _zoom_scale(scale, original_domain, zoom_from, scale_by) {\n        var l = scale.domain()[0];\n        var r = scale.domain()[1];\n\n        l = zoom_from - (zoom_from - l) / scale_by;\n        r = zoom_from + (r - zoom_from) / scale_by;\n\n        l = Math.round(l);\n        r = Math.round(r);\n        if(r - l < this._axis_ticks)\n            return;\n\n        var new_domain = [l, r];\n        if(this._is_domain_within_orig(original_domain, new_domain))\n            scale.domain(new_domain);\n        else\n            scale.domain(original_domain);\n    }\n\n    _pan_scale(existing_scale, original_domain, delta) {\n        var scale = (existing_scale.domain()[1] - existing_scale.domain()[0]) / (existing_scale.range()[1] - existing_scale.range()[0]);\n        var scaled_delta = -delta * scale;\n\n        var domain = existing_scale.domain();\n        var l = domain[0] + scaled_delta;\n        var r = domain[1] + scaled_delta;\n        var new_domain = [l, r];\n\n        if(this._is_domain_within_orig(original_domain, new_domain))\n            existing_scale.domain(new_domain);\n    }\n\n    _render_polygons() {\n        var self = this;\n\n        // Remove all existing child elements.\n        this._svg.d3.selectAll('*').remove();\n\n        this._polygons = this._svg.d3.selectAll('polygon')\n            .data(this._hsps.slice().reverse())\n            .enter()\n            .append('g')\n            .attr('class','polygon');\n\n        this._polygons.append('polygon')\n            .attr('class', 'hit')\n            .attr('fill', function(hsp) {\n                return self.determine_colour(hsp.bit_score / self._maxBitScore);\n            }).attr('points', function(hsp) {\n                // We create query_x_points such that the 0th element will *always* be\n                // on the left of the 1st element, regardless of whether the axis is\n                // drawn normally (i.e., ltr) or reversed (i.e., rtl). We do the same\n                // for subject_x_points. As our parsing code guarantees start < end, we\n                // decide on this ordering based on the reading frame, because it\n                // determines whether our axis will be reversed or not.\n                var query_x_points = [self._scales.query.scale(hsp.qstart), self._scales.query.scale(hsp.qend)];\n                var subject_x_points = [self._scales.subject.scale(hsp.sstart), self._scales.subject.scale(hsp.send)];\n\n                // Axis will be rendered with 5' end on right and 3' end on left, so we\n                // must reverse the order of vertices for the polygon we will render to\n                // prevent the polygon from \"crossing over\" itself.\n                if(!self.use_complement_coords) {\n                    if(hsp.qframe < 0)\n                        query_x_points.reverse();\n                    if(hsp.sframe < 0)\n                        subject_x_points.reverse();\n                }\n\n                var points = [\n                    [query_x_points[0],   self._scales.query.height   + 1],\n                    [subject_x_points[0], self._scales.subject.height - 1],\n                    [subject_x_points[1], self._scales.subject.height - 1],\n                    [query_x_points[1],   self._scales.query.height   + 1],\n                ];\n\n                return points.map(function(point) {\n                    return point[0] + ',' + point[1];\n                }).join(' ');\n            });\n\n        if (self._show_numbers) {\n            this._polygons.append('text')\n                .attr('x', function(hsp) {\n                    var query_x_points = [self._scales.query.scale(hsp.qstart), self._scales.query.scale(hsp.qend)];\n                    var subject_x_points = [self._scales.subject.scale(hsp.sstart), self._scales.subject.scale(hsp.send)];\n                    var middle1 = (query_x_points[0] + subject_x_points[0]) * 0.5;\n                    var middle2 = (query_x_points[1] + subject_x_points[1]) * 0.5;\n                    return (middle2 + middle1) * 0.5;\n                })\n                .attr('y', function(hsp) {\n                    var a = self._scales.query.height;\n                    var b = self._scales.subject.height;\n                    var middle = ( b - a ) / 2;\n                    return a + middle + 2; // for font-height 10px\n                })\n                .text(function(hsp) {\n                    return Helpers.toLetters(hsp.number);\n                });\n        }\n\n    }\n\n    _overlaps(s1, e1, s2, e2) {\n        return Math.min(e1, e2) > Math.max(s1, s2);\n    }\n\n    _rects_overlap(rect1, rect2, padding) {\n        padding = padding || 0;\n\n        return this._overlaps(\n            rect1.left - padding,\n            rect1.right + padding,\n            rect2.left,\n            rect2.right\n        ) && this._overlaps(\n            rect1.top - padding,\n            rect1.bottom + padding,\n            rect2.top,\n            rect2.bottom\n        );\n    }\n\n    _render_axes() {\n        var query_axis = this._create_axis(this._scales.query.scale,   'top',\n            this._scales.query.height,   'start', '9px', '2px',\n            this._results.query_seq_type);\n        var subject_axis = this._create_axis(this._scales.subject.scale, 'bottom',\n            this._scales.subject.height, 'end',   '-11px',  '3px',\n            this._results.subject_seq_type);\n    }\n\n    _render_graph() {\n        this._render_polygons();\n        this._render_axes();\n    }\n\n    _find_nearest_scale(point) {\n        var nearest = null;\n        var smallest_distance = Number.MAX_VALUE;\n\n        var self = this;\n        Object.keys(this._scales).forEach(function(scale_name) {\n            var scale        = self._scales[scale_name].scale;\n            var scale_height = self._scales[scale_name].height;\n\n            var delta = Math.abs(scale_height - point[1]);\n            if(delta < smallest_distance) {\n                nearest = scale;\n                smallest_distance = delta;\n            }\n        });\n\n        return nearest;\n    }\n\n    _create_scales() {\n        var query_range   = [this._padding_x, this._canvas_width - this._padding_x];\n        var subject_range = [this._padding_x, this._canvas_width - this._padding_x];\n\n        // If we wish to show the HSPs relative to the original (input or DB)\n        // sequence rather than its complement (i.e., use_complement_coords = false),\n        // even when the HSPs lie on the complement, then we must display the axis\n        // with its 5' end on the right and 3' end on the left. In this case, you can\n        // imagine the invisible complementary strand (with its 5' end on left and 3'\n        // end on right) floating above the rendered original strand, with the hits\n        // actually falling on the complementary strand.\n        //\n        // If we show the HSPs relative to the complementary strand (i.e.,\n        // use_complement_coords = true), then we *always* wish to show the axis with\n        // its 5' end on the left and 3' end on the right.\n        //\n        // Regardless of whether this value is true or falase, the rendered polygons\n        // will be precisely the same (meaning down to the pixel -- they will be\n        // *identical*). Only the direction of the axis, and the coordinates of\n        // points falling along it, change.\n        if(!this.use_complement_coords) {\n            if(this._hsps[0].qframe < 0)\n                query_range.reverse();\n            if(this._hsps[0].sframe < 0)\n                subject_range.reverse();\n        }\n\n        var query_scale = d3.scaleLinear()\n            .domain([1, this._query_length])\n            .range(query_range);\n        var subject_scale = d3.scaleLinear()\n            .domain([1, this._subject_length])\n            .range(subject_range);\n        query_scale.original_domain = query_scale.domain();\n        subject_scale.original_domain = subject_scale.domain();\n\n        var query_height = this._padding_y;\n        var subject_height = this._canvas_height - this._padding_y;\n\n        var scales = {\n            subject: { height: subject_height, scale: subject_scale },\n            query:   { height: query_height,   scale: query_scale   },\n        };\n        return scales;\n    }\n\n    _rgba_to_rgb(rgba, matte_rgb) {\n        // Algorithm taken from http://stackoverflow.com/a/2049362/1691611.\n        var normalize = function (colour) {\n            return colour.map(function (channel) { return channel / 255; });\n        };\n\n        var denormalize = function (colour) {\n            return colour.map(function (channel) { return Math.round(Math.min(255, channel * 255)); });\n        };\n\n        var norm = normalize(rgba.slice(0, 3));\n        matte_rgb = normalize(matte_rgb);\n        var alpha = rgba[3] / 255;\n\n        var rgb = [\n            (alpha * norm[0]) + (1 - alpha) * matte_rgb[0],\n            (alpha * norm[1]) + (1 - alpha) * matte_rgb[1],\n            (alpha * norm[2]) + (1 - alpha) * matte_rgb[2],\n        ];\n\n        return denormalize(rgb);\n    }\n\n    /**\n   * Determines colour of a hsp based on normalized bit-score.\n   *\n   * Taken from grapher.js\n   */\n    determine_colour(level) {\n        var graph_colour = { r: 199, g: 79, b: 20 };\n        var matte_colour = { r: 255, g: 255, b: 255 };\n        var min_opacity = 0.3;\n        var opacity = ((1 - min_opacity) * level) + min_opacity;\n        var rgb = this._rgba_to_rgb([\n            graph_colour.r,\n            graph_colour.g,\n            graph_colour.b,\n            255 * opacity\n        ], [\n            matte_colour.r,\n            matte_colour.g,\n            matte_colour.b,\n        ]);\n        return 'rgb(' + rgb.join(',') + ')';\n    }\n}\n\nvar Kablammo = Grapher(Graph);\nexport default Kablammo;\n","class HitButtons {\n    constructor(hit) {\n        this.hit = hit;\n    }\n\n    buttons() {\n        return [];\n    }\n}\n\nexport default HitButtons;","import React, { Component } from 'react';\nimport _ from 'underscore';\n\nimport HSPOverview from './kablammo';\nimport downloadFASTA from './download_fasta';\nimport AlignmentExporter from './alignment_exporter'; // to download textual alignment\nimport HitButtons from 'hit_buttons';\n\n/**\n * Component for each hit. Receives props from Report. Has no state.\n */\nexport default class extends Component {\n    constructor(props) {\n        super(props);\n        this.accession = this.accession.bind(this);\n        this.sequenceID = this.sequenceID.bind(this);\n        this.hitLength = this.hitLength.bind(this);\n        this.numHSPs = this.numHSPs.bind(this);\n        this.domID = this.domID.bind(this);\n        this.databaseIDs = this.databaseIDs.bind(this);\n        this.showSequenceViewer = this.showSequenceViewer.bind(this);\n        this.viewSequenceLink = this.viewSequenceLink.bind(this);\n        this.downloadFASTA = this.downloadFASTA.bind(this);\n        this.downloadAlignment = this.downloadAlignment.bind(this);\n        this.headerJSX = this.headerJSX.bind(this);\n        this.contentJSX = this.contentJSX.bind(this);\n        this.hitLinks = this.hitLinks.bind(this);\n        this.viewSequenceButton = this.viewSequenceButton.bind(this);\n        this.downloadFASTAButton = this.downloadFASTAButton.bind(this);\n        this.hit_buttons = new HitButtons(this);\n    }\n    shouldComponentUpdate() {\n        return !this.props.hit;\n    }\n    /**\n     * Returns accession number of the hit sequence.\n     */\n    accession() {\n        return this.props.hit.accession;\n    }\n\n    /**\n     * Returns id of the hit sequence.\n     */\n    sequenceID() {\n        return this.props.hit.id;\n    }\n\n    /**\n     * Returns length of the hit sequence.\n     */\n    hitLength() {\n        return this.props.hit.length;\n    }\n\n    numHSPs() {\n        return this.props.hit.hsps.length;\n    }\n\n    // Internal helpers. //\n\n    /**\n     * Returns id that will be used for the DOM node corresponding to the hit.\n     */\n    domID() {\n        return 'Query_' + this.props.query.number + '_hit_' + this.props.hit.number;\n    }\n\n    databaseIDs() {\n        return _.map(this.props.querydb, _.iteratee('id'));\n    }\n\n    showSequenceViewer() {\n        this.props.showSequenceModal(this.viewSequenceLink());\n    }\n\n    viewSequenceLink() {\n        var sequenceIDs = encodeURIComponent(this.sequenceID());\n        var databaseIDs = encodeURIComponent(this.databaseIDs());\n        return `get_sequence/?sequence_ids=${sequenceIDs}&database_ids=${databaseIDs}`;\n    }\n\n    downloadFASTA(_event) {\n        var sequenceIDs = [this.sequenceID()];\n        downloadFASTA(sequenceIDs, this.databaseIDs());\n    }\n\n    // Event-handler for exporting alignments.\n    // Calls relevant method on AlignmentExporter defined in alignment_exporter.js.\n    downloadAlignment(_event) {\n        var hsps = _.map(this.props.hit.hsps, _.bind(function (hsp) {\n            hsp.query_id = this.props.query.id;\n            hsp.hit_id = this.props.hit.id;\n            return hsp;\n        }, this));\n\n        var aln_exporter = new AlignmentExporter();\n        aln_exporter.export_alignments(hsps, this.props.query.id + '_' + this.props.hit.id);\n    }\n\n    headerJSX() {\n        var meta = `Length: ${this.hitLength().toLocaleString()}`;\n\n        if (this.props.showQueryCrumbs && this.props.showHitCrumbs) {\n            // Multiper queries, multiple hits\n            meta = `hit ${this.props.hit.number} of query ${this.props.query.number}. ${meta}`;\n        }\n        else if (this.props.showQueryCrumbs && !this.props.showHitCrumbs) {\n            // Multiple queries, single hit\n            meta = `the only hit of query ${this.props.query.number}. ${meta}`;\n        }\n        else if (!this.props.showQueryCrumbs && this.props.showHitCrumbs) {\n            // Single query, multiple hits\n            meta = `hit ${this.props.hit.number}. ${meta}`;\n        }\n\n        return <div className=\"section-header border-b border-seqorange flex flex-col sm:flex-row sm:justify-between w-full\">\n            <h4 className=\"text-sm cursor-pointer flex flex-col sm:flex-row items-start sm:items-center\" data-parent-id={`#${this.domID()}`}>\n                <div>\n                    <i className=\"fa-regular fa-square-minus print:!hidden\"></i>\n                    <strong className=\"cursor-text ml-1 print:ml-0\"> {this.props.hit.id}</strong>\n                </div>\n                <span className=\"ml-1\">{this.props.hit.title}</span>\n            </h4>\n            <span className=\"label first-letter:capitalize text-sm font-normal text-inherit cursor-text\">{meta}</span>\n        </div>;\n    }\n\n    contentJSX() {\n        return <div className=\"pt-0 px-0 pb-px\" data-parent-hit={this.domID()}>\n            {this.hitLinks()}\n            <HSPOverview key={'kablammo' + this.props.query.id} query={this.props.query}\n                hit={this.props.hit} algorithm={this.props.algorithm}\n                showHSPCrumbs={this.numHSPs() > 1 && this.numHSPs() < 27}\n                collapsed={this.props.veryBig} />\n        </div>;\n    }\n\n    hitLinks() {\n        var btns = [];\n        if (!(this.props.imported_xml || this.props.non_parse_seqids)) {\n            btns = btns.concat([\n                this.viewSequenceButton(),\n                this.downloadFASTAButton()\n            ]);\n        }\n        btns.push(this.downloadAlignmentButton());\n\n        this.hit_buttons.buttons().forEach((button) => {\n            btns.push(button);\n        });\n\n        return (\n            <div className=\"hit-links h-4 print:hidden\">\n                <label className=\"text-sm text-seqblue hover:seqorange cursor-pointer mb-0\">\n                    <input type=\"checkbox\" id={this.domID() + '_checkbox'}\n                        value={this.sequenceID()} onChange={function () {\n                            this.props.selectHit(this.domID() + '_checkbox');\n                            this.props.onChange();\n                        }.bind(this)} data-target={'#' + this.domID()}\n                    /> Select\n                </label>\n                {\n                    btns.map((btn, index) => {\n                        return [<span className=\"text-seqorange mt-0 mr-1 ml-0 mb-1 px-1\" key={`btn-${index}`}>|</span>, this.button(Object.assign(btn, { key: index }))];\n                    })\n                }\n                {\n                    this.props.hit.links.map((link, index) => {\n                        return [<span className=\"text-seqorange mt-0 mr-1 ml-0 mb-1 px-1\" key={`link-${index}`}>|</span>, this.a(link, index)];\n                    })\n                }\n            </div>\n        );\n    }\n\n    // Return JSX for view sequence button.\n    viewSequenceButton() {\n        if (this.hitLength() > 10000) {\n            return {\n                text: 'Sequence',\n                icon: 'fa-eye',\n                className: 'view-sequence',\n                title: 'Sequence too long',\n            };\n        }\n        else {\n            return {\n                text: 'Sequence',\n                icon: 'fa-eye',\n                className: 'view-sequence',\n                onClick: () => this.showSequenceViewer()\n            };\n\n        }\n    }\n\n    downloadFASTAButton() {\n        return {\n            text: 'FASTA',\n            icon: 'fa-download',\n            className: 'download-fa',\n            onClick: () => this.downloadFASTA()\n        };\n    }\n\n    downloadAlignmentButton() {\n        return {\n            text: 'Alignment',\n            icon: 'fa-download',\n            className: 'download-aln',\n            onClick: () => this.downloadAlignment()\n        };\n    }\n\n    button({ text, icon, title, className, onClick, key }) {\n        if (onClick) {\n            return <button key={key} className={`btn-link text-sm text-seqblue hover:text-seqorange cursor-pointer ${className}`}\n                title={title} onClick={onClick}><i className={`fa ${icon}`}></i> {text}\n            </button>;\n        }\n        else {\n            return <button key={key} className=\"text-sm view-sequence disabled\"\n                title={title} disabled={true}>\n                <i className={`fa ${icon}`}></i> {text}\n            </button>;\n        }\n    }\n\n    /**\n     * Render URL for sequence-viewer.\n     */\n    a(link, key) {\n        if (!link.title || !link.url) return;\n\n        let className = 'btn-link text-sm text-seqblue hover:text-seqorange cursor-pointer';\n        if (link.class) className = `${className} ${link.class}`;\n        return <a href={link.url} key={`${link.url}-${key}`} className={className} target='_blank'>\n            {link.icon && <i className={'fa ' + link.icon}></i>}\n            {' ' + link.title + ' '}\n        </a>;\n    }\n    render() {\n        return (\n            <div className=\"hit mt-1 border-l-2 border-transparent pl-1 -ml-1\" id={this.domID()} data-hit-def={this.props.hit.id}\n                data-hit-len={this.props.hit.length} data-hit-evalue={this.props.hit.evalue}>\n                {this.headerJSX()} {this.contentJSX()}\n            </div>\n        );\n    }\n}\n","import React, { useState, createRef, useEffect } from \"react\";\nimport useDetectPrint from \"react-detect-print\";\nimport _ from \"underscore\";\n\nimport Utils from \"./utils\";\nimport * as Helpers from \"./visualisation_helpers\";\n\n/**\n * Alignment viewer.\n */\n// export default class HSP extends React.Component {\nexport default function HSP(props) {\n  const hsp = props.hsp;\n  const hspRef = createRef();\n  const printing = useDetectPrint();\n  const [chars, setChars] = useState(0)\n  const [width, setWidth] = useState(window.innerWidth);\n\n  const domID = () => {\n    const { query, hit, hsp } = props;\n    return `Query_${query.number}_hit_${hit.number}_${hsp.number}`;\n  }\n\n  const hitDOM_ID = () => {\n    return \"Query_\" + props.query.number + \"_hit_\" + props.hit.number;\n  }\n\n  useEffect(() => {\n    // Attach a debounced listener to handle window resize events \n    // Updates the width state with the current window width, throttled to run at most once every 125ms\n    const handleResize = _.debounce(() => setWidth(window.innerWidth), 125);\n    window.addEventListener(\"resize\", handleResize);\n\n    // TODO: print handler\n    draw();\n  }, [])\n\n  useEffect(() => {\n    draw(printing);\n  }, [printing, width])\n  \n  const draw = (printing = false) => {\n    const charWidth = props.getCharacterWidth();\n    const containerWidth = printing ? 900 : $(hspRef.current).width();\n    setChars(Math.floor((containerWidth - 4) / charWidth))\n  }\n\n  /**\n   * Returns an array of span elements or plain strings (React automatically\n   * adds span tag around strings). This array is passed as it is to JSX to be\n   * rendered just above the pairwise alignment (see render method).\n   *\n   * We cannot return a string from this method otherwise we wouldn't be able\n   * to use JSX elements to format text (like, superscript).\n   */\n  const hspStats = () => {\n    // An array to hold text or span elements that make up the line.\n    let line = [];\n\n    // Bit score and total score.\n    line.push(\n      `Score: ${Utils.inTwoDecimal(hsp.bit_score)} (${hsp.score}), `\n    );\n\n    // E value\n    line.push(\"E value: \");\n    line.push(Utils.inExponential(hsp.evalue));\n    line.push(\", \");\n\n    // Identity\n    line.push([\n      `Identity: ${Utils.inFraction(\n        hsp.identity,\n        hsp.length\n      )} (${Utils.inPercentage(hsp.identity, hsp.length)}), `,\n    ]);\n\n    // Positives (for protein alignment).\n    if (\n      props.algorithm === \"blastp\" ||\n      props.algorithm === \"blastx\" ||\n      props.algorithm === \"tblastn\" ||\n      props.algorithm === \"tblastx\"\n    ) {\n      line.push(\n        `Positives: ${Utils.inFraction(\n          hsp.positives,\n          hsp.length\n        )} (${Utils.inPercentage(hsp.positives, hsp.length)}), `\n      );\n    }\n\n    // Gaps\n    line.push(\n      `Gaps: ${Utils.inFraction(\n        hsp.gaps,\n        hsp.length\n      )} (${Utils.inPercentage(hsp.gaps, hsp.length)})`\n    );\n\n    // Query coverage\n    //line.push(`Query coverage: ${this.hsp.qcovhsp}%, `)\n\n    switch (props.algorithm) {\n      case \"tblastx\":\n        line.push(\n          `, Frame: ${Utils.inFraction(hsp.qframe, hsp.sframe)}`\n        );\n        break;\n      case \"blastn\":\n        line.push(\n          `, Strand: ${hsp.qframe > 0 ? \"+\" : \"-\"} / ${\n            hsp.sframe > 0 ? \"+\" : \"-\"\n          }`\n        );\n        break;\n      case \"blastx\":\n        line.push(`, Query Frame: ${hsp.qframe}`);\n        break;\n      case \"tblastn\":\n        line.push(`, Hit Frame: ${hsp.sframe}`);\n        break;\n    }\n\n    return line;\n  }\n\n\n  // Width of the coordinate part of hsp lines. Essentially the length of\n  // the largest coordinate.\n  const hspLinesWidth = () => {\n    return _.max(\n      _.map(\n        [hsp.qstart, hsp.qend, hsp.sstart, hsp.send],\n        (n) => {\n          return n.toString().length;\n        }\n      )\n    );\n  }\n\n  /**\n   * Returns array of pre tags containing the three query, middle, and subject\n   * lines that together comprise one 'rendered line' of HSP.\n   */\n  const hspLines = () => {\n    // Space reserved for showing coordinates\n    const width = hspLinesWidth();\n\n    // Number of residues we can draw per line is the total number of\n    // characters we can have in a line minus space required to show left\n    // and right coordinates minus 10 characters reserved for displaying\n    // the words Query, Subject and three blank spaces per line.\n    const adjustedLineWidth = chars - 2 * width - 10;\n\n    // Number of lines of pairwise-alignment (i.e., each line consists of 3\n    // lines). We draw as many pre tags.\n    const lines = Math.ceil(hsp.length / adjustedLineWidth);\n\n    let pp = [];\n    let nqseq = getNqseq();\n    let nsseq = getNsseq();\n    for (let i = 1; i <= lines; i++) {\n      let seq_start_index = adjustedLineWidth * (i - 1);\n      let seq_stop_index = seq_start_index + adjustedLineWidth;\n\n      let lqstart = nqseq;\n      let lqseq = hsp.qseq.slice(seq_start_index, seq_stop_index);\n      let lqend =\n        nqseq +\n        (lqseq.length - lqseq.split(\"-\").length) *\n          qframe_unit() *\n          qframe_sign();\n      nqseq = lqend + qframe_unit() * qframe_sign();\n\n      let lmseq = hsp.midline.slice(seq_start_index, seq_stop_index);\n\n      let lsstart = nsseq;\n      let lsseq = hsp.sseq.slice(seq_start_index, seq_stop_index);\n      let lsend =\n        nsseq +\n        (lsseq.length - lsseq.split(\"-\").length) *\n          sframe_unit() *\n          sframe_sign();\n      nsseq = lsend + sframe_unit() * sframe_sign();\n\n      pp.push(\n        <pre key={hsp.number + \",\" + i} className=\"pre-item m-0 p-0 rounded-none border-0 bg-inherit whitespace-pre-wrap break-keep mt-1 tracking-wider\">\n          <span className=\"text-gray-500\">\n            {`Query   ${formatCoords(lqstart, width)} `}\n          </span>\n          <span>{lqseq}</span>\n          <span className=\"text-gray-500\">{` ${lqend}`}</span>\n          <br />\n          <span className=\"text-gray-500\">\n            {`${formatCoords(\"\", width + 8)} `}\n          </span>\n          <span>{lmseq}</span>\n          <br />\n          <span className=\"text-gray-500\">\n            {`Subject ${formatCoords(lsstart, width)} `}\n          </span>\n          <span>{lsseq}</span>\n          <span className=\"text-gray-500\">{` ${lsend}`}</span>\n          <br />\n        </pre>\n      );\n    }\n\n    return pp;\n  }\n\n\n  // Alignment start coordinate for query sequence.\n  //\n  // This will be qstart or qend depending on the direction in which the\n  // (translated) query sequence aligned.\n  const getNqseq = () => {\n    switch (props.algorithm) {\n      case \"blastp\":\n      case \"blastx\":\n      case \"tblastn\":\n      case \"tblastx\":\n        return hsp.qframe >= 0 ? hsp.qstart : hsp.qend;\n      case \"blastn\":\n        // BLASTN is a bit weird in that, no matter which direction the query\n        // sequence aligned in, qstart is taken as alignment start coordinate\n        // for query.\n        return hsp.qstart;\n    }\n  }\n\n  // Alignment start coordinate for subject sequence.\n  //\n  // This will be sstart or send depending on the direction in which the\n  // (translated) subject sequence aligned.\n  const getNsseq = () => {\n    switch (props.algorithm) {\n      case \"blastp\":\n      case \"blastx\":\n      case \"tblastn\":\n      case \"tblastx\":\n        return hsp.sframe >= 0 ? hsp.sstart : hsp.send;\n      case \"blastn\":\n        // BLASTN is a bit weird in that, no matter which direction the\n        // subject sequence aligned in, sstart is taken as alignment\n        // start coordinate for subject.\n        return hsp.sstart;\n    }\n  }\n\n  // Jump in query coordinate.\n  //\n  // Roughly,\n  //\n  //   qend = qstart + n * qframe_unit\n  //\n  // This will be 1 or 3 depending on whether the query sequence was\n  // translated or not.\n  const qframe_unit = () => {\n    switch (props.algorithm) {\n      case \"blastp\":\n      case \"blastn\":\n      case \"tblastn\":\n        return 1;\n      case \"blastx\":\n      // _Translated_ nucleotide query against protein database.\n      case \"tblastx\":\n        // _Translated_ nucleotide query against translated\n        // nucleotide database.\n        return 3;\n    }\n  }\n\n  // Jump in subject coordinate.\n  //\n  // Roughly,\n  //\n  //   send = sstart + n * sframe_unit\n  //\n  // This will be 1 or 3 depending on whether the subject sequence was\n  // translated or not.\n  const sframe_unit = () => {\n    switch (props.algorithm) {\n      case \"blastp\":\n      case \"blastx\":\n      case \"blastn\":\n        return 1;\n      case \"tblastn\":\n        // Protein query against _translated_ nucleotide database.\n        return 3;\n      case \"tblastx\":\n        // Translated nucleotide query against _translated_\n        // nucleotide database.\n        return 3;\n    }\n  }\n\n  // If we should add or subtract qframe_unit from qstart to arrive at qend.\n  //\n  // Roughly,\n  //\n  //   qend = qstart + (qframe_sign) * n * qframe_unit\n  //\n  // This will be +1 or -1, depending on the direction in which the\n  // (translated) query sequence aligned.\n  const qframe_sign = () => {\n    return hsp.qframe >= 0 ? 1 : -1;\n  }\n\n  // If we should add or subtract sframe_unit from sstart to arrive at send.\n  //\n  // Roughly,\n  //\n  //   send = sstart + (sframe_sign) * n * sframe_unit\n  //\n  // This will be +1 or -1, depending on the direction in which the\n  // (translated) subject sequence aligned.\n  const sframe_sign = () => {\n    return hsp.sframe >= 0 ? 1 : -1;\n  }\n\n  /**\n   * Pad given coord with ' ' till its length == width. Returns undefined if\n   * width is not supplied.\n   */\n  const formatCoords = (coord, width) => {\n    if (width) {\n      let padding = width - coord.toString().length;\n      return Array(padding + 1)\n        .join(\" \")\n        .concat([coord]);\n    }\n  }\n\n  const spanCoords = (text) => {\n    return <span className=\"text-gray-700\">{text}</span>;\n  }\n\n  return (\n    <div\n      className=\"hsp pt-px pb-5 border-l-2 border-transparent pl-1 -ml-1\"\n      id={domID()}\n      ref={hspRef}\n      data-parent-hit={hitDOM_ID()}\n    >\n      <p className=\"m-0 p-0 rounded-none border-0 bg-inherit whitespace-pre-wrap break-keep text-sm text-neutral-500 font-semibold tracking-wide\">\n        {props.showHSPNumbers &&\n          `${Helpers.toLetters(hsp.number)}. `}\n        {hspStats().map((s, i) => (\n          <span key={i}>{s}</span>\n        ))}\n      </p>\n      {hspLines()}\n    </div>\n  );\n}\n\n// Redraw if window resized.\n// $(window).resize(\n//   _.debounce(function () {\n//     _.each(HSPComponents, (comp) => {\n//       comp.draw();\n//     });\n//   }, 100)\n// );\n","/* eslint-disable no-unused-vars */\nimport { Component } from 'react';\nimport _ from 'underscore';\n\nimport { ReportQuery } from './query';\nimport Hit from './hit';\nimport HSP from './hsp';\nimport AlignmentExporter from './alignment_exporter';\n/* eslint-enable no-unused-vars */\n\nclass Hits extends Component {\n    constructor(props) {\n        super(props);\n        this.numUpdates = 0;\n        this.nextQuery = 0;\n        this.nextHit = 0;\n        this.nextHSP = 0;\n        this.maxHSPs = 10; // max HSPs to render in a cycle\n        this.state = props.state;\n        this.state.pluginResults = [];\n        this.prepareAlignmentOfSelectedHits = this.prepareAlignmentOfSelectedHits.bind(this);\n    }\n\n    componentDidMount() {\n        this.props.plugins.init(this.onPluginResultsFetched.bind(this));\n        this.componentDidUpdate(this.props, this.state);\n    }\n\n    onPluginResultsFetched(pluginResults) {\n        this.setState({ pluginResults: pluginResults });\n    }\n\n    replacePluginResults(pluginResults) {\n        if (!pluginResults) return;\n\n        const updatedResults = this.props.plugins.replacePluginResults(this.state.results, pluginResults);\n        this.setState({ results: updatedResults, pluginResults: pluginResults });\n    }\n\n    /**\n    * Called for the first time after as BLAST results have been retrieved from\n    * the server and added to this.state by fetchResults. Only summary overview\n    * and circos would have been rendered at this point. At this stage we kick\n    * start iteratively adding 1 HSP to the page every 25 milli-seconds.\n    */\n    componentDidUpdate(_prevProps, prevState) {\n        // Log to console how long the last update take?\n        // console.log((Date.now() - this.lastTimeStamp) / 1000);\n\n        // Queue next update if we have not rendered all results yet.\n        if (this.nextQuery < this.state.queries.length) {\n            // setTimeout is used to clear call stack and space out\n            // the updates giving the browser a chance to respond\n            // to user interactions.\n            setTimeout(() => this.updateState(), 25);\n        } else {\n            this.props.componentFinishedUpdating();\n        }\n\n        if (this.state.pluginResults.length > 0 && prevState.pluginResults.length == 0) {\n            this.replacePluginResults(this.state.pluginResults);\n        }\n    }\n\n    isFirstUpdate() {\n        return this.nextQuery == 0 && this.nextHit == 0 && this.nextHSP == 0;\n    }\n\n    /* eslint complexity: [\"error\", 6] */\n    /* ---------------------\n    * Push next slice of results to React for rendering.\n    */\n    updateState() {\n        var results = { items: [], numHSPsProcessed: 0 };\n        this.processQueries(results);\n\n        // Push the components to react for rendering.\n        this.numUpdates++;\n        this.lastTimeStamp = Date.now();\n        this.setState({\n            results: this.state.results.concat(results.items),\n            veryBig: this.numUpdates >= 250,\n        });\n    }\n\n    processQueries(results) {\n        while (this.nextQuery < this.state.queries.length) {\n            var query = this.state.queries[this.nextQuery];\n\n            // We may see a query multiple times during rendering because only\n            // 10 hsps are rendered in each cycle, but we want to create the\n            // corresponding Query component only the first time we see it.\n            if (this.nextHit == 0 && this.nextHSP == 0) {\n                results.items.push(this.renderReportQuery(query));\n                results.items.push(this.props.plugins.queryResult(query, this.state.pluginResults));\n            }\n\n            this.processHits(results, query);\n            this.iterateLoops(['nextQuery', 'nextHit'], query.hits.length);\n            if (results.numHSPsProcessed == this.maxHSPs) break;\n        }\n    }\n\n    processHits(results, query) {\n        while (this.nextHit < query.hits.length) {\n            var hit = query.hits[this.nextHit];\n            // We may see a hit multiple times during rendering because only\n            // 3 hsps are rendered in each cycle, but we want to create the\n            // corresponding Hit component only the first time we see it.\n            if (this.nextHSP == 0) results.items.push(this.renderHit(query, hit));\n\n            this.processHSPS(results, query, hit);\n            this.iterateLoops(['nextHit', 'nextHSP'], hit.hsps.length);\n            if (results.numHSPsProcessed == this.maxHSPs) break;\n        }\n    }\n\n    processHSPS(results, query, hit) {\n        while (this.nextHSP < hit.hsps.length) {\n            // Get nextHSP and increment the counter.\n            var hsp = hit.hsps[this.nextHSP++];\n            results.items.push(\n                this.renderHsp(query, hit, hsp)\n            );\n            results.numHSPsProcessed++;\n            if (results.numHSPsProcessed == this.maxHSPs) break;\n        }\n    }\n\n    /*\n    *  this function check if 2nd argument is reach end of it\n    */\n    iterateLoops(args, length) {\n        if (this[args[1]] != length) return;\n\n        this[args[0]]++;\n        this[args[1]] = 0;\n    }\n\n    renderHsp(query, hit, hsp) {\n        return (\n            <HSP\n                key={\n                    'Query_' +\n                        query.number +\n                        '_Hit_' +\n                        hit.number +\n                        '_HSP_' +\n                        hsp.number\n                }\n                query={query}\n                hit={hit}\n                hsp={hsp}\n                algorithm={this.state.program}\n                showHSPNumbers={hit.hsps.length > 1}\n                {...this.props}\n            />\n        );\n    }\n\n    renderHit(query, hit) {\n        return (\n            <Hit\n                key={'Query_' + query.number + '_Hit_' + hit.number}\n                query={query}\n                hit={hit}\n                algorithm={this.state.program}\n                querydb={this.state.querydb}\n                selectHit={this.selectHit}\n                imported_xml={this.state.imported_xml}\n                non_parse_seqids={this.state.non_parse_seqids}\n                showQueryCrumbs={this.state.queries.length > 1}\n                showHitCrumbs={query.hits.length > 1}\n                veryBig={this.state.veryBig}\n                onChange={this.prepareAlignmentOfSelectedHits}\n                {...this.props}\n            />\n        );\n    }\n\n    renderReportQuery(query) {\n        return (\n            <ReportQuery\n                key={'Query_' + query.id}\n                query={query}\n                program={this.state.program}\n                querydb={this.state.querydb}\n                showQueryCrumbs={this.state.queries.length > 1}\n                non_parse_seqids={this.state.non_parse_seqids}\n                imported_xml={this.state.imported_xml}\n                veryBig={this.state.veryBig}\n            />\n        );\n    }\n\n    /* eslint complexity: [\"error\", 6] */\n    /* -----------------------------------\n    * Event-handler when hit is selected\n    * Adds border-seqorange to hit component.\n    * Updates number of Fasta that can be downloaded\n    */\n    selectHit(id) {\n        var checkbox = $('#' + id);\n        var num_checked = $('.hit-links :checkbox:checked').length;\n\n        if (!checkbox || !checkbox.val()) return;\n\n        var $hit = $(checkbox.data('target'));\n\n        // Highlight selected hit and enable 'Download FASTA/Alignment of\n        // selected' links.\n        if (checkbox.is(':checked')) {\n            $hit.addClass('border-seqorange');\n            $hit.next('.hsp').addClass('border-seqorange');\n            $hit.removeClass('border-transparent');\n            $hit.next('.hsp').removeClass('border-transparent');\n            $('.download-fasta-of-selected').enable();\n            $('.download-alignment-of-selected').enable();\n        } else {\n            $hit.removeClass('border-seqorange');\n            $hit.next('.hsp').removeClass('border-seqorange');\n            $hit.addClass('border-transparent');\n            $hit.next('.hsp').addClass('border-transparent');\n            $('.download-fasta-of-selected').attr('href', '#').removeAttr('download');\n        }\n\n        var $a = $('.download-fasta-of-selected');\n        var $b = $('.download-alignment-of-selected');\n\n        if (num_checked >= 1) {\n            $a.find('.font-bold').html(num_checked);\n            $b.find('.font-bold').html(num_checked);\n            $a.find('.font-bold').addClass('px-1').removeClass('px-0.5');\n            $b.find('.font-bold').addClass('px-1').removeClass('px-0.5');\n        }\n\n        if (num_checked == 0) {\n            $a.addClass('disabled').find('.font-bold').html('');\n            $b.addClass('disabled').find('.font-bold').html('');\n            $a.find('.font-bold').removeClass('px-1').addClass('px-0.5');\n            $b.find('.font-bold').removeClass('px-1').addClass('px-0.5');\n        }\n    }\n\n    prepareAlignmentOfSelectedHits() {\n        var sequence_ids = $('.hit-links :checkbox:checked').map(function () {\n            return this.value;\n        }).get();\n\n        if(!sequence_ids.length){\n            // remove attributes from link if sequence_ids array is empty\n            $('.download-alignment-of-selected').attr('href', '#').removeAttr('download');\n            return;\n\n        }\n        if(this.state.alignment_blob_url){\n            // always revoke existing url if any because this method will always create a new url\n            window.URL.revokeObjectURL(this.state.alignment_blob_url);\n        }\n        var hsps_arr = [];\n        var aln_exporter = new AlignmentExporter();\n        const self = this;\n        _.each(this.state.queries, _.bind(function (query) {\n            _.each(query.hits, function (hit) {\n                if (_.indexOf(sequence_ids, hit.id) != -1) {\n                    hsps_arr = hsps_arr.concat(self.props.populate_hsp_array(hit, query.id));\n                }\n            });\n        }, this));\n        const filename = 'alignment-' + sequence_ids.length + '_hits.txt';\n        const blob_url = aln_exporter.prepare_alignments_for_export(hsps_arr, filename);\n        // set required download attributes for link\n        $('.download-alignment-of-selected').attr('href', blob_url).attr('download', filename);\n        // track new url for future removal\n        this.setState({alignment_blob_url: blob_url});\n    }\n\n    render() {\n        return this.state.results;\n    }\n}\n\nexport default Hits;\n","import ReportHeader from './report_header';\nimport Hits from '../hits';\n\nconst AlignmentResults = (props) => {\n    const renderContent = () => (\n        <div>\n            {props.state.results}\n            <Hits\n                {...props}\n                componentFinishedUpdating={(_) => props.componentFinishedUpdating(_)}\n            />\n        </div>\n    );\n\n    return <ReportHeader name=\"Alignment Results\" renderContent={renderContent} />;\n};\n\nexport default AlignmentResults;\n","import './jquery_world'; // for custom $.tooltip function\nimport React, { Component } from 'react';\n\nimport Sidebar from './sidebar';\nimport AlignmentExporter from './alignment_exporter';\nimport ReportPlugins from 'report_plugins';\nimport RunSummary from './report/run_summary';\nimport GraphicalOverview from './report/graphical_overview';\nimport AlignmentResults from './report/alignment_results';\n\n/**\n * Renders entire report.\n *\n * Composed of Query and Sidebar components.\n */\n\nclass Report extends Component {\n    constructor(props) {\n        super(props);\n        // Properties below are internal state used to render results in small\n        // slices (see updateState).\n        this.state = {\n            user_warning: null,\n            download_links: [],\n            search_id: '',\n            seqserv_version: '',\n            program: '',\n            program_version: '',\n            submitted_at: '',\n            results: [],\n            queries: [],\n            querydb: [],\n            params: [],\n            stats: [],\n            alignment_blob_url: '',\n            allQueriesLoaded: false,\n            cloud_sharing_enabled: false,\n        };\n        this.prepareAlignmentOfAllHits = this.prepareAlignmentOfAllHits.bind(this);\n        this.setStateFromJSON = this.setStateFromJSON.bind(this);\n        this.plugins = new ReportPlugins(this);\n    }\n\n    /**\n   * Fetch results.\n   */\n    fetchResults() {\n        const path = location.pathname + '.json' + location.search;\n        this.pollPeriodically(path, this.setStateFromJSON, this.props.showErrorModal);\n    }\n\n    pollPeriodically(path, callback, errCallback) {\n    var intervals = [200, 400, 800, 1200, 2000, 3000, 5000];\n        function poll() {\n            fetch(path)\n                .then(response => {\n                    // Handle HTTP status codes\n                    if (!response.ok) throw response;\n\n                    return response.text().then(data => {\n                        if (data) {\n                            data = parseJSON(data);\n                        };\n                        return { status: response.status, data }\n                    });\n                })\n                .then(({ status, data }) => {\n                    switch (status) {\n                        case 202:\n                            var interval;\n                            if (intervals.length === 1) {\n                                interval = intervals[0];\n                            } else {\n                                interval = intervals.shift();\n                            }\n                            setTimeout(poll, interval);\n                            break;\n                        case 200:\n                            callback(data);\n                            break;\n                    }\n                })\n                .catch(error => {\n                    if (error.text) {\n                        error.text().then(errData => {\n                            errData = parseJSON(errData);\n                            switch (error.status) {\n                                case 400:\n                                case 422:\n                                case 500:\n                                    errCallback(errData);\n                                    break;\n                                default:\n                                    console.error(\"Unhandled error:\", error.status);\n                            }\n                        });\n                    } else {\n                        console.error(\"Network error:\", error);\n                    }\n                });\n        }\n\n        function parseJSON(str) {\n            let parsedJson = str;\n            try {\n                parsedJson = JSON.parse(str);\n            } catch (e) {\n                console.error(\"Error parsing JSON:\", e);\n            }\n\n            return parsedJson;\n        }\n        poll();\n    }\n\n    /**\n   * Calls setState after any required modification to responseJSON.\n   */\n    setStateFromJSON(responseJSON) {\n        this.lastTimeStamp = Date.now();\n        // the callback prepares the download link for all alignments\n        if (responseJSON.user_warning == 'LARGE_RESULT') {\n            this.setState({user_warning: responseJSON.user_warning, download_links: responseJSON.download_links});\n        } else {\n            this.setState(responseJSON, this.prepareAlignmentOfAllHits);\n        }\n    }\n\n    /**\n   * Called as soon as the page has loaded and the user sees the loading spinner.\n   * We use this opportunity to setup services that make use of delegated events\n   * bound to the window, document, or body.\n   */\n    componentDidMount() {\n        this.fetchResults();\n        // This sets up an event handler which enables users to select text from\n        // hit header without collapsing the hit.\n        this.preventCollapseOnSelection();\n        this.toggleTable();\n    }\n\n    /**\n   * Called after all results have been rendered.\n   */\n    componentFinishedUpdating() {\n        if (this.state.allQueriesLoaded) return;\n        this.shouldShowIndex() && this.setupScrollSpy();\n        this.setState({ allQueriesLoaded: true });\n    }\n\n    /**\n   * Returns loading message\n   */\n    loadingJSX() {\n        return (\n            <div className=\"grid grid-cols-6 gap-4\">\n                <div className=\"col-start-1 col-end-7 text-center pt-3\">\n                    <h1 className=\"mb-8 text-4xl\">\n                        <i className=\"fa fa-cog fa-spin\"></i>&nbsp; BLAST-ing\n                    </h1>\n                    <div className=\"mb-5 w-full\">\n                        <p className=\"m-auto w-full md:w-6/12 text-sm\">This can take some time depending on the size of your query and\n                        database(s). The page will update automatically when BLAST is done.</p>\n                    </div>\n                    <p className=\"mb-9 text-sm\">\n                        You can bookmark the page and come back to it later or share the\n                        link with someone.\n                    </p>\n                    <p className=\"text-sm\">\n                        { process.env.targetEnv === 'cloud' && <b>If the job takes more than 10 minutes to complete, we will send you an email upon completion.</b> }\n                    </p>\n                </div>\n            </div>\n        );\n    }\n\n    /* eslint-disable */\n    /**\n   * Return results JSX.\n   */\n    resultsJSX() {\n        return (\n            <div className=\"grid grid-cols-1 md:grid-cols-4 gap-4 print:grid-cols-1\" id=\"results\">\n                <div className=\"hidden md:col-span-1 md:block print:hidden\">\n                    <Sidebar\n                        data={this.state}\n                        atLeastOneHit={this.atLeastOneHit()}\n                        shouldShowIndex={this.shouldShowIndex()}\n                        allQueriesLoaded={this.state.allQueriesLoaded}\n                        cloudSharingEnabled={this.state.cloud_sharing_enabled}\n                    />\n                </div>\n                <div className=\"col-span-1 md:col-span-3 print:col-span-1\">\n                    <RunSummary\n                        seqserv_version={this.state.seqserv_version}\n                        program_version={this.state.program_version}\n                        submitted_at={this.state.submitted_at}\n                        querydb={this.state.querydb}\n                        stats={this.state.stats}\n                        params={this.state.params}\n                    />\n                    <GraphicalOverview\n                        queries={this.state.queries}\n                        prorgam={this.state.program}\n                        plugins={this.plugins}\n                    />\n                    <AlignmentResults\n                        state={this.state}\n                        populate_hsp_array={this.populate_hsp_array.bind(this)}\n                        componentFinishedUpdating={(_) => this.componentFinishedUpdating(_)}\n                        plugins={this.plugins}\n                        {...this.props}\n                    />\n                </div>\n            </div>\n        );\n    }\n    /* eslint-enable */\n\n\n    warningJSX() {\n        return(\n            <div className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\">\n                <div className=\"grid grid-cols-6 gap-4\">\n                    <div className=\"col-start-1 col-end-7 text-center\">\n                        <h1 className=\"mb-4 text-4xl\">\n                            <i className=\"fa fa-exclamation-triangle\"></i>&nbsp; Warning\n                        </h1>\n                        <p className=\"mb-2\">\n                            The BLAST result might be too large to load in the browser. If you have a powerful machine you can try loading the results anyway. Otherwise, you can download the results and view them locally.\n                        </p>\n                        <p className=\"mb-2\">\n                            {this.state.download_links.map((link, index) => {\n                                return (\n                                    <a href={link.url} className=\"btn btn-secondary\" key={'download_link_' + index} >\n                                        {link.name}\n                                    </a>\n                                );\n                            })}\n                        </p>\n                        <p>\n                            <a href={location.pathname + '?bypass_file_size_warning=true'} className=\"py-2 px-3 border border-transparent rounded-md shadow-sm text-white bg-seqblue hover:bg-seqorange focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-seqorange\">\n                                View results in browser anyway\n                            </a>\n                        </p>\n                    </div>\n                </div>\n            </div>\n        );\n    }\n\n    // Controller //\n\n    /**\n   * Returns true if results have been fetched.\n   *\n   * A holding message is shown till results are fetched.\n   */\n    isResultAvailable() {\n        return this.state.queries.length >= 1;\n    }\n\n    /**\n     * Indicates the response contains a warning message for the user\n     * in which case we should not render the results and render the\n     * warning instead.\n     **/\n    isUserWarningPresent() {\n        return this.state.user_warning;\n    }\n\n    /**\n   * Returns true if we have at least one hit.\n   */\n    atLeastOneHit() {\n        return this.state.queries.some((query) => query.hits.length > 0);\n    }\n\n    /**\n   * Returns true if index should be shown in the sidebar. Index is shown\n   * only for 2 and 8 queries.\n   */\n    shouldShowIndex() {\n        var num_queries = this.state.queries.length;\n        return num_queries >= 2 && num_queries <= 12;\n    }\n\n    /**\n   * Prevents folding of hits during text-selection.\n   */\n    preventCollapseOnSelection() {\n        $('body').on('mousedown', '.hit > .section-header > h4', function (event) {\n            var $this = $(this);\n            $this.on('mouseup mousemove', function handler(event) {\n                if (event.type === 'mouseup') {\n                    // user wants to toggle\n                    var hitID = $this.parents('.hit').attr('id');\n                    $(`div[data-parent-hit=${hitID}]`).toggle();\n                    $this.find('i').toggleClass('fa-square-minus fa-square-plus');\n                    $($this.data('parent-id')).toggleClass('print:hidden');\n                } else {\n                    // user wants to select\n                    $this.attr('data-toggle', '');\n                }\n                $this.off('mouseup mousemove', handler);\n            });\n        });\n    }\n\n    /* Handling the fa icon when Hit Table is collapsed */\n    /* TODO:JOKO check if this method still being used? */\n    toggleTable() {\n        $('body').on(\n            'mousedown',\n            '.resultn .caption[data-toggle=\"collapse\"]',\n            function (event) {\n                var $this = $(this);\n                $this.on('mouseup mousemove', function handler(event) {\n                    $this.find('i').toggleClass('fa-square-minus fa-square-plus');\n                    $this.off('mouseup mousemove', handler);\n                });\n            }\n        );\n    }\n\n\n\n    /**\n   * For the query in viewport, highlights corresponding entry in the index.\n   */\n    setupScrollSpy() {\n        var sectionIds = $('a.side-nav');\n\n        $(document).scroll(function(){\n            sectionIds.each(function(){\n\n                var container = $(this).attr('href');\n                var containerOffset = $(container).offset().top;\n                var containerHeight = $(container).outerHeight();\n                var containerBottom = containerOffset + containerHeight;\n                var scrollPosition = $(document).scrollTop();\n\n                if(scrollPosition < containerBottom - 20 && scrollPosition >= containerOffset - 20){\n                    $(this).addClass('active');\n                } else {\n                    $(this).removeClass('active');\n                }\n            });\n        });\n    }\n\n    populate_hsp_array(hit, query_id){\n        return hit.hsps.map(hsp => Object.assign(hsp, {hit_id: hit.id, query_id}));\n    }\n\n    prepareAlignmentOfAllHits() {\n        // Get number of hits and array of all hsps.\n        var num_hits = 0;\n        var hsps_arr = [];\n        if(!this.state.queries.length){\n            return;\n        }\n        this.state.queries.forEach(\n            (query) => query.hits.forEach(\n                (hit) => {\n                    num_hits++;\n                    hsps_arr = hsps_arr.concat(this.populate_hsp_array(hit, query.id));\n                }\n            )\n        );\n\n        var aln_exporter = new AlignmentExporter();\n        var file_name = `alignment-${num_hits}_hits.txt`;\n        const blob_url = aln_exporter.prepare_alignments_for_export(hsps_arr, file_name);\n        $('.download-alignment-of-all')\n            .attr('href', blob_url)\n            .attr('download', file_name);\n        return false;\n    }\n\n    render() {\n        if (this.isUserWarningPresent()) {\n            return this.warningJSX();\n        } else if (this.isResultAvailable()) {\n            return this.resultsJSX();\n        } else {\n            return this.loadingJSX();\n        }\n    }\n}\n\nexport default Report;\n","import \"./sequence\";\nimport React, { createRef } from \"react\";\nimport _ from \"underscore\";\n\n/**\n * Takes sequence accession as props, fetches the sequence from the server, and\n * displays it in a modal.\n */\nexport default class SequenceModal extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      error_msgs: [],\n      sequences: [],\n      requestCompleted: false,\n      isModalVisible: false,\n    };\n    this.modalRef = createRef();\n  }\n\n  // Lifecycle methods. //\n\n  render() {\n    const { isModalVisible, requestCompleted } = this.state;\n\n    return (\n      <div className=\"relative sequence-viewer-wrap\">\n        <dialog ref={this.modalRef} className=\"sequence-viewer fixed p-4 w-full max-w-2xl bg-transparent focus:outline-none overflow-visible z-50\">\n          <div className=\"relative flex flex-col rounded-lg bg-white shadow\">\n            <div className=\"flex items-start justify-between rounded-t border-b p-5\">\n              <h3 className=\"text-xl font-medium text-gray-900\">\n                View sequence\n              </h3>\n              <button className=\"sequence-viewer-close ml-auto inline-flex items-center rounded-lg bg-transparent p-1.5 text-gray-400 hover:bg-gray-200\" onClick={this.hide}>\n                <i className=\"fa-solid fa-xmark hover:text-black\"></i>\n              </button>\n            </div>\n            <div className=\"sequence-viewer-content max-h-[80vh] overflow-y-scroll\">\n              {(requestCompleted && this.resultsJSX()) || this.loadingJSX()}\n            </div>\n          </div>\n        </dialog>\n      </div>\n    );\n  }\n\n  /**\n   * Shows sequence viewer.\n   */\n  show = (url) => {\n    this.modalRef.current?.showModal();\n    this.setState({ requestCompleted: false });\n    this.loadJSON(url);\n  }\n\n  /**\n   * Hide sequence viewer.\n   */\n  hide = () => {\n    this.modalRef.current?.close();\n  }\n\n  /**\n   * Loads sequence using AJAX and updates modal state.\n   */\n  async loadJSON(url) {\n    // Fetch sequence and update state.\n    try {\n      const response = await fetch(url);\n      const data = await response.json();\n      this.setState({\n        sequences: data.sequences,\n        error_msgs: data.error_msgs,\n        requestCompleted: true,\n      });\n    } catch (error) {\n      console.log('Error fetching sequence:', error);\n      this.hide();\n      this.props.showErrorModal(error);\n    }\n  }\n\n  resultsJSX() {\n    return (\n      <div className=\"pt-2 px-6 pb-6 mt-2\">\n        {this.state.error_msgs.map((error_msg, index) => (\n          <div key={`error-message-${index}`} className=\"fastan\">\n            <div className=\"section-header border-b border-seqorange pl-px table mb-0 w-full pb-2\">\n              <h4 className=\"text-sm table-cell\">{error_msg[0]}</h4>\n            </div>\n            <div className=\"pt-0 px-0 pb-px\">\n              <pre className=\"m-0 p-0 rounded-none border-0 bg-inherit whitespace-pre-wrap break-keep\">{error_msg[1]}</pre>\n            </div>\n          </div>\n        ))}\n        {this.state.sequences.map((sequence, index) => (\n          <SequenceViewer key={`sequence-viewer-${index}`} sequence={sequence} />\n        ))}\n      </div>\n    );\n  }\n\n  loadingJSX() {\n    return (\n      <div className=\"my-4 text-center\">\n        <i className=\"fa fa-spinner fa-3x fa-spin\"></i>\n      </div>\n    );\n  }\n}\n\nclass SequenceViewer extends React.Component {\n  /**\n   * The CSS class name that will be assigned to the widget container. ID\n   * assigned to the widget container is derived from the same.\n   */\n  static widgetClass() {\n    return \"biojs-vis-sequence\";\n  }\n\n  render() {\n    this.widgetID = this.widgetClass + \"-\" + new Date().getUTCMilliseconds();\n\n    return (\n      <div className=\"fastan\">\n        <div className=\"section-header border-b border-seqorange pl-px table mb-0 w-full pb-2\">\n          <h4 className=\"text-sm table-cell\">\n            {this.props.sequence.id}\n            <small className=\"text-inherit\">&nbsp; {this.props.sequence.title}</small>\n          </h4>\n        </div>\n        <div className=\"fastan-content relative pt-0 px-0 pb-px\">\n          <div className={this.widgetClass} id={this.widgetID}></div>\n        </div>\n      </div>\n    );\n  }\n\n  componentDidMount() {\n    // attach BioJS sequence viewer\n    var widget = new Sequence({\n      sequence: this.props.sequence.value,\n      target: this.widgetID,\n      format: \"PRIDE\",\n      columns: {\n        size: 40,\n        spacedEach: 0,\n      },\n      formatOptions: {\n        title: false,\n        footer: false,\n      },\n    });\n    setTimeout(function() {\n      requestAnimationFrame(() => { widget.hideFormatSelector() }); // ensure React is done painting the DOM of the element before calling a function on it.\n    });\n  }\n}\n","import $ from 'jquery';\n\nrequire = (function e(t, n, r) { function s(o, u) { if (!n[o]) { if (!t[o]) { var a = typeof require == 'function' && require; if (!u && a) return a(o, !0); if (i) return i(o, !0); var f = new Error('Cannot find module \\'' + o + '\\''); throw f.code = 'MODULE_NOT_FOUND', f; } var l = n[o] = { exports: {} }; t[o][0].call(l.exports, function (e) { var n = t[o][1][e]; return s(n ? n : e); }, l, l.exports, e, t, n, r); } return n[o].exports; } var i = typeof require == 'function' && require; for (var o = 0; o < r.length; o++)s(r[o]); return s; })({\n    1: [function (require, module, exports) {\n    // legacy!!\n        $.browser = require('jquery-browser-plugin');\n\n        /**\n     * THIS FILE HAS BEEN MODIFIED FROM THE ORIGINAL\n     * (https://github.com/ljgarcia/biojs-vis-sequence/blob/master/lib/index.js).\n     *\n     * Sequence component\n     *\n     * @class\n     * @extends Biojs\n     *\n     * @author <a href=\"mailto:johncar@gmail.com\">John Gomez</a>, <a href=\"mailto:secevalliv@gmail.com\">Jose Villaveces</a>\n     * @version 1.0.0\n     * @category 3\n     *\n     * @requires <a href='http://blog.jquery.com/2011/09/12/jquery-1-6-4-released/'>jQuery Core 1.6.4</a>\n     * @dependency <script language=\"JavaScript\" type=\"text/javascript\" src=\"../biojs/dependencies/jquery/jquery-1.4.2.min.js\"></script>\n     *\n     * @requires <a href='http://jqueryui.com/download'>jQuery UI 1.8.16</a>\n     * @dependency <script language=\"JavaScript\" type=\"text/javascript\" src=\"../biojs/dependencies/jquery/jquery-ui-1.8.2.custom.min.js\"></script>\n     *\n     * @requires <a href='Biojs.Tooltip.css'>Biojs.Tooltip</a>\n     * @dependency <script language=\"JavaScript\" type=\"text/javascript\" src=\"src/Biojs.Tooltip.js\"></script>\n     *\n     * @param {Object} options An object with the options for Sequence component.\n     *\n     * @option {string} target\n     *    Identifier of the DIV tag where the component should be displayed.\n     *\n     * @option {string} sequence\n     *    The sequence to be displayed.\n     *\n     * @option {string} [id]\n     *    Sequence identifier if apply.\n     *\n     * @option {string} [format=\"FASTA\"]\n     *    The display format for the sequence representation.\n     *\n     * @option {Object[]} [highlights]\n     * \t  For highlighting multiple regions.\n     *    <pre class=\"brush: js\" title=\"Syntax:\">\n     *    [\n     *    \t// Highlight aminoacids from 'start' to 'end' of the current strand using the specified 'color' (optional) and 'background' (optional).\n     *    \t{ start: &lt;startVal1&gt;, end: &lt;endVal1&gt; [, id:&lt;idVal1&gt;] [, color: &lt;HTMLColor&gt;] [, background: &lt;HTMLColor&gt;]},\n     *    \t//\n     *    \t// Any others highlights\n     *    \t...,\n     *    \t//\n     *    \t{ start: &lt;startValN&gt;, end: &lt;endValN&gt; [, id:&lt;idValN&gt;] [, color: &lt;HTMLColor&gt;] [, background: &lt;HTMLColor&gt;]}\n     *    ]</pre>\n     *\n     * <pre class=\"brush: js\" title=\"Example:\">\n     * highlights : [\n     * \t\t{ start:30, end:42, color:\"white\", background:\"green\", id:\"spin1\" },\n     *\t\t{ start:139, end:140 },\n     *\t\t{ start:631, end:633, color:\"white\", background:\"blue\" }\n     *\t]\n     * </pre>\n     *\n     * @option {Object} [columns={size:40,spacedEach:10}]\n     * \t  Options for displaying the columns. Syntax: { size: &lt;numCols&gt;, spacedEach: &lt;numCols&gt;}\n     *\n     * @option {Object} [selection]\n     * \t  Positions for the current selected region. Syntax: { start: &lt;startValue&gt;, end: &lt;endValue&gt;}\n     *\n     * @option {Object[]} [annotations]\n     *    Set of overlapping annotations. Must be an array of objects following the syntax:\n     *     \t\t<pre class=\"brush: js\" title=\"Syntax:\">\n     *            [\n     *              // An annotation:\n     *              { name: &lt;name&gt;,\n     *                html: &lt;message&gt;,\n     *                color: &lt;color_code&gt;,\n     *                regions: [{ start: &lt;startVal1&gt;, end: &lt;endVal1&gt; color: &lt;HTMLColor&gt;}, ...,{ start: &lt;startValN&gt;, end: &lt;endValN&gt;, color: &lt;HTMLColor&gt;}]\n     *              },\n     *\n     *              // ...\n     *              // more annotations here\n     *              // ...\n     *            ]\n     *    \t\t </pre>\n     *    where:\n     *      <ul>\n     *        <li><b>name</b> is the unique name for the annotation</li>\n     *        <li><b>html</b> is the message (can be HTML) to be displayed in the tool tip.</li>\n     *        <li><b>color</b> is the default HTML color code for all the regions.</li>\n     *        <li><b>regions</b> array of objects defining the intervals which belongs to the annotation.</li>\n     *        <li><b>regions[i].start</b> is the starting character for the i-th interval.</li>\n     *        <li><b>regions[i].end</b> is the ending character for the i-th interval.</li>\n     *        <li><b>regions[i].color</b> is an optional color for the i-th interval.\n     *      </ul>\n     *\n     * @option {Object} [formatOptions={title:true, footer:true}]\n     * \t  Options for displaying the title. by now just affecting the CODATA format.\n     *    <pre class=\"brush: js\" title=\"Syntax:\">\n     * \t\tformatOptions : {\n     * \t\t\ttitle:false,\n     * \t\t\tfooter:false\n     * \t\t}\n     *    </pre>\n     *\n     * @example\n     * var theSequence = \"METLCQRLNVCQDKILTHYENDSTDLRDHIDYWKHMRLECAIYYKAREMGFKHINHQVVPTLAVSKNKALQAIELQLTLETIYNSQYSNEKWTLQDVSLEVYLTAPTGCIKKHGYTVEVQFDGDICNTMHYTNWTHIYICEEAojs SVTVVEGQVDYYGLYYVHEGIRTYFVQFKDDAEKYSKNKVWEVHAGGQVILCPTSVFSSNEVSSPEIIRQHLANHPAATHTKAVALGTEETQTTIQRPRSEPDTGNPCHTTKLLHRDSVDSAPILTAFNSSHKGRINCNSNTTPIVHLKGDANTLKCLRYRFKKHCTLYTAVSSTWHWTGHNVKHKSAIVTLTYDSEWQRDQFLSQVKIPKTITVSTGFMSI\";\n     * var mySequence = new Sequence({\n     * \t\tsequence : theSequence,\n     * \t\ttarget : \"YourOwnDivId\",\n     * \t\tformat : 'CODATA',\n     * \t\tid : 'P918283',\n     * \t\tannotations: [\n     *        { name:\"CATH\",\n     * \t  \t\tcolor:\"#F0F020\",\n     * \t  \t\thtml: \"Using color code #F0F020 \",\n     * \t  \t\tregions: [{start: 122, end: 135}]\n     * \t\t  },\n     *        { name:\"TEST\",\n     *          html:\"&lt;br&gt; Example of &lt;b&gt;HTML&lt;/b&gt;\",\n     *          color:\"green\",\n     *          regions: [\n     *            {start: 285, end: 292},\n     *            {start: 293, end: 314, color: \"#2E4988\"}]\n     *        }\n     *      ],\n     *      highlights : [\n     *      \t{ start:30, end:42, color:\"white\", background:\"green\", id:\"spin1\" },\n     *      \t{ start:139, end:140 },\n     *      \t{ start:631, end:633, color:\"white\", background:\"blue\" }\n     *      ]\n     * });\n     *\n     */\n\n        var Class = require('js-class');\n\n        var EVT_ON_SELECTION_CHANGE = 'onSelectionChange';\n        var EVT_ON_SELECTION_CHANGED = 'onSelectionChanged';\n        var EVT_ON_ANNOTATION_CLICKED = 'onAnnotationClicked';\n\n        global.Sequence = Class(\n            /** @lends Sequence# */\n            {\n                constructor: function (options) {\n                    var self = this;\n\n                    this.opt = jQuery.extend(this.opt, options);\n\n                    this._container = jQuery(this.opt.target);\n\n                    // legacy support (target id without '#')\n                    if (this._container.length == 0) {\n                        this._container = jQuery('#' + this.opt.target);\n                    }\n\n                    if (this._container.length == 0) {\n                        console.log('empty target container');\n                    }\n\n                    // legacy: copy target id\n                    this.opt.target = this._container[0].id;\n\n                    // Lazy initialization\n                    this._container.ready(function () {\n                        this._ready = false;\n                        self._initialize();\n                    });\n                },\n\n                /**\n         * Default values for the options\n         * @name Sequence-opt\n         */\n                opt: {\n\n                    sequence: '',\n                    id: '',\n                    target: '',\n                    format: 'FASTA',\n                    selection: { start: 0, end: 0 },\n                    columns: { size: 35, spacedEach: 10 },\n                    highlights: [],\n                    annotations: [],\n                    sequenceUrl: 'http://www.ebi.ac.uk/das-srv/uniprot/das/uniprot/sequence',\n\n                    // Styles\n                    selectionColor: 'Yellow',\n                    selectionFontColor: 'black',\n                    highlightFontColor: 'red',\n                    highlightBackgroundColor: 'white',\n                    fontColor: 'inherit',\n                    backgroundColor: 'inherit',\n                    width: undefined,\n                    height: undefined,\n                    formatSelectorVisible: true\n                },\n\n                /**\n         * Array containing the supported event names\n         * @name Sequence-eventTypes\n         */\n                eventTypes: [\n                    /**\n           * @name Sequence#onSelectionChanged\n           * @event\n           * @param {function} actionPerformed An function which receives an {@link Biojs.Event} object as argument.\n           * @eventData {Object} source The component which did triggered the event.\n           * @eventData {string} type The name of the event.\n           * @eventData {int} start A number indicating the start of the selection.\n           * @eventData {int} end A number indicating the ending of selection.\n           * @example\n           * mySequence.onSelectionChanged(\n           *    function( objEvent ) {\n           *       alert(\"Selected: \" + objEvent.start + \", \" + objEvent.end );\n           *    }\n           * );\n           *\n           * */\n                    'onSelectionChanged',\n\n                    /**\n           * @name Sequence#onSelectionChange\n           * @event\n           * @param {function} actionPerformed An function which receives an {@link Biojs.Event} object as argument.\n           * @eventData {Object} source The component which did triggered the event.\n           * @eventData {string} type The name of the event.\n           * @eventData {int} start A number indicating the start of the selection.\n           * @eventData {int} end A number indicating the ending of selection.\n           * @example\n           * mySequence.onSelectionChange(\n           *    function( objEvent ) {\n           *       alert(\"Selection in progress: \" + objEvent.start + \", \" + objEvent.end );\n           *    }\n           * );\n           *\n           *\n           * */\n                    'onSelectionChange',\n\n                    /**\n           * @name Sequence#onAnnotationClicked\n           * @event\n           * @param {function} actionPerformed An function which receives an {@link Biojs.Event} object as argument.\n           * @eventData {Object} source The component which did triggered the event.\n           * @eventData {string} type The name of the event.\n           * @eventData {string} name The name of the selected annotation.\n           * @eventData {int} pos A number indicating the position of the selected amino acid.\n           * @example\n           * mySequence.onAnnotationClicked(\n           *    function( objEvent ) {\n           *       alert(\"Clicked \" + objEvent.name + \" on position \" + objEvent.pos );\n           *    }\n           * );\n           *\n           * */\n                    'onAnnotationClicked'\n                ],\n\n                getId: function () {\n                    return this.opt.id;\n                },\n\n                // internal members\n                _headerDiv: null,\n                _contentDiv: null,\n\n                // Methods\n\n                _initialize: function () {\n\n                    if (this.opt.width !== undefined) {\n                        this._container.width(this.opt.width);\n                    }\n\n                    if (this.opt.height !== undefined) {\n                        this._container.height(this.opt.height);\n                    }\n\n                    // DIV for the format selector\n                    this._buildFormatSelector();\n\n                    // DIV for the sequence\n                    this._contentDiv = jQuery('<div/>').appendTo(this._container);\n\n                    // Initialize highlighting\n                    this._highlights = this.opt.highlights;\n\n                    // Initialize annotations\n                    this._annotations = this.opt.annotations;\n\n                    //Initialize tooltip\n                    var tooltip = 'sequenceTip' + this.opt.target;\n                    jQuery('<div id=\"' + tooltip + '\"></div>')\n                        .appendTo('.fastan-content')\n                        .addClass('absolute top-0 left-0')\n                        .show()\n                    this.opt._tooltip = document.getElementById(tooltip);\n\n                    if ((this.opt.sequence)) {\n                        this._redraw();\n\n                    } else if ((this.opt.id)) {\n                        this._requestSequence(this.opt.id);\n\n                    } else {\n                        this.clearSequence('No sequence available', '../biojs/css/images/warning_icon.png');\n                    }\n\n                    this._ready = true;\n                },\n\n\n                /**\n         * Shows the columns indicated by the indexes array.\n         * @param {string} seq The sequence strand.\n         * @param {string} [identifier] Sequence identifier.\n         *\n         * @example\n         * mySequence.setSequence(\"P99999\");\n         *\n         */\n                setSequence: function (seq, identifier) {\n\n                    if (seq.match(/^([A-N,R-Z][0-9][A-Z][A-Z, 0-9][A-Z, 0-9][0-9])|([O,P,Q][0-9][A-Z, 0-9][A-Z, 0-9][A-Z, 0-9][0-9])(\\.\\d+)?$/i)) {\n                        this._requestSequence(arguments[0]);\n\n                    } else {\n                        this.opt.sequence = seq;\n                        this.opt.id = identifier;\n                        this._highlights = [];\n                        this._highlightsCount = 0;\n                        this.opt.selection = { start: 0, end: 0 };\n                        this._annotations = [];\n\n                        this._contentDiv.children().remove();\n                        this._redraw();\n                    }\n                },\n\n                _requestSequence: function (accession) {\n                    var self = this;\n\n                    console.log('Requesting sequence for: ' + accession);\n\n                    jQuery.ajax({\n                        url: self.opt.sequenceUrl,\n                        dataType: 'xml',\n                        data: { segment: accession }\n                    }).done(function(xml) {\n                        try {\n                            var sequenceNode = jQuery(xml).find('SEQUENCE:first');\n                            self.setSequence(sequenceNode.text(), sequenceNode.attr('id'), sequenceNode.attr('label'));\n                        } catch (e) {\n                            console.log('Error decoding response data: ' + e.message);\n                            self.clearSequence('No sequence available', '../biojs/css/images/warning_icon.png');\n                        }\n                    }).fail(function(jqXHR, textStatus, errorThrown) {\n                        console.log('Error requesting the sequence: ' + textStatus);\n                        self.clearSequence('Error requesting the sequence to the server ' + this.url, '../biojs/css/images/warning_icon.png');\n                    });\n                },\n\n                /**\n       * Shows the columns indicated by the indexes array.\n       * @param {string} [showMessage] Message to be showed.\n       * @param {string} [icon] Icon to be showed a side of the message\n       *\n       * @example\n       * mySequence.clearSequence(\"No sequence available\", \"../biojs/css/images/warning_icon.png\");\n       *\n       */\n                clearSequence: function (showMessage, icon) {\n\n                    var message = undefined;\n\n                    this.opt.sequence = '';\n                    this.opt.id = '';\n                    this._highlights = [];\n                    this._highlightsCount = 0;\n                    this.opt.selection = { start: 0, end: 0 };\n                    this._annotations = [];\n                    this._contentDiv.children().remove();\n\n                    this._headerDiv.hide();\n\n                    if (undefined !== showMessage) {\n                        message = jQuery('<div>' + showMessage + '</div>')\n                            .appendTo(this._contentDiv)\n                            .addClass('message');\n\n                        if (undefined !== icon) {\n                            message.css({\n                                'background': 'transparent url(\"' + icon + '\") no-repeat center left',\n                                'padding-left': '20px'\n                            });\n                        }\n                    }\n                },\n\n                /**\n          * Set the current selection in the sequence causing the event {@link Sequence#onSelectionChanged}\n          *\n          * @example\n          * // set selection from the position 100 to 150\n          * mySequence.setSelection(100, 150);\n          *\n          * @param {int} start The starting character of the selection.\n          * @param {int} end The ending character of the selection\n          */\n                setSelection: function (start, end) {\n                    if (start > end) {\n                        var aux = end;\n                        end = start;\n                        start = aux;\n\n                    }\n\n                    if (start != this.opt.selection.start || end != this.opt.selection.end) {\n                        this._setSelection(start, end);\n                        this.trigger(\n                            EVT_ON_SELECTION_CHANGED,\n                            { 'start': start, 'end': end }\n                        );\n                    }\n                },\n\n                _buildFormatSelector: function () {\n                    var self = this;\n\n                    console.log('build format selector container', this._container);\n                    this._headerDiv = jQuery('<div></div>').appendTo(this._container);\n                    this._headerDiv.append('Format: ');\n\n                    this._formatSelector = jQuery('<select> ' +\n            '<option value=\"FASTA\">FASTA</option>' +\n            '<option value=\"CODATA\">CODATA</option>' +\n            '<option value=\"PRIDE\">PRIDE</option>' +\n            '<option value=\"RAW\">RAW</option></select>').appendTo(self._headerDiv);\n\n                    this._formatSelector.change(function (e) {\n                        self.opt.format = jQuery(this).val();\n                        self._redraw();\n                    });\n\n                    this._formatSelector.val(self.opt.format);\n\n                    this.formatSelectorVisible(this.opt.formatSelectorVisible);\n                },\n\n                /**\n          * Highlights a region using the font color defined in {Sequence#highlightFontColor} by default is red.\n          *\n          * @example\n          * // highlight the characters within the position 100 to 150, included.\n          * mySequence.addHighlight( { \"start\": 100, \"end\": 150, \"color\": \"white\", \"background\": \"red\", \"id\": \"aaa\" } );\n          *\n          * @param {Object} h The highlight defined as follows:\n          *\n          *\n          * @return {int} representing the id of the highlight on the internal array. Returns -1 on failure\n          */\n                addHighlight: function (h) {\n                    var id = '-1';\n                    var color = '';\n                    var background = '';\n                    var highlight = {};\n\n                    if (h instanceof Object && h.start <= h.end) {\n\n                        color = ('string' == typeof h.color) ? h.color : this.opt.highlightFontColor;\n                        background = ('string' == typeof h.background) ? h.background : this.opt.highlightBackgroundColor;\n                        id = ('string' == typeof h.id) ? h.id : (new Number(this._highlightsCount++)).toString();\n\n                        highlight = { 'start': h.start, 'end': h.end, 'color': color, 'background': background, 'id': id };\n\n                        this._highlights.push(highlight);\n                        this._applyHighlight(highlight);\n                        this._restoreSelection(h.start, h.end);\n                    }\n\n                    return id;\n                },\n                /*\n           * Function: Sequence._applyHighlight\n           * Purpose:  Apply the specified color and background to a region between 'start' and 'end'.\n           * Returns:  -\n           * Inputs: highlight -> {Object} An object containing the fields start (int), end (int),\n           * \t\t\t\t\t\tcolor (HTML color string) and background (HTML color string).\n           */\n                _applyHighlight: function (highlight) {\n                    var zindex = 0,\n                        z = 0,\n                        o = 0;\n                    var seq = this._contentDiv.find('.sequence');\n                    for (var i = highlight.start - 1; i < highlight.end; i++) {\n                        zindex = jQuery(seq[i]).css('z-index');\n                        if (zindex == 'auto') {\n                            z = 1;\n                            o = 1;\n                        }\n                        else {\n                            z = 0;\n                            o = 0.5;\n                        }\n                        jQuery(seq[i])\n                            .css({\n                                'color': highlight.color,\n                                'background-color': highlight.background,\n                                'z-index': z,\n                                'opacity': o\n                            })\n                            .addClass('highlighted');\n                    }\n                },\n                /*\n           * Function: Sequence._applyHighlights\n           * Purpose:  Apply the specified highlights.\n           * Returns:  -\n           * Inputs: highlights -> {Object[]} An array containing the highlights to be applied.\n           */\n                _applyHighlights: function (highlights) {\n                    for (var i in highlights) {\n                        this._applyHighlight(highlights[i]);\n                    }\n                },\n                /*\n           * Function: Sequence._restoreHighlights\n           * Purpose:  Repaint the highlights in the specified region.\n           * Returns:  -\n           * Inputs: start -> {int} Start of the region to be restored.\n           * \t\t   end -> {int} End of the region to be restored.\n           */\n                _restoreHighlights: function (start, end) {\n                    var h = this._highlights;\n                    // paint the region using default blank settings\n                    this._applyHighlight({\n                        'start': start,\n                        'end': end,\n                        'color': this.opt.fontColor,\n                        'background': this.opt.backgroundColor\n                    });\n                    // restore highlights in that region\n                    for (var i in h) {\n                        // interval intersects with highlight i ?\n                        if (!(h[i].start > end || h[i].end < start)) {\n                            a = (h[i].start < start) ? start : h[i].start;\n                            b = (h[i].end > end) ? end : h[i].end;\n                            this._applyHighlight({\n                                'start': a,\n                                'end': b,\n                                'color': h[i].color,\n                                'background': h[i].background\n                            });\n                        }\n                    }\n                },\n                /*\n           * Function: Sequence._restoreSelection\n           * Purpose:  Repaint the current selection in the specified region.\n           * \t\t\t It is used in the case of any highlight do overriding of the current selection.\n           * Returns:  -\n           * Inputs: start -> {int} Start of the region to be restored.\n           * \t\t   end -> {int} End of the region to be restored.\n           */\n                _restoreSelection: function (start, end) {\n                    var sel = this.opt.selection;\n                    // interval intersects with current selection ?\n                    // restore selection\n                    if (!(start > sel.end || end < sel.start)) {\n                        a = (start < sel.start) ? sel.start : start;\n                        b = (end > sel.end) ? sel.end : end;\n\n                        this._applyHighlight({\n                            'start': a,\n                            'end': b,\n                            'color': this.opt.selectionFontColor,\n                            'background': this.opt.selectionColor,\n                        });\n                    }\n                },\n\n                /**\n          * Remove a highlight.\n          *\n          * @example\n          * // Clear the highlighted characters within the position 100 to 150, included.\n          * mySequence.removeHighlight(\"spin1\");\n          *\n          * @param {string} id The id of the highlight on the internal array. This value is returned by method highlight.\n          */\n                removeHighlight: function (id) {\n                    var h = this._highlights;\n                    for (i in h) {\n                        if (h[i].id == id) {\n                            start = h[i].start;\n                            end = h[i].end;\n                            h.splice(i, 1);\n\n                            this._restoreHighlights(start, end);\n                            this._restoreSelection(start, end);\n\n                            break;\n                        }\n                    }\n                },\n\n                /**\n          * Remove all the highlights of whole sequence.\n          *\n          * @example\n          * mySequence.removeAllHighlights();\n          */\n                removeAllHighlights: function () {\n                    this._highlights = [];\n                    this._restoreHighlights(1, this.opt.sequence.length);\n                    this._restoreSelection(1, this.opt.sequence.length);\n                },\n\n                /**\n          * Changes the current displaying format of the sequence.\n          *\n          * @example\n          * // Set format to 'FASTA'.\n          * mySequence.setFormat('FASTA');\n          *\n          * @param {string} format The format for the sequence to be displayed.\n          */\n                setFormat: function (format) {\n                    if (this.opt.format != format.toUpperCase()) {\n                        this.opt.format = format.toUpperCase();\n                        this._redraw();\n                    }\n\n                    var self = this;\n                    // Changes the option in the combo box\n                    this._headerDiv.find('option').each(function () {\n                        if (jQuery(this).val() == self.opt.format.toUpperCase()) {\n                            jQuery(this).attr('selected', 'selected');\n                        }\n                    });\n                },\n\n                /**\n          * Changes the current number of columns in the displayed sequence.\n          *\n          * @example\n          * // Set the number of columns to 70.\n          * mySequence.setNumCols(70);\n          *\n          * @param {int} numCols The number of columns.\n          */\n                setNumCols: function (numCols) {\n                    this.opt.columns.size = numCols;\n                    this._redraw();\n                },\n\n                /**\n          * Set the visibility of the drop-down list of formats.\n          *\n          * @param {boolean} visible true: show; false: hide.\n          */\n                formatSelectorVisible: function (visible) {\n                    if (visible) {\n                        this._headerDiv.show();\n                    } else {\n                        this._headerDiv.hide();\n                    }\n                },\n\n                /**\n          * This is similar to a {Biojs.Protein3D#formatSelectorVisible} with the 'true' argument.\n          *\n          * @example\n          * // Shows the format selector.\n          * mySequence.showFormatSelector();\n          *\n          */\n                showFormatSelector: function () {\n                    this._headerDiv.show();\n                },\n\n                /**\n          * This is similar to a {Biojs.Protein3D#formatSelectorVisible} with the 'false' argument.\n          *\n          * @example\n          * // Hides the format selector.\n          * mySequence.hideFormatSelector();\n          *\n          */\n                hideFormatSelector: function () {\n                    this._headerDiv.hide();\n                },\n\n                /**\n          * Hides the whole component.\n          *\n          */\n                hide: function () {\n                    this._headerDiv.hide();\n                    this._contentDiv.hide();\n                },\n\n                /**\n          * Shows the whole component.\n          *\n          */\n                show: function () {\n                    this._headerDiv.show();\n                    this._contentDiv.show();\n                },\n                /*\n           * Function: Sequence._setSelection\n           * Purpose:  Update the current selection.\n           * Returns:  -\n           * Inputs: start -> {int} Start of the region to be selected.\n           * \t\t   end -> {int} End of the region to be selected.\n           */\n                _setSelection: function (start, end) {\n                    //alert(\"adsas\");\n\n                    var current = this.opt.selection;\n                    var change = {};\n\n                    // Which is the change on selection?\n                    if (current.start == start) {\n                        // forward?\n                        if (current.end < end) {\n                            change.start = current.end;\n                            change.end = end;\n                        } else {\n                            this._restoreHighlights(end + 1, current.end);\n                        }\n                    } else if (current.end == end) {\n                        // forward?\n                        if (current.start > start) {\n                            change.start = start;\n                            change.end = current.start;\n                        } else {\n                            this._restoreHighlights(current.start, start - 1);\n                        }\n                    } else {\n                        this._restoreHighlights(current.start, current.end);\n                        change.start = start;\n                        change.end = end;\n                    }\n\n                    current.start = start;\n                    current.end = end;\n                },\n\n                /*\n           * Function: Sequence._repaintSelection\n           * Purpose:  Repaint the whole current selection.\n           * Returns:  -\n           * Inputs: -\n           */\n                _repaintSelection: function () {\n                    var s = this.opt.selection;\n                    this._setSelection(0, 0);\n                    this._setSelection(s.start, s.end);\n                },\n\n                /*\n           * Function: Sequence._redraw\n           * Purpose:  Repaint the current sequence.\n           * Returns:  -\n           * Inputs: -\n           */\n                _redraw: function () {\n                    var i = 0;\n                    var self = this;\n\n                    // Reset the content\n                    //this._contentDiv.text('');\n                    this._contentDiv.children().remove();\n\n                    // Rebuild the spans of the sequence\n                    // according to format\n                    if (this.opt.format == 'RAW') {\n                        this._drawRaw();\n                    } else if (this.opt.format == 'CODATA') {\n                        this._drawCodata();\n                    } else if (this.opt.format == 'FASTA') {\n                        this._drawFasta();\n                    } else {\n                        this.opt.format = 'PRIDE';\n                        this._drawPride();\n                    }\n\n                    // Restore the highlighted regions\n                    this._applyHighlights(this._highlights);\n                    this._repaintSelection();\n                    this._addSpanEvents();\n                },\n                /*\n           * Function: Sequence._drawFasta\n           * Purpose:  Repaint the current sequence using FASTA format.\n           * Returns:  -\n           * Inputs: -\n           */\n                _drawFasta: function () {\n                    var self = this;\n                    var a = this.opt.sequence.toUpperCase().split('');\n                    var pre = jQuery('<pre></pre>').appendTo(this._contentDiv);\n\n                    var i = 1;\n                    var arr = [];\n                    var str = '>' + this.opt.id + ' ' + a.length + ' bp<br/>';\n\n                    /* Correct column size in case the sequence is as small peptide */\n                    var numCols = this.opt.columns.size;\n                    if (this.opt.sequence.length < this.opt.columns.size) {\n                        numCols = this.opt.sequence.length;\n                    }\n\n                    var opt = {\n                        numCols: numCols,\n                        numColsForSpace: 0\n                    };\n\n                    str += this._drawSequence(a, opt);\n                    pre.html(str);\n\n                    this._drawAnnotations(opt);\n                },\n                /*\n           * Function: Sequence._drawCodata\n           * Purpose:  Repaint the current sequence using CODATA format.\n           * Returns:  -\n           * Inputs: -\n           */\n                _drawCodata: function () {\n                    var seq = this.opt.sequence.toUpperCase().split('');\n\n                    // Add header.\n                    if (this.opt.formatOptions !== undefined) {\n                        if (this.opt.formatOptions.title !== undefined) {\n                            if (this.opt.formatOptions.title != false) {\n                                var header =\n                  $('<pre/>').addClass('header').appendTo(this._contentDiv);\n                                header.html('ENTRY           ' + this.opt.id +\n                  '<br/>SEQUENCE<br/>');\n                            }\n                        }\n                    }\n\n                    /* Correct column size in case the sequence is as small peptide */\n                    var numCols = this.opt.columns.size;\n                    if (this.opt.sequence.length < this.opt.columns.size) {\n                        numCols = this.opt.sequence.length;\n                    }\n\n                    var opt = {\n                        numLeft: true,\n                        numLeftSize: 7,\n                        numLeftPad: ' ',\n                        numTop: true,\n                        numTopEach: 5,\n                        numCols: numCols,\n                        numColsForSpace: 0,\n                        spaceBetweenChars: true\n                    };\n                    this._drawSequence(seq, opt);\n\n                    // Add footer.\n                    if (this.opt.formatOptions !== undefined) {\n                        if (this.opt.formatOptions.footer !== undefined) {\n                            if (this.opt.formatOptions.footer != false) {\n                                var footer =\n                  $('<pre/>').addClass('footer').appendTo(this._contentDiv);\n                                footer.html('<br/>///');\n                            }\n                        }\n                    }\n\n                    this._drawAnnotations(opt);\n                },\n                /*\n           * Function: Sequence._drawAnnotations\n           * Purpose:  Paint the annotations on the sequence.\n           * Returns:  -\n           * Inputs: settings -> {object}\n           */\n                _drawAnnotations: function (settings) {\n\n                    var self = this;\n                    var a = this.opt.sequence.toLowerCase().split('');\n                    var annotations = this._annotations;\n                    var leftSpaces = '';\n                    var row = '';\n                    var annot = '';\n\n                    // Index at the left?\n                    if (settings.numLeft) {\n                        leftSpaces += this._formatIndex(' ', settings.numLeftSize + 2, ' ');\n                    }\n\n                    for (var i = 0; i < a.length; i += settings.numCols) {\n                        row = '';\n                        for (var key in annotations) {\n                            annotations[key].id = this.getId() + '_' + key;\n                            annot = this._getHTMLRowAnnot(i + 1, annotations[key], settings);\n                            if (annot.length > 0) {\n                                row += '<br/>';\n                                row += leftSpaces;\n                                row += annot;\n                                row += '<br/>';\n                            }\n                        }\n\n                        var numCols = settings.numCols;\n                        var charRemaining = a.length - i;\n                        if (charRemaining < numCols) {\n                            numCols = charRemaining;\n                        }\n\n                        if (settings.numRight) {\n                            jQuery(row).insertAfter('div#' + self.opt.target + ' div pre span#numRight_' + this.getId() + '_' + (i + numCols));\n                        } else {\n                            jQuery(row).insertAfter('div#' + self.opt.target + ' div pre span#' + this.getId() + '_' + (i + numCols));\n                        }\n                    }\n\n                    // add tool tips and background' coloring effect\n                    jQuery(this._contentDiv).find('.annotation').each(function () {\n                        self._addToolTip(this, function () {\n                            return self._getAnnotationString(jQuery(this).attr('id'));\n                        });\n\n                        jQuery(this).mouseover(function (e) {\n                            jQuery('.annotation.' + jQuery(e.target).attr('id')).each(function () {\n                                jQuery(this).css('background-color', jQuery(this).attr('color'));\n                            });\n                        }).mouseout(function () {\n                            jQuery('.annotation').css('background-color', 'transparent');\n\n                        }).click(function (e) {\n                            var name = undefined;\n                            var id = jQuery(e.target).attr('id');\n                            for (var i = 0; i < self._annotations.length; i++) {\n                                if (self._annotations[i].id == id) {\n                                    name = self._annotations[i].name;\n                                    continue;\n                                }\n                            }\n                            self.trigger(EVT_ON_ANNOTATION_CLICKED, {\n                                'name': name,\n                                //\"pos\": parseInt( jQuery(e.target).attr(\"pos\") )\n                            });\n                        });\n\n                    });\n\n                },\n                /*\n         * Function: Sequence._getAnnotationString\n         * Purpose:  Get the annotation text message for the tooltip\n         * Returns:  {string} Annotation text for the annotation\n         * Inputs:   id -> {int} index of the internal annotation array\n         */\n                _getAnnotationString: function (id) {\n                    var annotation = this._annotations[id.substr(id.indexOf('_') + 1)];\n                    return annotation.name + '<br/>' + ((annotation.html) ? annotation.html : '');\n                },\n\n                /*\n         * Function: Sequence._getHTMLRowAnnot\n         * Purpose:  Build an annotation\n         * Returns:  HTML of the annotation\n         * Inputs:   currentPos -> {int}\n         * \t\t\t annotation -> {Object}\n         *  \t\t settings -> {Object}\n         */\n                _getHTMLRowAnnot: function (currentPos, annotation, settings) {\n                    var styleBegin = 'border-left:1px solid; border-bottom:1px solid; border-color:';\n                    var styleOn = 'border-bottom:1px solid; border-color:';\n                    var styleEnd = 'border-bottom:1px solid; border-right:1px solid; border-color:';\n                    var styleBeginAndEnd = 'border-left:1px solid; border-right:1px solid; border-bottom:1px solid; border-color:';\n\n                    var row = [];\n                    var end = (currentPos + settings.numCols);\n                    var spaceBetweenChars = (settings.spaceBetweenChars) ? ' ' : '';\n                    var defaultColor = annotation.color;\n                    var id = annotation.id;\n                    for (var pos = currentPos; pos < end; pos++) {\n                        // regions\n                        for (var r in annotation.regions) {\n                            region = annotation.regions[r];\n\n                            spaceAfter = '';\n                            spaceAfter += (pos % settings.numColsForSpace == 0) ? ' ' : '';\n                            spaceAfter += spaceBetweenChars;\n\n                            color = ((region.color) ? region.color : defaultColor);\n                            data = 'class=\"annotation ' + id + '\" id=\"' + id + '\" color=\"' + color + '\" pos=\"' + pos + '\"';\n\n                            if (pos == region.start && pos == region.end) {\n                                row[pos] = '<span style=\"' + styleBeginAndEnd + color + '\" ' + data + '> ';\n                                row[pos] += spaceAfter;\n                                row[pos] += '</span>';\n                            } else if (pos == region.start) {\n                                row[pos] = '<span style=\"' + styleBegin + color + '\" ' + data + '> ';\n                                row[pos] += spaceAfter;\n                                row[pos] += '</span>';\n                            } else if (pos == region.end) {\n                                row[pos] = '<span style=\"' + styleEnd + color + ' \" ' + data + '> ';\n                                //row[pos] += spaceAfter;\n                                row[pos] += '</span>';\n                            } else if (pos > region.start && pos < region.end) {\n                                row[pos] = '<span style=\"' + styleOn + color + '\" ' + data + '> ';\n                                row[pos] += spaceAfter;\n                                row[pos] += '</span>';\n                            } else if (!row[pos]) {\n                                row[pos] = ' ';\n                                row[pos] += spaceAfter;\n                            }\n                        }\n                    }\n\n                    var str = row.join('');\n\n                    return (str.indexOf('span') == -1) ? '' : str;\n                },\n                /*\n         * Function: Sequence._drawRaw\n         * Purpose:  Repaint the current sequence using RAW format.\n         * Returns:  -\n         * Inputs: -\n         */\n                _drawRaw: function () {\n                    var self = this;\n                    var a = this.opt.sequence.toLowerCase().split('');\n                    var i = 0;\n                    var arr = [];\n                    var pre = jQuery('<pre></pre>').appendTo(this._contentDiv);\n\n                    /* Correct column size in case the sequence is as small peptide */\n                    var numCols = this.opt.columns.size;\n                    if (this.opt.sequence.length < this.opt.columns.size) {\n                        numCols = this.opt.sequence.length;\n                    }\n\n                    var opt = {\n                        numCols: numCols\n                    };\n\n                    pre.html(\n                        this._drawSequence(a, opt)\n                    );\n\n                    this._drawAnnotations(opt);\n                },\n                /*\n           * Function: Sequence._drawPride\n           * Purpose:  Repaint the current sequence using PRIDE format.\n           * Returns:  -\n           * Inputs: -\n           */\n                _drawPride: function () {\n                    var seq = this.opt.sequence.toUpperCase().split('');\n\n                    /* Correct column size in case the sequence is as small peptide */\n                    var numCols = this.opt.columns.size;\n                    if (this.opt.sequence.length < this.opt.columns.size) {\n                        numCols = this.opt.sequence.length;\n                    }\n\n                    var opt = {\n                        numLeft: true,\n                        numLeftSize: 5,\n                        numLeftPad: ' ',\n                        numRight: false,\n                        numRightSize: 5,\n                        numRightPad: '',\n                        numCols: numCols,\n                        numColsForSpace: this.opt.columns.spacedEach\n                    };\n                    this._drawSequence(seq, opt);\n                    this._drawAnnotations(opt);\n                },\n                /*\n           * Function: Sequence._drawSequence\n           * Purpose:  Repaint the current sequence using CUSTOM format.\n           * Returns:  -\n           * Inputs:   a -> {char[]} a The sequence strand.\n           * \t\t\t opt -> {Object} opt The CUSTOM format.\n           */\n                _drawSequence: function (a, opt) {\n                    var indL = '';\n                    var indT = '';\n                    var indR = '\\n';\n                    var str = '';\n\n                    // Index at top?\n                    if (opt.numTop) {\n                        indT += '<span class=\"numTop pos-marker\">';\n                        var size = (opt.spaceBetweenChars) ? opt.numTopEach * 2 : opt.numTopEach;\n\n                        if (opt.numLeft) {\n                            indT += this._formatIndex(' ', opt.numLeftSize, ' ');\n                        }\n\n                        indT += this._formatIndex(' ', size, ' ');\n\n                        for (var x = opt.numTopEach; x < opt.numCols; x += opt.numTopEach) {\n                            indT += this._formatIndex(x, size, ' ', true);\n                        }\n                        indT += '</span>';\n                    }\n\n\n                    // Index at the left?\n                    if (opt.numLeft) {\n                        indL += '<span id=\"numLeft_' + this.getId() + '_' + 0 + '\"';\n                        indL += 'class=\"pos-marker\">';\n                        indL += this._formatIndex(1, opt.numLeftSize, opt.numLeftPad);\n                        indL += '  ';\n                        indL += '</span>';\n                        indL += '\\n';\n                    }\n\n                    var j = 1;\n                    for (var i = 1; i <= a.length; i++) {\n\n                        if (i % opt.numCols == 0) {\n                            str += '<span class=\"sequence\" id=\"' + this.getId() + '_' + i + '\">' + a[i - 1] + '</span>';\n\n                            if (opt.numRight) {\n                                indR += '<span id=\"numRight_' + this.getId() + '_' + i + '\"';\n                                indR += 'class=\"pos-marker\">';\n                                indR += '  ';\n                                indR += this._formatIndex(i, opt.numRightSize, opt.numRightPad);\n                                indR += '</span>';\n                                indR += '\\n';\n                            }\n\n                            str += '<br/>';\n\n                            var aaRemaining = a.length - i;\n                            if (opt.numLeft && aaRemaining > 0) {\n                                indL += '<span id=\"numLeft_' + this.getId() + '_' + i + '\"';\n                                indL += 'class=\"pos-marker\">';\n                                indL += this._formatIndex(i + 1, opt.numLeftSize, opt.numLeftPad);\n                                indL += '  ';\n                                indL += '</span>';\n                                indL += '\\n';\n                            }\n\n                            j = 1;\n\n                        } else {\n                            str += '<span class=\"sequence\" id=\"' + this.getId() + '_' + i + '\"';\n                            str += (j % opt.numColsForSpace == 0) ? ' style=\"letter-spacing: 1em;\"' : '';\n                            str += (opt.spaceBetweenChars) ? ' style=\"letter-spacing: 1em;\"' : '';\n                            str += '\">' + a[i - 1];\n                            str += '</span>';\n                            j++;\n                        }\n                    }\n\n                    str += '<br/>';\n\n                    if (jQuery.browser.msie) {\n                        str = '<pre>' + str + '</pre>';\n                    }\n\n\n                    var ret = [];\n                    if (opt.numTop) {\n                        $('<pre/>')\n                            .html(indT)\n                            .addClass('indT')\n                            .css({\n                                color: '#aaa'\n                            })\n                            .appendTo(this._contentDiv);\n                    }\n                    if (opt.numLeft) {\n                        $('<pre/>')\n                            .html(indL)\n                            .addClass('indL hidden sm:inline-block')\n                            .appendTo(this._contentDiv);\n                    }\n\n                    $('<pre/>')\n                        .html(str)\n                        .addClass('seqF inline-block')\n                        .appendTo(this._contentDiv);\n\n                    if (opt.numRight) {\n                        $('<pre/>')\n                            .html(indR)\n                            .addClass('indR')\n                            .css({\n                                color: '#aaa',\n                                display: 'inline-block'\n                            })\n                            .appendTo(this._contentDiv);\n                    }\n\n                    return str;\n                },\n                /*\n           * Function: Sequence._formatIndex\n           * Purpose:  Build the HTML corresponding to counting numbers (top, left, right) in the strand.\n           * Returns:  -\n           * Inputs:   number -> {int} The number\n           * \t\t\t size -> {int} Number of bins to suit the number.\n           * \t\t\t fillingChar -> {char} Character to be used for filling out blank bins.\n           * \t\t\t alignLeft -> {bool} Tell if aligned to the left.\n           */\n                _formatIndex: function (number, size, fillingChar, alignLeft) {\n                    var str = number.toString();\n                    var filling = '';\n                    var padding = size - str.length;\n                    if (padding > 0) {\n                        while (padding-- > 0) {\n                            filling += ('<span>' + fillingChar + '</span>');\n                        }\n                        if (alignLeft) {\n                            str = number + filling;\n                        } else {\n                            str = filling + number;\n                        }\n                    }\n                    return str;\n                },\n                /*\n           * Function: Sequence._addSpanEvents\n           * Purpose:  Add the event handlers to the strand.\n           * Returns:  -\n           * Inputs:   -\n           */\n                _addSpanEvents: function () {\n                    var self = this;\n                    var isMouseDown = false;\n                    var clickPos;\n                    var currentPos;\n\n                    self._contentDiv.find('.sequence').each(function () {\n\n                        // Register the starting position\n                        jQuery(this).mousedown(function () {\n                            var id = jQuery(this).attr('id');\n                            currentPos = parseInt(id.substr(id.indexOf('_') + 1));\n                            clickPos = currentPos;\n                            self._setSelection(clickPos, currentPos);\n                            isMouseDown = true;\n\n                            // Selection is happening, raise an event\n                            self.trigger(\n                                EVT_ON_SELECTION_CHANGE,\n                                {\n                                    'start': self.opt.selection.start,\n                                    'end': self.opt.selection.end\n                                }\n                            );\n\n                        }).mouseover(function () {\n                            // Update selection\n                            // Show tooltip containing the position\n                            var id = jQuery(this).attr('id');\n                            currentPos = parseInt(id.substr(id.indexOf('_') + 1));\n\n                            if (isMouseDown) {\n                                if (currentPos > clickPos) {\n                                    self._setSelection(clickPos, currentPos);\n                                } else {\n                                    self._setSelection(currentPos, clickPos);\n                                }\n\n                                // Selection is happening, raise an event\n                                self.trigger(EVT_ON_SELECTION_CHANGE, {\n                                    'start': self.opt.selection.start,\n                                    'end': self.opt.selection.end\n                                });\n                            }\n\n                        }).mouseup(function () {\n                            isMouseDown = false;\n                            // Selection is done, raise an event\n                            self.trigger(EVT_ON_SELECTION_CHANGED, {\n                                'start': self.opt.selection.start,\n                                'end': self.opt.selection.end\n                            });\n                        });\n\n                        // Add a tooltip for this sequence base.\n                        self._addToolTip.call(self, this, function () {\n                            if (isMouseDown) {\n                                return '[' + self.opt.selection.start + ', ' + self.opt.selection.end + ']';\n                            } else {\n                                return currentPos;\n                            }\n                        });\n\n                    })\n                        .css('cursor', 'pointer');\n                },\n                /*\n           * Function: Sequence._addTooltip\n           * Purpose:  Add a tooltip around the target DOM element provided as argument\n           * Returns:  -\n           * Inputs:   target -> {Element} DOM element wich is the targeted focus for the tooltip.\n           * \t\t\t cbGetMessageFunction -> {function} A callback function wich returns the message to be displayed in the tip.\n           */\n                _addToolTip: function (target, cbGetMessageFunction) {\n\n                    var tipId = this.opt._tooltip;\n\n                    jQuery(target).mouseover(function (e) {\n\n                        var offset = jQuery(e.target).offset();\n                        var containerOffset = jQuery(e.target).closest('.seqF').offset();\n\n                        if (!jQuery(tipId).is(':visible')) {\n                            jQuery(tipId)\n                                .css({\n                                    'background-color': '#000',\n                                    'padding': '3px 10px 3px 10px',\n                                    'top': offset.top - containerOffset.top + jQuery(e.target).height() + 15 + 'px',\n                                    'left': offset.left - containerOffset.left + jQuery(e.target).width() + 70 + 'px',\n                                    'color': '#fff',\n                                    'font-size': '12px',\n                                    'position': 'absolute'\n                                })\n                                .animate({ opacity: '0.85' }, 10)\n                                .html(cbGetMessageFunction.call(target))\n                                .show();\n                        }\n\n                    }).mouseout(function () {\n                        //Remove the appended tooltip template\n                        jQuery(tipId).hide();\n                    });\n                },\n\n                /**\n          * Annotate a set of intervals provided in the argument.\n          *\n          * @example\n          * // Annotations using regions with different colors.\n          * mySequence.addAnnotation({\n        *    name:\"UNIPROT\",\n        *    html:\"&lt;br&gt; Example of &lt;b&gt;HTML&lt;/b&gt;\",\n        *    color:\"green\",\n        *    regions: [\n        *       {start: 540, end: 560},\n        *       {start: 561, end:580, color: \"#FFA010\"},\n        *       {start: 581, end:590, color: \"red\"},\n        *       {start: 690, end:710}]\n        * });\n        *\n          *\n          * @param {Object} annotation The intervals belonging to the same annotation.\n          * Syntax: { name: &lt;value&gt;, color: &lt;HTMLColorCode&gt;, html: &lt;HTMLString&gt;, regions: [{ start: &lt;startVal1&gt;, end: &lt;endVal1&gt;}, ...,  { start: &lt;startValN&gt;, end: &lt;endValN&gt;}] }\n          */\n                addAnnotation: function (annotation) {\n                    this._annotations.push(annotation);\n                    this._redraw();\n                },\n\n                /**\n          * Removes an annotation by means of its name.\n          *\n          * @example\n          * // Remove the UNIPROT annotation.\n          * mySequence.removeAnnotation('UNIPROT');\n          *\n          * @param {string} name The name of the annotation to be removed.\n          *\n          */\n                removeAnnotation: function (name) {\n                    for (var i = 0; i < this._annotations.length; i++) {\n                        if (name != this._annotations[i].name) {\n                            this._annotations.splice(i, 1);\n                            this._redraw();\n                            break;\n                        }\n                    }\n                },\n                /**\n          * Removes all the current annotations.\n          *\n          * @example\n          * mySequence.removeAllAnnotations();\n          *\n          */\n                removeAllAnnotations: function () {\n                    this._annotations = [];\n                    this._redraw();\n                },\n\n\n            });\n\n        require('biojs-events').mixin(Sequence.prototype);\n\n    }, { 'biojs-events': 2, 'jquery-browser-plugin': 20, 'js-class': 22 }], 2: [function (require, module, exports) {\n        var events = require('backbone-events-standalone');\n\n        events.onAll = function (callback, context) {\n            this.on('all', callback, context);\n            return this;\n        };\n\n        // Mixin utility\n        events.oldMixin = events.mixin;\n        events.mixin = function (proto) {\n            events.oldMixin(proto);\n            // add custom onAll\n            var exports = ['onAll'];\n            for (var i = 0; i < exports.length; i++) {\n                var name = exports[i];\n                proto[name] = this[name];\n            }\n            return proto;\n        };\n\n        module.exports = events;\n\n    }, { 'backbone-events-standalone': 4 }], 3: [function (require, module, exports) {\n    /**\n     * Standalone extraction of Backbone.Events, no external dependency required.\n     * Degrades nicely when Backone/underscore are already available in the current\n     * global context.\n     *\n     * Note that docs suggest to use underscore's `_.extend()` method to add Events\n     * support to some given object. A `mixin()` method has been added to the Events\n     * prototype to avoid using underscore for that sole purpose:\n     *\n     *     var myEventEmitter = BackboneEvents.mixin({});\n     *\n     * Or for a function constructor:\n     *\n     *     function MyConstructor(){}\n     *     MyConstructor.prototype.foo = function(){}\n     *     BackboneEvents.mixin(MyConstructor.prototype);\n     *\n     * (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.\n     * (c) 2013 Nicolas Perriault\n     */\n        /* global exports:true, define, module */\n        (function () {\n            var root = this,\n                breaker = {},\n                nativeForEach = Array.prototype.forEach,\n                hasOwnProperty = Object.prototype.hasOwnProperty,\n                slice = Array.prototype.slice,\n                idCounter = 0;\n\n            // Returns a partial implementation matching the minimal API subset required\n            // by Backbone.Events\n            function miniscore() {\n                return {\n                    keys: Object.keys || function (obj) {\n                        if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) {\n                            throw new TypeError('keys() called on a non-object');\n                        }\n                        var key, keys = [];\n                        for (key in obj) {\n                            if (obj.hasOwnProperty(key)) {\n                                keys[keys.length] = key;\n                            }\n                        }\n                        return keys;\n                    },\n\n                    uniqueId: function (prefix) {\n                        var id = ++idCounter + '';\n                        return prefix ? prefix + id : id;\n                    },\n\n                    has: function (obj, key) {\n                        return hasOwnProperty.call(obj, key);\n                    },\n\n                    each: function (obj, iterator, context) {\n                        if (obj == null) return;\n                        if (nativeForEach && obj.forEach === nativeForEach) {\n                            obj.forEach(iterator, context);\n                        } else if (obj.length === +obj.length) {\n                            for (var i = 0, l = obj.length; i < l; i++) {\n                                if (iterator.call(context, obj[i], i, obj) === breaker) return;\n                            }\n                        } else {\n                            for (var key in obj) {\n                                if (this.has(obj, key)) {\n                                    if (iterator.call(context, obj[key], key, obj) === breaker) return;\n                                }\n                            }\n                        }\n                    },\n\n                    once: function (func) {\n                        var ran = false, memo;\n                        return function () {\n                            if (ran) return memo;\n                            ran = true;\n                            memo = func.apply(this, arguments);\n                            func = null;\n                            return memo;\n                        };\n                    }\n                };\n            }\n\n            var _ = miniscore(), Events;\n\n            // Backbone.Events\n            // ---------------\n\n            // A module that can be mixed in to *any object* in order to provide it with\n            // custom events. You may bind with `on` or remove with `off` callback\n            // functions to an event; `trigger`-ing an event fires all callbacks in\n            // succession.\n            //\n            //     var object = {};\n            //     _.extend(object, Backbone.Events);\n            //     object.on('expand', function(){ alert('expanded'); });\n            //     object.trigger('expand');\n            //\n            Events = {\n\n                // Bind an event to a `callback` function. Passing `\"all\"` will bind\n                // the callback to all events fired.\n                on: function (name, callback, context) {\n                    if (!eventsApi(this, 'on', name, [callback, context]) || !callback) return this;\n                    this._events || (this._events = {});\n                    var events = this._events[name] || (this._events[name] = []);\n                    events.push({ callback: callback, context: context, ctx: context || this });\n                    return this;\n                },\n\n                // Bind an event to only be triggered a single time. After the first time\n                // the callback is invoked, it will be removed.\n                once: function (name, callback, context) {\n                    if (!eventsApi(this, 'once', name, [callback, context]) || !callback) return this;\n                    var self = this;\n                    var once = _.once(function () {\n                        self.off(name, once);\n                        callback.apply(this, arguments);\n                    });\n                    once._callback = callback;\n                    return this.on(name, once, context);\n                },\n\n                // Remove one or many callbacks. If `context` is null, removes all\n                // callbacks with that function. If `callback` is null, removes all\n                // callbacks for the event. If `name` is null, removes all bound\n                // callbacks for all events.\n                off: function (name, callback, context) {\n                    var retain, ev, events, names, i, l, j, k;\n                    if (!this._events || !eventsApi(this, 'off', name, [callback, context])) return this;\n                    if (!name && !callback && !context) {\n                        this._events = {};\n                        return this;\n                    }\n\n                    names = name ? [name] : _.keys(this._events);\n                    for (i = 0, l = names.length; i < l; i++) {\n                        name = names[i];\n                        if (events = this._events[name]) {\n                            this._events[name] = retain = [];\n                            if (callback || context) {\n                                for (j = 0, k = events.length; j < k; j++) {\n                                    ev = events[j];\n                                    if ((callback && callback !== ev.callback && callback !== ev.callback._callback) ||\n                    (context && context !== ev.context)) {\n                                        retain.push(ev);\n                                    }\n                                }\n                            }\n                            if (!retain.length) delete this._events[name];\n                        }\n                    }\n\n                    return this;\n                },\n\n                // Trigger one or many events, firing all bound callbacks. Callbacks are\n                // passed the same arguments as `trigger` is, apart from the event name\n                // (unless you're listening on `\"all\"`, which will cause your callback to\n                // receive the true name of the event as the first argument).\n                trigger: function (name) {\n                    if (!this._events) return this;\n                    var args = slice.call(arguments, 1);\n                    if (!eventsApi(this, 'trigger', name, args)) return this;\n                    var events = this._events[name];\n                    var allEvents = this._events.all;\n                    if (events) triggerEvents(events, args);\n                    if (allEvents) triggerEvents(allEvents, arguments);\n                    return this;\n                },\n\n                // Tell this object to stop listening to either specific events ... or\n                // to every object it's currently listening to.\n                stopListening: function (obj, name, callback) {\n                    var listeners = this._listeners;\n                    if (!listeners) return this;\n                    var deleteListener = !name && !callback;\n                    if (typeof name === 'object') callback = this;\n                    if (obj) (listeners = {})[obj._listenerId] = obj;\n                    for (var id in listeners) {\n                        listeners[id].off(name, callback, this);\n                        if (deleteListener) delete this._listeners[id];\n                    }\n                    return this;\n                }\n\n            };\n\n            // Regular expression used to split event strings.\n            var eventSplitter = /\\s+/;\n\n            // Implement fancy features of the Events API such as multiple event\n            // names `\"change blur\"` and jQuery-style event maps `{change: action}`\n            // in terms of the existing API.\n            var eventsApi = function (obj, action, name, rest) {\n                if (!name) return true;\n\n                // Handle event maps.\n                if (typeof name === 'object') {\n                    for (var key in name) {\n                        obj[action].apply(obj, [key, name[key]].concat(rest));\n                    }\n                    return false;\n                }\n\n                // Handle space separated event names.\n                if (eventSplitter.test(name)) {\n                    var names = name.split(eventSplitter);\n                    for (var i = 0, l = names.length; i < l; i++) {\n                        obj[action].apply(obj, [names[i]].concat(rest));\n                    }\n                    return false;\n                }\n\n                return true;\n            };\n\n            // A difficult-to-believe, but optimized internal dispatch function for\n            // triggering events. Tries to keep the usual cases speedy (most internal\n            // Backbone events have 3 arguments).\n            var triggerEvents = function (events, args) {\n                var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n                switch (args.length) {\n                case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n                case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n                case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n                case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n                default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args);\n                }\n            };\n\n            var listenMethods = { listenTo: 'on', listenToOnce: 'once' };\n\n            // Inversion-of-control versions of `on` and `once`. Tell *this* object to\n            // listen to an event in another object ... keeping track of what it's\n            // listening to.\n            _.each(listenMethods, function (implementation, method) {\n                Events[method] = function (obj, name, callback) {\n                    var listeners = this._listeners || (this._listeners = {});\n                    var id = obj._listenerId || (obj._listenerId = _.uniqueId('l'));\n                    listeners[id] = obj;\n                    if (typeof name === 'object') callback = this;\n                    obj[implementation](name, callback, this);\n                    return this;\n                };\n            });\n\n            // Aliases for backwards compatibility.\n            Events.bind = Events.on;\n            Events.unbind = Events.off;\n\n            // Mixin utility\n            Events.mixin = function (proto) {\n                var exports = ['on', 'once', 'off', 'trigger', 'stopListening', 'listenTo',\n                    'listenToOnce', 'bind', 'unbind'];\n                _.each(exports, function (name) {\n                    proto[name] = this[name];\n                }, this);\n                return proto;\n            };\n\n            // Export Events as BackboneEvents depending on current context\n            if (typeof define === 'function') {\n                define(function () {\n                    return Events;\n                });\n            } else if (typeof exports !== 'undefined') {\n                if (typeof module !== 'undefined' && module.exports) {\n                    exports = module.exports = Events;\n                }\n                exports.BackboneEvents = Events;\n            } else {\n                root.BackboneEvents = Events;\n            }\n        })(this);\n\n    }, {}], 4: [function (require, module, exports) {\n        module.exports = require('./backbone-events-standalone');\n\n    }, { './backbone-events-standalone': 3 }], 5: [function (require, module, exports) {\n    // Generated by CoffeeScript 1.8.0\n        var GenericReader, xhr;\n\n        xhr = require('nets');\n\n        module.exports = GenericReader = (function () {\n            function GenericReader() { }\n\n            GenericReader.read = function (url, callback) {\n                var onret;\n                onret = (function (_this) {\n                    return function (err, response, text) {\n                        return _this._onRetrieval(text, callback);\n                    };\n                })(this);\n                return xhr(url, onret);\n            };\n\n            GenericReader._onRetrieval = function (text, callback) {\n                var rText;\n                rText = this.parse(text);\n                return callback(rText);\n            };\n\n            return GenericReader;\n\n        })();\n\n    }, { 'nets': 12 }], 6: [function (require, module, exports) {\n    // Generated by CoffeeScript 1.8.0\n        var Fasta, GenericReader, Seq, Str,\n            __hasProp = {}.hasOwnProperty,\n            __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n        Str = require('./strings');\n\n        GenericReader = require('./generic_reader');\n\n        Seq = require('biojs-model').seq;\n\n        module.exports = Fasta = (function (_super) {\n            __extends(Fasta, _super);\n\n            function Fasta() {\n                return Fasta.__super__.constructor.apply(this, arguments);\n            }\n\n            Fasta.parse = function (text) {\n                var currentSeq, database, databaseID, identifiers, k, label, line, seqs, _i, _len;\n                seqs = [];\n                if (Object.prototype.toString.call(text) !== '[object Array]') {\n                    text = text.split('\\n');\n                }\n                for (_i = 0, _len = text.length; _i < _len; _i++) {\n                    line = text[_i];\n                    if (line[0] === '>' || line[0] === ';') {\n                        label = line.slice(1);\n                        currentSeq = new Seq('', label, seqs.length);\n                        seqs.push(currentSeq);\n                        if (Str.contains('|', line)) {\n                            identifiers = label.split('|');\n                            k = 1;\n                            while (k < identifiers.length) {\n                                database = identifiers[k];\n                                databaseID = identifiers[k + 1];\n                                currentSeq.meta[database] = databaseID;\n                                k += 2;\n                            }\n                            currentSeq.name = identifiers[identifiers.length - 1];\n                        }\n                    } else {\n                        currentSeq.seq += line;\n                    }\n                }\n                return seqs;\n            };\n\n            return Fasta;\n\n        })(GenericReader);\n\n    }, { './generic_reader': 5, './strings': 7, 'biojs-model': 10 }], 7: [function (require, module, exports) {\n    // Generated by CoffeeScript 1.8.0\n        var strings;\n\n        strings = {\n            contains: function (text, search) {\n                return ''.indexOf.call(text, search, 0) !== -1;\n            }\n        };\n\n        module.exports = strings;\n\n    }, {}], 8: [function (require, module, exports) {\n    // Generated by CoffeeScript 1.8.0\n        var Utils;\n\n        Utils = {};\n\n        Utils.splitNChars = function (txt, num) {\n            var i, result, _i, _ref;\n            result = [];\n            for (i = _i = 0, _ref = txt.length - 1; num > 0 ? _i <= _ref : _i >= _ref; i = _i += num) {\n                result.push(txt.substr(i, num));\n            }\n            return result;\n        };\n\n        module.exports = Utils;\n\n    }, {}], 9: [function (require, module, exports) {\n    // Generated by CoffeeScript 1.8.0\n        var FastaExporter, Utils;\n\n        Utils = require('./utils');\n\n        module.exports = FastaExporter = (function () {\n            function FastaExporter() { }\n\n            FastaExporter['export'] = function (seqs, access) {\n                var seq, text, _i, _len;\n                text = '';\n                for (_i = 0, _len = seqs.length; _i < _len; _i++) {\n                    seq = seqs[_i];\n                    if (access != null) {\n                        seq = access(seq);\n                    }\n                    text += '>' + seq.name + '\\n';\n                    text += (Utils.splitNChars(seq.seq, 80)).join('\\n');\n                    text += '\\n';\n                }\n                return text;\n            };\n\n            return FastaExporter;\n\n        })();\n\n    }, { './utils': 8 }], 10: [function (require, module, exports) {\n        module.exports.seq = require('./seq');\n\n    }, { './seq': 11 }], 11: [function (require, module, exports) {\n        module.exports = function (seq, name, id) {\n            this.seq = seq;\n            this.name = name;\n            this.id = id;\n            this.meta = {};\n        };\n\n    }, {}], 12: [function (require, module, exports) {\n        var req = require('request');\n\n        module.exports = Nets;\n\n        function Nets(uri, opts, cb) {\n            req(uri, opts, cb);\n        }\n    }, { 'request': 13 }], 13: [function (require, module, exports) {\n        var window = require('global/window');\n        var once = require('once');\n        var parseHeaders = require('parse-headers');\n\n        var messages = {\n            '0': 'Internal XMLHttpRequest Error',\n            '4': '4xx Client Error',\n            '5': '5xx Server Error'\n        };\n\n        var XHR = window.XMLHttpRequest || noop;\n        var XDR = 'withCredentials' in (new XHR()) ? XHR : window.XDomainRequest;\n\n        module.exports = createXHR;\n\n        function createXHR(options, callback) {\n            if (typeof options === 'string') {\n                options = { uri: options };\n            }\n\n            options = options || {};\n            callback = once(callback);\n\n            var xhr = options.xhr || null;\n\n            if (!xhr) {\n                if (options.cors || options.useXDR) {\n                    xhr = new XDR();\n                } else {\n                    xhr = new XHR();\n                }\n            }\n\n            var uri = xhr.url = options.uri || options.url;\n            var method = xhr.method = options.method || 'GET';\n            var body = options.body || options.data;\n            var headers = xhr.headers = options.headers || {};\n            var sync = !!options.sync;\n            var isJson = false;\n            var key;\n            var load = options.response ? loadResponse : loadXhr;\n\n            if ('json' in options) {\n                isJson = true;\n                headers['Accept'] = 'application/json';\n                if (method !== 'GET' && method !== 'HEAD') {\n                    headers['Content-Type'] = 'application/json';\n                    body = JSON.stringify(options.json);\n                }\n            }\n\n            xhr.onreadystatechange = readystatechange;\n            xhr.onload = load;\n            xhr.onerror = error;\n            // IE9 must have onprogress be set to a unique function.\n            xhr.onprogress = function () {\n                // IE must die\n            };\n            // hate IE\n            xhr.ontimeout = noop;\n            xhr.open(method, uri, !sync);\n            //backward compatibility\n            if (options.withCredentials || (options.cors && options.withCredentials !== false)) {\n                xhr.withCredentials = true;\n            }\n\n            // Cannot set timeout with sync request\n            if (!sync) {\n                xhr.timeout = 'timeout' in options ? options.timeout : 5000;\n            }\n\n            if (xhr.setRequestHeader) {\n                for (key in headers) {\n                    if (headers.hasOwnProperty(key)) {\n                        xhr.setRequestHeader(key, headers[key]);\n                    }\n                }\n            } else if (options.headers) {\n                throw new Error('Headers cannot be set on an XDomainRequest object');\n            }\n\n            if ('responseType' in options) {\n                xhr.responseType = options.responseType;\n            }\n\n            if ('beforeSend' in options &&\n        typeof options.beforeSend === 'function'\n            ) {\n                options.beforeSend(xhr);\n            }\n\n            xhr.send(body);\n\n            return xhr;\n\n            function readystatechange() {\n                if (xhr.readyState === 4) {\n                    load();\n                }\n            }\n\n            function getBody() {\n                // Chrome with requestType=blob throws errors arround when even testing access to responseText\n                var body = null;\n\n                if (xhr.response) {\n                    body = xhr.response;\n                } else if (xhr.responseType === 'text' || !xhr.responseType) {\n                    body = xhr.responseText || xhr.responseXML;\n                }\n\n                if (isJson) {\n                    try {\n                        body = JSON.parse(body);\n                    } catch (e) { }\n                }\n\n                return body;\n            }\n\n            function getStatusCode() {\n                return xhr.status === 1223 ? 204 : xhr.status;\n            }\n\n            // if we're getting a none-ok statusCode, build & return an error\n            function errorFromStatusCode(status, body) {\n                var error = null;\n                if (status === 0 || (status >= 400 && status < 600)) {\n                    var message = (typeof body === 'string' ? body : false) ||\n            messages[String(status).charAt(0)];\n                    error = new Error(message);\n                    error.statusCode = status;\n                }\n\n                return error;\n            }\n\n            // will load the data & process the response in a special response object\n            function loadResponse() {\n                var status = getStatusCode();\n                var body = getBody();\n                var error = errorFromStatusCode(status, body);\n                var response = {\n                    body: body,\n                    statusCode: status,\n                    statusText: xhr.statusText,\n                    raw: xhr\n                };\n                if (xhr.getAllResponseHeaders) { //remember xhr can in fact be XDR for CORS in IE\n                    response.headers = parseHeaders(xhr.getAllResponseHeaders());\n                } else {\n                    response.headers = {};\n                }\n\n                callback(error, response, response.body);\n            }\n\n            // will load the data and add some response properties to the source xhr\n            // and then respond with that\n            function loadXhr() {\n                var status = getStatusCode();\n                var error = errorFromStatusCode(status);\n\n                xhr.status = xhr.statusCode = status;\n                xhr.body = getBody();\n                xhr.headers = parseHeaders(xhr.getAllResponseHeaders());\n\n                callback(error, xhr, xhr.body);\n            }\n\n            function error(evt) {\n                callback(evt, xhr);\n            }\n        }\n\n\n        function noop() { }\n\n    }, { 'global/window': 14, 'once': 15, 'parse-headers': 19 }], 14: [function (require, module, exports) {\n        (function (global) {\n            if (typeof window !== 'undefined') {\n                module.exports = window;\n            } else if (typeof global !== 'undefined') {\n                module.exports = global;\n            } else if (typeof self !== 'undefined') {\n                module.exports = self;\n            } else {\n                module.exports = {};\n            }\n\n        }).call(this, typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {});\n\n    }, {}], 15: [function (require, module, exports) {\n        module.exports = once;\n\n        once.proto = once(function () {\n            Object.defineProperty(Function.prototype, 'once', {\n                value: function () {\n                    return once(this);\n                },\n                configurable: true\n            });\n        });\n\n        function once(fn) {\n            var called = false;\n            return function () {\n                if (called) return;\n                called = true;\n                return fn.apply(this, arguments);\n            };\n        }\n\n    }, {}], 16: [function (require, module, exports) {\n        var isFunction = require('is-function');\n\n        module.exports = forEach;\n\n        var toString = Object.prototype.toString;\n        var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n        function forEach(list, iterator, context) {\n            if (!isFunction(iterator)) {\n                throw new TypeError('iterator must be a function');\n            }\n\n            if (arguments.length < 3) {\n                context = this;\n            }\n\n            if (toString.call(list) === '[object Array]')\n                forEachArray(list, iterator, context);\n            else if (typeof list === 'string')\n                forEachString(list, iterator, context);\n            else\n                forEachObject(list, iterator, context);\n        }\n\n        function forEachArray(array, iterator, context) {\n            for (var i = 0, len = array.length; i < len; i++) {\n                if (hasOwnProperty.call(array, i)) {\n                    iterator.call(context, array[i], i, array);\n                }\n            }\n        }\n\n        function forEachString(string, iterator, context) {\n            for (var i = 0, len = string.length; i < len; i++) {\n                // no such thing as a sparse string.\n                iterator.call(context, string.charAt(i), i, string);\n            }\n        }\n\n        function forEachObject(object, iterator, context) {\n            for (var k in object) {\n                if (hasOwnProperty.call(object, k)) {\n                    iterator.call(context, object[k], k, object);\n                }\n            }\n        }\n\n    }, { 'is-function': 17 }], 17: [function (require, module, exports) {\n        module.exports = isFunction;\n\n        var toString = Object.prototype.toString;\n\n        function isFunction(fn) {\n            var string = toString.call(fn);\n            return string === '[object Function]' ||\n        (typeof fn === 'function' && string !== '[object RegExp]') ||\n        (typeof window !== 'undefined' &&\n          // IE8 and below\n          (fn === window.setTimeout ||\n            fn === window.alert ||\n            fn === window.confirm ||\n            fn === window.prompt));\n        }\n\n    }, {}], 18: [function (require, module, exports) {\n\n        exports = module.exports = trim;\n\n        function trim(str) {\n            return str.replace(/^\\s*|\\s*$/g, '');\n        }\n\n        exports.left = function (str) {\n            return str.replace(/^\\s*/, '');\n        };\n\n        exports.right = function (str) {\n            return str.replace(/\\s*$/, '');\n        };\n\n    }, {}], 19: [function (require, module, exports) {\n        var trim = require('trim')\n            , forEach = require('for-each')\n            , isArray = function (arg) {\n                return Object.prototype.toString.call(arg) === '[object Array]';\n            };\n\n        module.exports = function (headers) {\n            if (!headers)\n                return {};\n\n            var result = {};\n\n            forEach(\n                trim(headers).split('\\n')\n                , function (row) {\n                    var index = row.indexOf(':')\n                        , key = trim(row.slice(0, index)).toLowerCase()\n                        , value = trim(row.slice(index + 1));\n\n                    if (typeof (result[key]) === 'undefined') {\n                        result[key] = value;\n                    } else if (isArray(result[key])) {\n                        result[key].push(value);\n                    } else {\n                        result[key] = [result[key], value];\n                    }\n                }\n            );\n\n            return result;\n        };\n    }, { 'for-each': 16, 'trim': 18 }], 20: [function (require, module, exports) {\n        module.exports = require('./jquery.browser');\n\n    }, { './jquery.browser': 21 }], 21: [function (require, module, exports) {\n    /*!\n     * jQuery Browser Plugin v0.0.6\n     * https://github.com/gabceb/jquery-browser-plugin\n     *\n     * Original jquery-browser code Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors\n     * http://jquery.org/license\n     *\n     * Modifications Copyright 2013 Gabriel Cebrian\n     * https://github.com/gabceb\n     *\n     * Released under the MIT license\n     *\n     * Date: 2013-07-29T17:23:27-07:00\n     */\n\n\n        var matched, browser;\n\n        var uaMatch = function (ua) {\n            ua = ua.toLowerCase();\n\n            var match = /(opr)[\\/]([\\w.]+)/.exec(ua) ||\n        /(chrome)[ \\/]([\\w.]+)/.exec(ua) ||\n        /(version)[ \\/]([\\w.]+).*(safari)[ \\/]([\\w.]+)/.exec(ua) ||\n        /(webkit)[ \\/]([\\w.]+)/.exec(ua) ||\n        /(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(ua) ||\n        /(msie) ([\\w.]+)/.exec(ua) ||\n        ua.indexOf('trident') >= 0 && /(rv)(?::| )([\\w.]+)/.exec(ua) ||\n        ua.indexOf('compatible') < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(ua) ||\n        [];\n\n            var platform_match = /(ipad)/.exec(ua) ||\n        /(iphone)/.exec(ua) ||\n        /(android)/.exec(ua) ||\n        /(windows phone)/.exec(ua) ||\n        /(win)/.exec(ua) ||\n        /(mac)/.exec(ua) ||\n        /(linux)/.exec(ua) ||\n        /(cros)/i.exec(ua) ||\n        [];\n\n            return {\n                browser: match[3] || match[1] || '',\n                version: match[2] || '0',\n                platform: platform_match[0] || ''\n            };\n        };\n\n        matched = uaMatch(window.navigator.userAgent);\n        browser = {};\n        browser.uaMatch = uaMatch;\n\n        if (matched.browser) {\n            browser[matched.browser] = true;\n            browser.version = matched.version;\n            browser.versionNumber = parseInt(matched.version);\n        }\n\n        if (matched.platform) {\n            browser[matched.platform] = true;\n        }\n\n        // These are all considered mobile platforms, meaning they run a mobile browser\n        if (browser.android || browser.ipad || browser.iphone || browser['windows phone']) {\n            browser.mobile = true;\n        }\n\n        // These are all considered desktop platforms, meaning they run a desktop browser\n        if (browser.cros || browser.mac || browser.linux || browser.win) {\n            browser.desktop = true;\n        }\n\n        // Chrome, Opera 15+ and Safari are webkit based browsers\n        if (browser.chrome || browser.opr || browser.safari) {\n            browser.webkit = true;\n        }\n\n        // IE11 has a new token so we will assign it msie to avoid breaking changes\n        if (browser.rv) {\n            var ie = 'msie';\n\n            matched.browser = ie;\n            browser[ie] = true;\n        }\n\n        // Opera 15+ are identified as opr\n        if (browser.opr) {\n            var opera = 'opera';\n\n            matched.browser = opera;\n            browser[opera] = true;\n        }\n\n        // Stock Android browsers are marked as Safari on Android.\n        if (browser.safari && browser.android) {\n            var android = 'android';\n\n            matched.browser = android;\n            browser[android] = true;\n        }\n\n        // Assign the name and platform variable\n        browser.name = matched.browser;\n        browser.platform = matched.platform;\n\n\n        module.exports = browser;\n\n    }, {}], 22: [function (require, module, exports) {\n        (function (global) {\n            /** @preserve http://github.com/easeway/js-class */\n\n            // Class Definition using ECMA5 prototype chain\n\n            function inherit(dest, src, noParent) {\n                while (src && src !== Object.prototype) {\n                    Object.getOwnPropertyNames(src).forEach(function (name) {\n                        if (name != '.class' && !dest.hasOwnProperty(name)) {\n                            var desc = Object.getOwnPropertyDescriptor(src, name);\n                            Object.defineProperty(dest, name, desc);\n                        }\n                    });\n                    if (noParent) {\n                        break;\n                    }\n                    src = src.__proto__;\n                }\n                return dest;\n            }\n\n            var Class = function (base, proto, options) {\n                if (typeof (base) != 'function') {\n                    options = proto;\n                    proto = base;\n                    base = Object;\n                }\n                if (!proto) {\n                    proto = {};\n                }\n                if (!options) {\n                    options = {};\n                }\n\n                var meta = {\n                    name: options.name,\n                    base: base,\n                    implements: []\n                };\n                var classProto = Class.clone(proto);\n                if (options.implements) {\n                    (Array.isArray(options.implements) ? options.implements : [options.implements])\n                        .forEach(function (implementedType) {\n                            if (typeof (implementedType) == 'function' && implementedType.prototype) {\n                                meta.implements.push(implementedType);\n                                Class.extend(classProto, implementedType.prototype);\n                            }\n                        });\n                }\n                classProto.__proto__ = base.prototype;\n                var theClass = function () {\n                    if (typeof (this.constructor) == 'function') {\n                        this.constructor.apply(this, arguments);\n                    }\n                };\n                meta.type = theClass;\n                theClass.prototype = classProto;\n                Object.defineProperty(theClass, '.class.meta', { value: meta, enumerable: false, configurable: false, writable: false });\n                Object.defineProperty(classProto, '.class', { value: theClass, enumerable: false, configurable: false, writable: false });\n                if (options.statics) {\n                    Class.extend(theClass, options.statics);\n                }\n                return theClass;\n            };\n\n            Class.extend = inherit;\n\n            Class.clone = function (object) {\n                return inherit({}, object);\n            };\n\n            function findType(meta, type) {\n                while (meta) {\n                    if (meta.type.prototype === type.prototype) {\n                        return true;\n                    }\n                    for (var i in meta.implements) {\n                        var implType = meta.implements[i];\n                        var implMeta = implType['.class.meta'];\n                        if (implMeta) {\n                            if (findType(implMeta, type)) {\n                                return true;\n                            }\n                        } else {\n                            for (var proto = implType.prototype; proto; proto = proto.__proto__) {\n                                if (proto === type.prototype) {\n                                    return true;\n                                }\n                            }\n                        }\n                    }\n                    meta = meta.base ? meta.base['.class.meta'] : undefined;\n                }\n                return false;\n            }\n\n            var Checker = Class({\n                constructor: function (object) {\n                    this.object = object;\n                },\n\n                typeOf: function (type) {\n                    if (this.object instanceof type) {\n                        return true;\n                    }\n                    var meta = Class.typeInfo(this.object);\n                    return meta && findType(meta, type);\n                }\n            });\n\n            // aliases\n            Checker.prototype.a = Checker.prototype.typeOf;\n            Checker.prototype.an = Checker.prototype.typeOf;\n\n            Class.is = function (object) {\n                return new Checker(object);\n            };\n\n            Class.typeInfo = function (object) {\n                var theClass = object.__proto__['.class'];\n                return theClass ? theClass['.class.meta'] : undefined;\n            };\n\n            Class.VERSION = [0, 0, 2];\n\n            if (module) {\n                module.exports = Class;\n            } else {\n                global.Class = Class;   // for browser\n            }\n        }).call(this, typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {});\n\n    }, {}], 'biojs-io-fasta': [function (require, module, exports) {\n    // Generated by CoffeeScript 1.8.0\n        module.exports.parse = require('./parser');\n\n        module.exports.writer = require('./writer');\n\n    }, { './parser': 6, './writer': 9 }], 'biojs-vis-sequence': [function (require, module, exports) {\n        module.exports = require('./lib/index');\n\n    }, { './lib/index': 1 }]\n}, {}, ['biojs-vis-sequence']);\n","import React, { createRef } from 'react';\n\n/**\n * Takes errorData object with title, message, and more_info keys as props. The\n * component displays a tailwind modal when mounted. errorData.title is used\n * to set modal title. errorData.message is inserted as HTML text in modal\n * body. And errorData.more_info is shown using a pre tag in modal body.\n *\n * The displayed modal dialog cannot be dismissed.\n * The user must close the tab or press back button to go back to search form.\n */\nexport default class ErrorModal extends React.Component {\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            errorData: {},\n            isModalVisible: false\n        };\n        this.modalRef = createRef();\n    }\n\n    render() {\n        const { isModalVisible, errorData } = this.state;\n\n        return (\n            <div className=\"relative\">\n                <dialog ref={this.modalRef} className=\"fixed p-4 w-full max-w-2xl bg-transparent focus:outline-none\">\n                    <div className=\"relative flex flex-col rounded-lg bg-white shadow\">\n                        <div className=\"flex items-start justify-between rounded-t border-b p-5\">\n                            <h3 className=\"text-xl font-medium text-gray-900\">\n                                {errorData.title}\n                            </h3>\n                            <button className=\"ml-auto inline-flex items-center rounded-lg bg-transparent p-1.5 text-gray-400 hover:bg-gray-200\" onClick={this.hide}>\n                                <i className=\"fa-solid fa-xmark hover:text-black\"></i>\n                            </button>\n                        </div>\n                        <div className=\"pt-2 px-6 pb-6 mt-2 text-sm\">\n                            <p dangerouslySetInnerHTML={{ __html: errorData.message }} className=\"mb-4\"></p>\n                            {\n                                errorData.more_info &&\n                                    <pre className=\"p-2 bg-slate-200 overflow-auto max-h-56\">{errorData.more_info}</pre>\n                            }\n                        </div>\n                    </div>\n                </dialog>\n            </div>\n        );\n    }\n\n    /**\n     * Shows error viewer.\n     */\n    show = (errorData, beforeShow) => {\n        this.setState({ errorData: errorData });\n\n        // Caller can specify an amount of time to wait for before showing the\n        // modal. This is helpful if the caller wants to finish some work\n        // before showing error modal.\n        setTimeout(() => {\n            this.modalRef.current?.showModal();\n        }, beforeShow || 0);\n    }\n\n    /**\n     * Hide dialogue.\n     */\n    hide = () => {\n        this.modalRef.current?.close();\n    }\n}\n","/* eslint-disable no-unused-vars */\nimport './jquery_world'; // for custom $.tooltip function\nimport React, { Component, createRef } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport Report from './report';\nimport SequenceModal from './sequence_modal';\nimport ErrorModal from './error_modal';\n\n/**\n * Base component of report page. This component is later rendered into page's\n * '#view' element.\n */\nclass Page extends Component {\n    constructor(props) {\n        super(props);\n        this.showSequenceModal = this.showSequenceModal.bind(this);\n        this.showErrorModal = this.showErrorModal.bind(this);\n        this.getCharacterWidth = this.getCharacterWidth.bind(this);\n        this.hspChars = createRef();\n        this.sequenceModal = createRef();\n        this.errorModal = createRef();\n    }\n    componentDidMount() {\n        var job_id = location.pathname.split('/').pop();\n        sessionStorage.setItem('job_id', job_id);\n    }\n\n    showSequenceModal(url) {\n        this.sequenceModal.current.show(url);\n    }\n\n    showErrorModal(errorData, beforeShow) {\n        this.errorModal.current.show(errorData, beforeShow);\n    }\n\n    getCharacterWidth() {\n        if (!this.characterWidth) {\n            var $hspChars = $(this.hspChars.current);\n            this.characterWidth = $hspChars.width() / 29;\n        }\n        return this.characterWidth;\n    }\n    render() {\n        return (\n            <div>\n                {/* Provide tailwind element inside the #view for\n                    the Report component to render itself in. */}\n                <div className=\"mx-auto\">\n                    <Report\n                        showSequenceModal={(_) => this.showSequenceModal(_)}\n                        getCharacterWidth={() => this.getCharacterWidth()}\n                        showErrorModal={(...args) => this.showErrorModal(...args)}\n                    />\n                </div>\n\n                {/* Add a hidden span tag containing chars used in HSPs */}\n                <pre className=\"m-0 p-0 rounded-none border-0 bg-inherit whitespace-pre-wrap break-keep mt-1 pre-text tracking-wider\" ref={this.hspChars} hidden>\n                    ABCDEFGHIJKLMNOPQRSTUVWXYZ +-\n                </pre>\n\n                {/* Required by Grapher for SVG and PNG download */}\n                <canvas id=\"png-exporter\" hidden></canvas>\n\n                <SequenceModal\n                    ref={this.sequenceModal}\n                    showErrorModal={(...args) => this.showErrorModal(...args)}\n                />\n\n                <ErrorModal ref={this.errorModal} />\n            </div>\n        );\n    }\n}\n\n\nconst root = createRoot(document.getElementById('view'));\nroot.render(<Page />);\n"],"names":["d3","require","π","Math","PI","halfπ","d3_functor","v","d3_source","d","source","d3_target","target","d3_svg_chordRadius","radius","d3_svg_arcStartAngle","startAngle","d3_svg_arcEndAngle","endAngle","circosJS","indexOf","item","i","l","this","length","Object","assign","index","key","TypeError","arguments","prototype","hasOwnProperty","call","conf","Core","tracks","heatmaps","histograms","chords","scatters","lines","stacks","highlights","texts","mixConf","defaultConf","removeTracks","trackIds","id","len","ref","store","svg","trackId","type","select","container","_typeof","remove","layout","data","_layout","Layout","log","level","code","message","levels","console","newConf","value","toString","keys","smartBorders","border","borders","currentBorder","track","trackType","width","defaultTrackWidth","innerRadius","out","outerRadius","push","sort","a","b","module","exports","checkParent","layoutSummary","header","line","checkNumber","isNaN","parseChordData","sample","map","datum","elts","source_id","source_start","source_end","target_id","target_start","target_end","filter","start","max","parseFloat","end","min","hsp","meta","block_nb","gap","k","offset","ref1","size","JSON","parse","stringify","blocks","label","color","getAngle","blockId","unit","block","_size","summary","ref2","_data","chord","Chord","build","_this","Track","parseData","applyRules","rules","results","rule","len1","m","results1","condition","parameter","getSource","getTarget","dimChords","parentElement","selectAll","style","p","resetChords","opacity","renderChords","name","ratio","link","append","attr","colorPalette","enter","s","subgroup","t","result","p0","arc","r","p1","a1","a0","equals","curve","self","f","cos","sin","ribbonV3","_d","on","event","dispatch","usePalette","cmin","cmax","colorPaletteSize","colorPaletteReverse","logScale","render","instance","selection","zIndex","tooltipContent","registerTooltip","loadData","processConf","utils","computeMinMax","values","results2","scope","reverse","fraction","scaleLogBase","x","exp","floor","datumContainer","renderDatumContainer","axes","display","renderAxes","renderDatum","j","mouseover","mouseout","renderBlock","backgrounds","background","direction","axis","minor","spacingType","spacing","major","thickness","theta","position","angle","height","logscale","block_id","y","renderLayout","entry","onClick","cornerRadius","labels","renderLayoutLabels","ticks","renderLayoutTicks","labelArc","radialOffset","text","arc_len","slice","blockTicks","space","arr","temp_scale","scaleLinear","domain","range","labelDenominator","labelSuffix","splice","labelSize","labelColor","ids","renderAll","trackStore","translated","empty","parseInt","labelSpacing","labelDisplay0","labelFont","majorSpacing","onMouseOver","element","trackParams","tip","html","show","hide","define","$","ui","version","orig","widgetUuid","widgetHasOwnProperty","Array","widgetSlice","cleanData","elems","events","elem","triggerHandler","widget","base","existingConstructor","constructor","basePrototype","proxiedPrototype","namespace","split","fullName","Widget","isArray","extend","apply","concat","expr","pseudos","toLowerCase","options","_createWidget","_proto","_childConstructors","each","prop","_super","_superApply","args","returnValue","__super","__superApply","widgetEventPrefix","widgetName","widgetFullName","child","childPrototype","bridge","input","inputIndex","inputLength","undefined","isPlainObject","object","fn","isMethodCall","methodValue","charAt","error","jquery","pushStack","get","option","_init","defaultElement","classes","disabled","create","uuid","eventNamespace","bindings","hoverable","focusable","classesElementLookup","_on","destroy","document","ownerDocument","window","defaultView","parentWindow","_getCreateOptions","_create","_setOptionDisabled","_trigger","_getCreateEventData","noop","that","_destroy","_removeClass","off","removeData","removeAttr","parts","curOption","shift","pop","_setOptions","_setOption","_setOptionClasses","classKey","elements","currentElements","addClass","_classes","add","_toggleClass","enable","disable","full","bindRemoveEvent","nodesToBind","_","some","is","processClassString","checkOption","current","uniqueSort","not","match","extra","join","_untrackClassesElement","inArray","_off","_addClass","toggleClass","suppressDisabledCheck","handlers","delegateElement","handler","handlerProxy","hasClass","guid","eventName","selector","_delay","delay","setTimeout","_hoverable","mouseenter","currentTarget","mouseleave","_focusable","focusin","focusout","callback","Event","originalEvent","trigger","isDefaultPrevented","method","defaultEffect","hasOptions","effect","effectName","duration","isEmptyObject","complete","effects","easing","queue","next","cachedScrollbarWidth","abs","rhorizontal","rvertical","roffset","rposition","rpercent","_position","getOffsets","offsets","test","parseCss","property","css","isWindow","obj","scrollbarWidth","w1","w2","div","innerDiv","children","offsetWidth","clientWidth","getScrollInfo","within","overflowX","isDocument","overflowY","hasOverflowX","scrollWidth","scrollHeight","getWithinInfo","withinElement","isElemWindow","nodeType","left","top","scrollLeft","scrollTop","outerWidth","outerHeight","of","atOffset","targetWidth","targetHeight","targetOffset","basePosition","dimensions","raw","find","scrollInfo","collision","preventDefault","pageY","pageX","at","horizontalOffset","verticalOffset","pos","exec","collisionPosition","using","elemWidth","elemHeight","marginLeft","marginTop","collisionWidth","collisionHeight","myOffset","my","dir","props","right","bottom","feedback","horizontal","vertical","important","fit","newOverRight","withinOffset","collisionPosLeft","overLeft","overRight","newOverBottom","collisionPosTop","overTop","overBottom","flip","newOverLeft","offsetLeft","newOverTop","offsetTop","flipfit","createPseudo","dataName","disableSelection","eventType","createElement","enableSelection","colors","jQuery","class2type","rplusequals","stringParsers","re","execResult","toFixed","Color","green","blue","alpha","spaces","rgba","red","idx","hsla","hue","saturation","lightness","propTypes","mod","support","supportElem","getType","clamp","allowEmpty","def","stringParse","string","inst","_rgba","_i","parser","parsed","spaceName","cache","transparent","hue2rgb","q","h","cssText","backgroundColor","_default","_key","_spaceName","to","from","compare","same","localCache","isCache","_space","used","transition","other","distance","startColor","startValue","endValue","blend","opaque","rgb","toRgbaString","prefix","toHslaString","round","toHexString","includeAlpha","g","diff","ret","local","val","cur","vtype","_hsla","hook","hooks","cssHooks","set","curElem","parentNode","e","fx","step","colorInit","borderColor","expand","expanded","part","names","aqua","black","fuchsia","gray","lime","maroon","navy","olive","purple","silver","teal","white","yellow","baseEasings","dataSpace","dataSpaceStyle","dataSpaceAnimated","classAnimationActions","shorthandStyles","borderBottom","borderLeft","borderRight","borderTop","borderWidth","margin","padding","getElementStyles","getComputedStyle","currentStyle","styles","replace","all","letter","toUpperCase","setAttr","addBack","prevObject","animateClass","o","speed","applyClassChange","animated","baseClass","allAnimations","el","action","oldStyle","newStyle","styleDifference","styleInfo","dfd","Deferred","opts","resolve","animate","promise","when","done","classNames","removeClass","force","toggle","switchClass","_normalizeArguments","speeds","standardAnimationOption","parseClip","str","uiBackCompat","save","restore","setMode","mode","createWrapper","parent","wrapper","fontSize","active","activeElement","body","wrap","contains","removeWrapper","replaceWith","scaledDimensions","percent","clipToBox","animation","clip","unshift","queueLength","count","dequeue","saveStyle","restoreStyle","hidden","getBaseline","origin","original","createPlaceholder","placeholder","cssPosition","marginBottom","marginRight","nodeName","insertAfter","visibility","removePlaceholder","dataKey","cleanUp","setTransition","list","factor","cssUnit","effectMethod","defaultMode","queueName","modes","prefilter","normalizedMode","run","cssClip","clipObj","transfer","targetFixed","fixTop","fixLeft","endPosition","innerHeight","innerWidth","startPosition","appendTo","className","clipInit","pow","Sine","Circ","sqrt","Elastic","Back","Bounce","pow2","bounce","easeIn","up","down","upAnim","downAnim","refValue","times","anims","motion","queuelen","both","oppositeMotion","mx","rows","pieces","cells","ceil","childComplete","clone","overflow","horizFirst","animation1","animation2","backgroundImage","baseline","temp","cProps","vProps","hProps","scale","childOriginal","childFrom","childTo","newOptions","fade","showhide","animateTo","positiveMotion","startClip","startRef","hasTabindex","mapName","img","focusableIfVisible","fieldset","href","closest","visible","_form","form","formResetMixin","_formResetHandler","instances","refresh","_bindFormResetHandler","_unbindFormResetHandler","unique","escapeSelector","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","sel","even","odd","keyCode","BACKSPACE","COMMA","DELETE","DOWN","END","ENTER","ESCAPE","HOME","LEFT","PAGE_DOWN","PAGE_UP","PERIOD","RIGHT","SPACE","TAB","UP","ancestor","ancestors","eq","parents","last","siblings","scrollParent","includeHidden","excludeStaticParent","overflowRegex","tabbable","tabIndex","uniqueId","removeUniqueId","collapsible","heightStyle","icons","activeHeader","activate","beforeActivate","hideProps","borderTopWidth","borderBottomWidth","paddingTop","paddingBottom","showProps","prevShow","prevHide","_processPanels","headers","_refresh","panel","_createIcons","icon","prependTo","_destroyIcons","contents","_setupEvents","_activate","_keydown","altKey","ctrlKey","currentIndex","toFocus","_eventHandler","_panelKeyDown","prev","prevHeaders","prevPanels","panels","maxHeight","_findActive","headerId","panelId","isVisible","keydown","activeChildren","clickedChildren","clicked","clickedIsActive","collapsing","toShow","toHide","eventData","oldHeader","oldPanel","newHeader","newPanel","_toggle","stop","_animate","_toggleComplete","total","adjust","boxSizing","now","safeActiveElement","submenu","items","menus","role","blur","focus","activeMenu","mouseHandled","lastMousePosition","_activateItem","isPropagationStopped","has","clearTimeout","timer","keepActiveItem","_menuItems","first","collapseAll","click","_closeOnDocumentClick","previousFilter","clientX","clientY","actualTarget","submenus","character","skip","previousPage","nextPage","_move","previous","collapse","String","fromCharCode","filterTimer","_filterMenuItems","nextAll","newSubmenus","newItems","newWrappers","menu","submenuCaret","prepend","_isDivider","_itemRole","listbox","nested","focused","activeParent","_scrollIntoView","_close","_startOpening","scroll","elementHeight","itemHeight","_hasScroll","fromFocus","_open","currentMenu","startMenu","newItem","isFirstItem","prevAll","isLastItem","offsetHeight","escapedCharacter","regex","RegExp","trim","autoFocus","minLength","change","close","open","response","search","requestIndex","pending","liveRegionTimer","suppressKeyPress","suppressKeyPressRepeat","suppressInput","isTextarea","isInput","isMultiLine","_isContentEditable","valueMethod","isNewMenu","_keyEvent","_value","term","_searchTimeout","keypress","selectedItem","searching","_change","_initSource","_appendTo","mousedown","menufocus","one","liveRegion","menuselect","beforeunload","xhr","abort","_isEventTargetInWidget","menuElement","_closeOnClickOutside","array","url","request","autocomplete","ajax","dataType","success","equalValues","menuVisible","modifierKey","metaKey","shiftKey","_search","cancelSearch","_response","content","__response","bind","_normalize","_suggest","ul","_renderMenu","_resizeMenu","_renderItemData","_renderItem","keyEvent","editable","escapeRegex","matcher","grep","messages","noResults","amount","datepicker_instActive","controlgroupCornerRegex","Datepicker","_curInst","_disabledInputs","_datepickerShowing","_inDialog","_mainDivId","_inlineClass","_appendClass","_triggerClass","_dialogClass","_disableClass","_unselectableClass","_currentClass","_dayOverClass","regional","closeText","prevText","nextText","currentText","monthNames","monthNamesShort","dayNames","dayNamesShort","dayNamesMin","weekHeader","dateFormat","firstDay","isRTL","showMonthAfterYear","yearSuffix","selectMonthLabel","selectYearLabel","_defaults","showOn","showAnim","showOptions","defaultDate","appendText","buttonText","buttonImage","buttonImageOnly","hideIfNoPrevNext","navigationAsDateFormat","gotoCurrent","changeMonth","changeYear","yearRange","showOtherMonths","selectOtherMonths","showWeek","calculateWeek","iso8601Week","shortYearCutoff","minDate","maxDate","beforeShowDay","beforeShow","onSelect","onChangeMonthYear","onClose","onUpdateDatepicker","numberOfMonths","showCurrentAtPos","stepMonths","stepBigMonths","altField","altFormat","constrainInput","showButtonPanel","autoSize","en","dpDiv","datepicker_bindHover","datepicker_handleMouseover","datepicker","_isDisabledDatepicker","inline","datepicker_extendRemove","onlyVisible","_enhance","_callChildMethod","childWidgets","controlgroupLabel","unwrap","_initWidgets","wrapAll","instanceOptions","_resolveClassesValues","widgetElement","_updateCornerClass","_buildSimpleOptions","_spinnerOptions","_buttonOptions","_checkboxradioOptions","_selectmenuOptions","middle","only","labelContents","_readType","originalLabel","checked","_updateLabel","_updateIcon","_getRadioGroup","nameSelector","_toggleClasses","checkboxradio","iconSpace","toAdd","after","isDisabled","iconPosition","showLabel","hasTitle","_updateTooltip","title","displayBlock","_attachIcon","_attachIconSpace","newShowLabel","newIcon","button","primary","secondary","buttonset","controlgroup","markerClassName","maxRows","_widgetDatepicker","setDefaults","settings","_attachDatepicker","_newInst","_connectDatepicker","_inlineDatepicker","selectedDay","selectedMonth","selectedYear","drawMonth","drawYear","_attachments","_doKeyDown","_doKeyPress","_doKeyUp","_autoSize","_disableDatepicker","_get","_showDatepicker","src","alt","_lastInput","_hideDatepicker","findMax","maxI","date","Date","setMonth","setDate","getDay","_formatDate","divSpan","_setDate","_getDefaultDate","_updateDatepicker","_updateAlternate","_dialogDatepicker","browserWidth","browserHeight","scrollX","scrollY","_dialogInst","_dialogInput","_pos","documentElement","clientHeight","blockUI","_destroyDatepicker","$target","_enableDatepicker","cursor","_getInst","err","_optionDatepicker","_getDateDatepicker","_getMinMaxDate","_changeDatepicker","_refreshDatepicker","_setDateDatepicker","noDefault","_setDateFromField","_getDate","dateStr","handled","_selectDay","_adjustDate","_clearDate","_gotoToday","stopPropagation","chars","chr","_possibleChars","charCode","lastVal","parseDate","_getFormatConfig","beforeShowSettings","isFixed","_findPos","_checkOffset","datepicker_getZindex","_shouldFocusInput","_generateHTML","_attachHandlers","origyearshtml","numMonths","_getNumberOfMonths","cols","activeCell","yearshtml","dpWidth","dpHeight","inputWidth","inputHeight","viewWidth","viewHeight","postProcess","_tidyDialog","unblockUI","_checkExternalClick","period","_adjustInstDate","currentDay","currentMonth","currentYear","getDate","getMonth","getFullYear","_notifyChange","_selectMonthYear","selectedIndex","month","year","td","_selectDate","formatDate","noWeekends","day","time","checkDate","getTime","format","iFormat","dim","iValue","shortYearCutoffTemp","doy","literal","lookAhead","matches","getNumber","isDoubled","digits","num","substring","getName","shortNames","longNames","pair","substr","checkLiteral","_ticksTo1970","_getDaysInMonth","_daylightSavingAdjust","ATOM","COOKIE","ISO_8601","RFC_822","RFC_850","RFC_1036","RFC_1123","RFC_2822","RSS","TICKS","TIMESTAMP","W3C","formatNumber","formatName","output","dates","_restrictMinMax","_determineDate","newDate","pattern","offsetString","offsetNumeric","setHours","setMinutes","setSeconds","setMilliseconds","getHours","noChange","clear","origMonth","origYear","today","selectDay","getAttribute","selectMonth","selectYear","maxDraw","gotoDate","controls","buttonPanel","dow","row","group","col","selectedDate","cornerClass","calender","thead","daysInMonth","leadDays","curRows","numRows","printDate","dRow","tbody","daySettings","otherMonth","unselectable","tempDate","isMultiMonth","currentDate","_canAdjustMonth","outerHTML","_isInRange","_generateMonthYearHeader","_getFirstDayOfMonth","inMinYear","inMaxYear","years","thisYear","determineYear","endYear","monthHtml","onChange","minMax","curYear","curMonth","yearSplit","minYear","maxYear","initialized","otherArgs","ie","navigator","userAgent","rhash","spinnerModifier","cancel","_mouseInit","_mouseDown","stopImmediatePropagation","started","_mouseDestroy","_mouseMoveDelegate","_mouseUpDelegate","_mouseMoved","_mouseStarted","_mouseUp","_mouseDownEvent","btnIsLeft","which","elIsCancel","_mouseCapture","mouseDelayMet","_mouseDelayTimer","_mouseDistanceMet","_mouseDelayMet","_mouseStart","_mouseMove","documentMode","ignoreMissingWhich","_mouseDrag","_mouseStop","plugin","proto","plugins","allowDisconnected","safeBlur","mouse","addClasses","connectToSortable","containment","cursorAt","grid","handle","helper","iframeFix","refreshPositions","revert","revertDuration","scrollSensitivity","scrollSpeed","snap","snapMode","snapTolerance","stack","drag","_setPositionRelative","_setHandleClassName","_removeHandleClassName","destroyOnClear","_getHandle","_blurActiveElement","_blockFrames","iframeBlocks","iframe","_unblockFrames","_createHelper","_cacheHelperProportions","ddmanager","_cacheMargins","offsetParent","hasFixedAncestor","positionAbs","_refreshOffsets","originalPosition","_generatePosition","originalPageX","originalPageY","_adjustOffsetFromHelper","_setContainment","_clear","dropBehaviour","prepareOffsets","dragStart","margins","_getParentOffset","relative","_getRelativeOffset","noPropagation","_convertPositionTo","_uiHash","dropped","drop","dragStop","handleElement","helperIsFunction","helperProportions","_isRootNode","tagName","po","scrollIsRootNode","isUserScrollable","c","ce","relativeContainer","constrainPosition","co","cancelHelperRemoval","draggable","uiSortable","sortables","sortable","isOver","_storedCSS","_helper","innermostIntersecting","_intersectsWith","containerCache","_parent","currentItem","fromOutside","_revert","_cursor","_opacity","scrollParentNotHidden","overflowOffset","scrolled","snapElements","$t","$o","ts","bs","ls","rs","x1","x2","y1","y2","snapping","release","snapItem","makeArray","_zIndex","alsoResize","animateDuration","animateEasing","aspectRatio","autoHide","ghost","handles","maxWidth","minHeight","minWidth","resize","_num","_isNumber","_aspectRatio","originalElement","_proportionallyResizeElements","resizable","elementIsWrapper","originalResizeStyle","zoom","_proportionallyResize","_setupHandles","_handles","resizing","_addedHandles","_removeHandles","n","hname","w","se","sw","ne","nw","_renderAxis","padPos","padWrapper","capture","curleft","curtop","_renderProxy","originalSize","sizeDiff","originalMousePosition","_propagate","smp","dx","dy","_updatePrevProperties","_updateVirtualBoundaries","_updateRatio","_respectSize","_updateCache","_applyChanges","pr","ista","soffseth","soffsetw","prevPosition","prevSize","forceAspectRatio","pMinWidth","pMaxWidth","pMinHeight","pMaxHeight","Infinity","_vBoundaries","cpos","csize","ismaxw","ismaxh","isminw","isminh","dw","dh","cw","_getPaddingPlusBorderDimensions","widths","paddings","prel","outerDimensions","elementOffset","cs","oc","containerElement","containerOffset","containerPosition","parentData","containerSize","woset","hoset","isParent","isOffsetRelative","cp","pRatio","cop","continueResize","ho","os","op","delta","sum","removeChild","gridX","gridY","ox","oy","newWidth","newHeight","isMaxWidth","isMaxHeight","isMinWidth","isMinHeight","autoOpen","buttons","closeOnEscape","modal","topOffset","beforeClose","resizeStart","resizeStop","sizeRelatedOptions","resizableRelatedOptions","originalCss","originalTitle","_createWrapper","uiDialog","_createTitlebar","_createButtonPane","_makeDraggable","_makeResizable","_isOpen","_trackFocus","_untrackInstance","_destroyOverlay","detach","before","_focusedElement","opener","_hide","isOpen","moveToTop","_moveToTop","silent","moved","zIndices","zIndexMax","_focusTabbable","_createOverlay","overlay","_show","_makeFocusTarget","hasFocus","uiDialogButtonPane","uiDialogTitlebarClose","_restoreTabbableFocus","_keepFocus","tabbables","uiDialogTitle","uiDialogTitlebar","_title","uiButtonSet","_createButtons","buttonOptions","filteredUi","resizeHandles","_minHeight","_trackingInstances","exists","resizableOptions","isDraggable","isResizable","nonContentHeight","minContentHeight","maxContentHeight","_allowInteraction","jqMinor","isOpening","overlays","dialog","dialogClass","accept","greedy","tolerance","deactivate","over","proportions","isover","isout","_addToManager","droppables","_splice","_addActiveClass","_deactivate","_removeActiveClass","_over","_addHoverClass","_out","_removeHoverClass","_drop","custom","childrenIntersection","droppable","intersect","isOverAxis","reference","toleranceMode","absolute","droppablesLoop","parentsUntil","greedyChild","parentInstance","intersects","hoverClass","activeClass","oldValue","_constrainedValue","valueDiv","_refreshValue","newValue","indeterminate","_percentage","percentage","overlayDiv","autoRefresh","selected","selecting","unselected","unselecting","dragged","elementPos","selectees","$this","selecteeOffset","$element","startselected","opos","selectee","doSelect","tmp","hit","selectmenuId","_drawButton","_drawMenu","_rendered","menuItems","_parseOption","tabindex","buttonItem","_renderButtonItem","_resizeButton","_buttonEvents","_refreshMenu","menuWrap","menuInstance","_setSelection","_select","focusIndex","_getSelectedItem","_parseOptions","_setAria","_toggleAttr","_documentClick","menuWidget","_setText","currentOptgroup","li","optgroup","getSelection","removeAllRanges","addRange","rangeCount","getRangeAt","createRange","_selectFocusedItem","oldIndex","orientation","slide","numPages","_keySliding","_mouseSliding","_animateOff","_handleIndex","_detectOrientation","_calculateNewMax","_createRange","_createHandles","handleCount","existingHandles","_valueMin","_handleEvents","normValue","closestHandle","mouseOverHandle","elementSize","_normValueFromMouse","_valueMax","thisDistance","_lastChangedValue","_start","_clickOffset","_slide","_stop","pixelTotal","pixelMouse","percentMouse","valueTotal","valueMouse","_trimAlignValue","uiHash","handleIndex","_hasMultipleValues","newVal","otherVal","currentValue","newValues","vals","_values","valsLength","_refreshRange","valModStep","alignValue","_precision","precision","_precisionOf","decimal","lastValPercent","valPercent","valueMin","valueMax","oRange","_set","curVal","keyup","ready","connectWith","dropOnEmpty","forcePlaceholderSize","forceHelperSize","beforeStop","receive","update","_isOverAxis","_isFloating","overrideHandle","validHandle","reverting","_refreshItems","_removeCurrentsFromItems","noActivation","currentContainer","domPosition","_createPlaceholder","storedCursor","storedStylesheet","_storedZIndex","_storedOpacity","_preserveHelperProportions","containers","dragging","lastPositionAbs","_scroll","itemElement","intersection","_refreshItemPositions","dragDirection","_getDragVerticalDirection","_getDragHorizontalDirection","_intersectsWithPointer","_intersectsWithSides","_rearrange","_contactContainers","_noFinalSort","serialize","_getItemsAsjQuery","connected","res","attribute","expression","toArray","dyClick","dxClick","isOverElementHeight","isOverElementWidth","isOverElement","forcePointerForContainers","floating","verticalDirection","horizontalDirection","isOverBottomHalf","isOverRightHalf","_connectWith","queries","addItems","targetData","_queries","queriesLength","fast","toleranceElement","refreshContainers","_createTrPlaceholder","sourceTr","targetTr","dist","itemWithLeastDistance","posProperty","sizeProperty","nearBottom","innermostContainer","innermostIndex","appendChild","hardRefresh","insertBefore","nextSibling","counter","delayedTriggers","delayEvent","_inst","sender","culture","incremental","numberFormat","page","spin","_draw","_events","cancelBlur","mousewheel","spinning","_spin","mousewheelTimer","checkFocus","_repeat","uiSpinner","steps","_adjustValue","_increment","aboveMin","prevValue","_parse","_format","Globalize","isValid","allowAny","stepUp","_stepUp","stepDown","_stepDown","pageUp","pages","pageDown","spinner","_uiSpinnerHtml","_buttonHtml","beforeLoad","load","_isLocal","anchor","anchorUrl","locationUrl","location","decodeURIComponent","hash","running","_processTabs","_initialActive","tabs","anchors","locationHash","tab","_getPanelForTab","_tabKeydown","focusedTab","goingForward","_handlePageNav","activating","_focusNextTab","_panelKeydown","_findNextTab","lastTabIndex","_setupHeightStyle","_sanitizeSelector","lis","tablist","prevTabs","prevAnchors","_getList","anchorId","originalAriaControls","_createPanel","oldTab","newTab","_getIndex","merge","jqXHR","status","_ajaxSettings","statusText","fail","beforeSend","ajaxSettings","_addDescribedBy","describedby","_removeDescribedBy","tooltips","disabledTitles","tooltipData","_updateContent","_disable","_enable","blurEvent","_registerCloseHandlers","contentOption","tooltip","delayedShow","a11yContent","positionOption","_find","_tooltip","mousemove","setInterval","clearInterval","fakeEvent","targetElement","_removeTooltip","closing","hiding","tooltipClass","global","factory","Error","noGlobal","getProto","getPrototypeOf","flat","hasOwn","fnToString","ObjectFunctionString","isFunction","preservedScriptAttributes","nonce","noModule","DOMEval","node","doc","script","setAttribute","head","toType","rhtmlSuffix","context","init","isArrayLike","_elem","copy","copyIsArray","deep","expando","random","isReady","msg","Ctor","globalEval","textContent","nodeValue","isXMLDoc","namespaceURI","docElem","second","invert","callbackExpect","arg","Symbol","iterator","whitespace","rtrimCSS","bup","compareDocumentPosition","preferredDoc","pushNative","Expr","outermostContext","sortInput","hasDuplicate","documentIsHTML","rbuggyQSA","dirruns","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","booleans","identifier","attributes","rwhitespace","rcomma","rleadingCombinator","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","unloadHandler","setDocument","inDisabledFieldset","addCombinator","childNodes","els","seed","nid","groups","newSelector","newContext","getElementById","getElementsByTagName","getElementsByClassName","testContext","tokenize","toSelector","querySelectorAll","qsaError","removeAttribute","cacheLength","markFunction","assert","createInputPseudo","createButtonPseudo","createDisabledPseudo","createPositionalPseudo","argument","matchIndexes","subWindow","webkitMatchesSelector","msMatchesSelector","addEventListener","getById","getElementsByName","disconnectedMatch","cssHas","querySelector","attrId","getAttributeNode","tag","innerHTML","sortDetached","matchesSelector","attrHandle","duplicates","sortStable","preFilter","excess","unquoted","nodeNameSelector","expectedNodeName","operator","check","what","_argument","simple","forward","ofType","_context","xml","outerCache","nodeIndex","useCache","firstChild","lastChild","pseudo","setFilters","matched","compile","unmatched","lang","elemLang","root","enabled","_matchIndexes","lt","gt","nth","radio","checkbox","file","password","image","submit","reset","parseOnly","tokens","soFar","preFilters","cached","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","matcherOut","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","filters","getText","isXML","selectors","until","truncate","rneedsContext","rsingleTag","winnow","qualifier","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","sibling","targets","nextUntil","prevUntil","contentDocument","rnothtmlwhite","Identity","Thrower","ex","adoptValue","reject","noValue","then","Callbacks","flag","createOptions","firing","memory","fired","locked","firingIndex","fire","once","stopOnFalse","lock","fireWith","func","tuples","state","always","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","mightThrow","notifyWith","resolveWith","process","exceptionHook","rejectWith","getErrorHook","getStackHook","stateString","singleValue","remaining","resolveContexts","resolveValues","updateFunc","rerrorNames","asyncError","warn","readyException","readyList","completed","removeEventListener","catch","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","bulk","rmsPrefix","rdashAlpha","fcamelCase","_all","camelCase","acceptData","owner","Data","uid","defineProperty","configurable","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","getData","_removeData","attrs","startLength","_queueHooks","setter","clearQueue","defer","pnum","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","adjustCSS","valueParts","tween","adjusted","maxIterations","initial","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","defaultValue","wrapMap","tr","getAll","setGlobalEval","refElements","tfoot","colgroup","caption","th","rhtml","buildFragment","scripts","ignored","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","types","origFn","leverageNative","isSetup","saved","isTrigger","delegateType","isImmediatePropagationStopped","handleObjIn","eventHandle","handleObj","namespaces","origType","elemData","triggered","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","enumerable","writable","noBubble","defaultPrevented","relatedTarget","timeStamp","isSimulated","bubbles","cancelable","changedTouches","detail","eventPhase","view","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","focusMappedHandler","simulate","attaches","dataHolder","pointerenter","pointerleave","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","replaceChild","replaceAll","insert","rnumnonpx","rcustomProp","getStyles","swap","old","rboxStyle","curCSS","computed","isCustomProp","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","measure","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","cssPrefixes","emptyStyle","vendorProps","finalPropName","cssProps","capName","vendorPropName","rdisplayswap","cssShow","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","boxModelAdjustment","dimension","box","isBorderBox","computedVal","marginDelta","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","animationIterationCount","borderImageSlice","columnCount","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","fillOpacity","floodOpacity","stopOpacity","strokeMiterlimit","strokeOpacity","origName","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","suffix","propHooks","eased","linear","swing","fxNow","inProgress","rfxtypes","rrun","schedule","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","opt","fadeTo","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","timeout","checkOn","optSelected","radioValue","boolHook","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","curValue","finalValue","stateVal","isValidValue","rreturn","valHooks","optionSet","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","encodeURIComponent","serializeArray","r20","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataTypes","inspectPrefiltersOrTransports","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","lastModified","etag","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","finalText","crossDomain","host","hasContent","ifModified","send","nativeStatusText","responses","isSuccess","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","firstElementChild","wrapInner","htmlIsFunction","XMLHttpRequest","xhrSuccessStatus","xhrSupported","cors","errorCallback","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","params","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","rect","win","pageYOffset","pageXOffset","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","rtrim","proxy","holdReady","hold","parseJSON","isNumeric","_jQuery","_$","noConflict","_react","_arrayLikeToArray","arr2","_useState2","_arrayWithHoles","_s","_e","_x","_r","_arr","_n","_iterableToArrayLimit","minLen","_unsupportedIterableToArray","_nonIterableRest","_slicedToArray","useState","isPrinting","setIsPrinting","handleBeforeprint","handleAfterprint","useEffect","__REACT_DEVTOOLS_GLOBAL_HOOK__","registerInternalModuleStart","React","Scheduler","ReactSharedInternals","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","suppressWarning","_len","printWarning","_len2","_key2","ReactDebugCurrentFrame","getStackAddendum","argsWithFormat","Function","FunctionComponent","ClassComponent","IndeterminateComponent","HostRoot","HostPortal","HostComponent","HostText","Fragment","Mode","ContextConsumer","ContextProvider","ForwardRef","Profiler","SuspenseComponent","MemoComponent","SimpleMemoComponent","LazyComponent","IncompleteClassComponent","DehydratedFragment","SuspenseListComponent","ScopeComponent","OffscreenComponent","LegacyHiddenComponent","CacheComponent","TracingMarkerComponent","enableClientRenderFallbackOnTextMismatch","enableNewReconciler","enableLazyContextPropagation","enableLegacyHidden","enableSuspenseAvoidThisFallback","enableCustomElementPropertySupport","warnAboutStringRefs","enableSchedulingProfiler","enableProfilerTimer","enableProfilerCommitHooks","allNativeEvents","Set","registrationNameDependencies","possibleRegistrationNames","registerTwoPhaseEvent","registrationName","dependencies","registerDirectEvent","lowerCasedName","ondblclick","canUseDOM","typeName","toStringTag","willCoercionThrow","testStringCoercion","checkAttributeStringCoercion","attributeName","checkFormFieldValueStringCoercion","RESERVED","BOOLEAN","OVERLOADED_BOOLEAN","NUMERIC","POSITIVE_NUMERIC","ATTRIBUTE_NAME_START_CHAR","ATTRIBUTE_NAME_CHAR","VALID_ATTRIBUTE_NAME_REGEX","illegalAttributeNameCache","validatedAttributeNameCache","isAttributeNameSafe","shouldIgnoreAttribute","propertyInfo","isCustomComponentTag","shouldRemoveAttributeWithWarning","acceptsBooleans","shouldRemoveAttribute","getPropertyInfo","PropertyInfoRecord","mustUseProperty","attributeNamespace","sanitizeURL","removeEmptyString","propertyName","forEach","_ref","CAMELIZE","capitalize","isJavaScriptProtocol","didWarn","getValueForProperty","expected","stringValue","hasAttribute","getValueForAttribute","setValueForProperty","_attributeName","attributeValue","_type","setAttributeNS","REACT_ELEMENT_TYPE","for","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_OFFSCREEN_TYPE","MAYBE_ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","maybeIterator","prevLog","prevInfo","prevWarn","prevError","prevGroup","prevGroupCollapsed","prevGroupEnd","disabledDepth","disabledLog","__reactDisabledLog","ReactCurrentDispatcher","describeBuiltInComponentFrame","ownerFn","componentFrameCache","reentry","PossiblyWeakMap","WeakMap","Map","describeNativeComponentFrame","construct","control","frame","previousDispatcher","previousPrepareStackTrace","prepareStackTrace","info","groupCollapsed","groupEnd","defineProperties","disableLogs","Fake","Reflect","sampleLines","controlLines","_frame","displayName","includes","reenableLogs","syntheticFrame","describeFunctionComponentFrame","describeUnknownElementTypeFrameInDEV","isReactComponent","$$typeof","lazyComponent","payload","_payload","describeFiber","fiber","_debugOwner","_debugSource","getStackByFiberInDevAndProd","workInProgress","return","getContextName","getComponentNameFromType","outerType","innerType","wrapperName","functionName","getWrappedName","outerName","getContextName$1","getComponentNameFromFiber","isRendering","getCurrentFiberOwnerNameInDevOrNull","getCurrentFiberStackInDev","resetCurrentFiber","getCurrentStack","setCurrentFiber","setIsRendering","rendering","getToStringValue","hasReadOnlyValue","checkControlledValueProps","onInput","readOnly","isCheckable","getTracker","_valueTracker","valueField","descriptor","getOwnPropertyDescriptor","tracker","getValue","setValue","stopTracking","detachTracker","trackValueOnNode","updateValueIfChanged","lastValue","nextValue","getValueFromNode","getActiveElement","didWarnValueDefaultValue","didWarnCheckedDefaultChecked","didWarnControlledToUncontrolled","didWarnUncontrolledToControlled","isControlled","getHostProps","defaultChecked","_wrapperState","initialChecked","initWrapperState","initialValue","controlled","updateChecked","updateWrapper","setDefaultValue","postMountWrapper","isHydrating","didWarnSelectedSetOnOption","didWarnInvalidChild","didWarnInvalidInnerHTML","validateProps","Children","dangerouslySetInnerHTML","didWarnValueDefaultValue$1","isArrayImpl","getDeclarationErrorAddendum","ownerName","valuePropNames","updateOptions","multiple","propValue","setDefaultSelected","selectedValues","selectedValue","defaultSelected","_selectedValue","_i2","getHostProps$1","initWrapperState$1","propName","propNameIsArray","checkSelectPropTypes","wasMultiple","didWarnValDefaultVal","getHostProps$2","initWrapperState$2","updateWrapper$1","postMountWrapper$3","HTML_NAMESPACE","MATH_NAMESPACE","SVG_NAMESPACE","getIntrinsicNamespace","getChildNamespace","parentNamespace","reusableSVGContainer","setInnerHTML","valueOf","svgNode","MSApp","execUnsafeLocalFunction","arg0","arg1","arg2","arg3","ELEMENT_NODE","TEXT_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_FRAGMENT_NODE","setTextContent","shorthandToLonghand","backgroundPosition","borderBlockEnd","borderBlockStart","borderImage","borderInlineEnd","borderInlineStart","borderRadius","borderStyle","columnRule","columns","flex","flexFlow","font","fontVariant","gridColumnGap","gridGap","gridRowGap","gridTemplate","listStyle","marker","mask","maskPosition","outline","placeContent","placeItems","placeSelf","textDecoration","textEmphasis","wordWrap","isUnitlessNumber","borderImageOutset","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","flexPositive","flexNegative","flexOrder","gridRowSpan","gridColumnSpan","lineClamp","tabSize","strokeDasharray","strokeDashoffset","strokeWidth","prefixes","dangerousStyleValue","isCustomProperty","checkCSSPropertyStringCoercion","prefixKey","uppercasePattern","msPattern","badVendoredStyleNamePattern","msPattern$1","hyphenPattern","badStyleValueWithSemicolonPattern","warnedStyleNames","warnedStyleValues","warnedForNaNValue","warnedForInfinityValue","warnValidStyle$1","warnHyphenatedStyleName","warnBadVendoredStyleName","warnStyleValueWithSemicolon","warnStyleValueIsNaN","warnStyleValueIsInfinity","createDangerousStringForStyles","serialized","delimiter","styleName","styleValue","setValueForStyles","expandShorthandMap","longhands","voidElementTags","menuitem","area","br","embed","hr","keygen","wbr","HTML","assertValidProps","suppressContentEditableWarning","contentEditable","isCustomComponent","possibleStandardNames","acceptcharset","accesskey","allowfullscreen","as","autocapitalize","autocorrect","autofocus","autoplay","autosave","cellpadding","cellspacing","challenge","cite","class","classid","classname","colspan","contenteditable","contextmenu","controlslist","coords","crossorigin","dangerouslysetinnerhtml","datetime","default","defaultchecked","defaultvalue","disablepictureinpicture","disableremoteplayback","download","enctype","enterkeyhint","formmethod","formaction","formenctype","formnovalidate","formtarget","frameborder","hreflang","htmlfor","httpequiv","imagesizes","imagesrcset","innerhtml","inputmode","integrity","itemid","itemprop","itemref","itemscope","itemtype","keyparams","keytype","kind","loop","low","manifest","marginwidth","marginheight","maxlength","media","mediagroup","minlength","muted","nomodule","novalidate","optimum","playsinline","poster","preload","profile","radiogroup","readonly","referrerpolicy","rel","required","reversed","rowspan","sandbox","scoped","scrolling","seamless","shape","sizes","span","spellcheck","srcdoc","srclang","srcset","usemap","wmode","about","accentheight","accumulate","additive","alignmentbaseline","allowreorder","alphabetic","amplitude","arabicform","ascent","attributename","attributetype","autoreverse","azimuth","basefrequency","baselineshift","baseprofile","bbox","begin","bias","by","calcmode","capheight","clippath","clippathunits","cliprule","colorinterpolation","colorinterpolationfilters","colorprofile","colorrendering","contentscripttype","contentstyletype","cx","cy","datatype","decelerate","descent","diffuseconstant","divisor","dominantbaseline","dur","edgemode","elevation","enablebackground","exponent","externalresourcesrequired","fill","fillopacity","fillrule","filterres","filterunits","floodopacity","floodcolor","fontfamily","fontsize","fontsizeadjust","fontstretch","fontstyle","fontvariant","fontweight","fy","g1","g2","glyphname","glyphorientationhorizontal","glyphorientationvertical","glyphref","gradienttransform","gradientunits","hanging","horizadvx","horizoriginx","ideographic","imagerendering","in2","in","inlist","intercept","k1","k2","k3","k4","kernelmatrix","kernelunitlength","kerning","keypoints","keysplines","keytimes","lengthadjust","letterspacing","lightingcolor","limitingconeangle","markerend","markerheight","markermid","markerstart","markerunits","markerwidth","maskcontentunits","maskunits","mathematical","numoctaves","orient","overlineposition","overlinethickness","paintorder","panose1","pathlength","patterncontentunits","patterntransform","patternunits","pointerevents","points","pointsatx","pointsaty","pointsatz","preservealpha","preserveaspectratio","primitiveunits","refx","refy","renderingintent","repeatcount","repeatdur","requiredextensions","requiredfeatures","resource","restart","rotate","rx","ry","security","shaperendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stemh","stemv","stitchtiles","stopcolor","stopopacity","strikethroughposition","strikethroughthickness","stroke","strokedasharray","strokedashoffset","strokelinecap","strokelinejoin","strokemiterlimit","strokewidth","strokeopacity","suppresscontenteditablewarning","suppresshydrationwarning","surfacescale","systemlanguage","tablevalues","targetx","targety","textanchor","textdecoration","textlength","textrendering","transform","typeof","u1","u2","underlineposition","underlinethickness","unicode","unicodebidi","unicoderange","unitsperem","valphabetic","vectoreffect","vertadvy","vertoriginx","vertoriginy","vhanging","videographic","viewbox","viewtarget","vmathematical","vocab","wordspacing","writingmode","xchannelselector","xheight","xlinkactuate","xlinkarcrole","xlinkhref","xlinkrole","xlinkshow","xlinktitle","xlinktype","xmlbase","xmllang","xmlns","xmlnsxlink","xmlspace","ychannelselector","z","zoomandpan","ariaProperties","warnedProperties","rARIA","rARIACamel","validateProperty","ariaName","correctName","standardName","validateProperty$1","didWarnValueNull","warnedProperties$1","EVENT_NAME_REGEX","INVALID_EVENT_NAME_REGEX","rARIA$1","rARIACamel$1","eventRegistry","isReserved","IS_EVENT_HANDLE_NON_MANAGED_NODE","IS_NON_DELEGATED","IS_CAPTURE_PHASE","SHOULD_NOT_PROCESS_POLYFILL_EVENT_PLUGINS","currentReplayingEvent","getEventTarget","srcElement","correspondingUseElement","restoreImpl","restoreTarget","restoreQueue","restoreStateOfTarget","internalInstance","getInstanceFromNode","stateNode","_props","getFiberCurrentPropsFromNode","enqueueStateRestore","restoreStateIfNeeded","queuedTargets","batchedUpdatesImpl","bookkeeping","flushSyncImpl","isInsideEventHandler","batchedUpdates","getListener","listener","shouldPreventMouseEvent","passiveBrowserEventsSupported","invokeGuardedCallbackProd","funcArgs","onError","invokeGuardedCallbackImpl","dispatchEvent","createEvent","fakeNode","didCall","didError","windowEvent","windowEventDescriptor","restoreAfterDispatch","evtType","callCallback","didSetError","isCrossOriginError","handleWindowError","colno","lineno","_suppressLogging","inner","initEvent","invokeGuardedCallbackImpl$1","hasError","caughtError","hasRethrowError","rethrowError","reporter","invokeGuardedCallback","clearCaughtError","_reactInternals","NoFlags","PerformedWork","Placement","Update","ChildDeletion","ContentReset","Callback","DidCapture","ForceClientRender","Ref","Snapshot","Passive","Hydrating","Visibility","StoreConsistency","LifecycleEffectMask","HostEffectMask","Incomplete","ShouldCapture","ForceUpdateForLegacySuspense","Forked","RefStatic","LayoutStatic","PassiveStatic","MountLayoutDev","MountPassiveDev","BeforeMutationMask","MutationMask","LayoutMask","PassiveMask","StaticMask","ReactCurrentOwner","getNearestMountedFiber","nearestMounted","alternate","nextNode","flags","getSuspenseInstanceFromFiber","suspenseState","memoizedState","dehydrated","getContainerFromFiber","containerInfo","assertIsMounted","findCurrentFiberUsingSlowPath","parentA","parentB","nextParent","didFindChild","_child","findCurrentHostFiber","currentParent","findCurrentHostFiberImpl","findCurrentHostFiberWithNoPortals","findCurrentHostFiberWithNoPortalsImpl","scheduleCallback","unstable_scheduleCallback","cancelCallback","unstable_cancelCallback","shouldYield","unstable_shouldYield","requestPaint","unstable_requestPaint","unstable_now","getCurrentPriorityLevel","unstable_getCurrentPriorityLevel","ImmediatePriority","unstable_ImmediatePriority","UserBlockingPriority","unstable_UserBlockingPriority","NormalPriority","unstable_NormalPriority","LowPriority","unstable_LowPriority","IdlePriority","unstable_IdlePriority","unstable_yieldValue","unstable_setDisableYieldValue","rendererID","injectedHook","injectedProfilingHooks","hasLoggedError","isDevToolsPresent","setIsStrictModeForDevtools","newIsStrictMode","setStrictMode","injectProfilingHooks","profilingHooks","getLaneLabelMap","lane","TotalLanes","getLabelForLane","markCommitStopped","markComponentRenderStarted","markComponentRenderStopped","markComponentLayoutEffectMountStarted","markComponentLayoutEffectUnmountStarted","markComponentLayoutEffectUnmountStopped","markComponentErrored","thrownValue","lanes","markRenderStarted","markRenderStopped","markStateUpdateScheduled","NoMode","ConcurrentMode","ProfileMode","StrictLegacyMode","StrictEffectsMode","clz32","asUint","LN2","NoLanes","NoLane","SyncLane","InputContinuousHydrationLane","InputContinuousLane","DefaultHydrationLane","DefaultLane","TransitionHydrationLane","TransitionLanes","TransitionLane1","TransitionLane2","TransitionLane3","TransitionLane4","TransitionLane5","TransitionLane6","TransitionLane7","TransitionLane8","TransitionLane9","TransitionLane10","TransitionLane11","TransitionLane12","TransitionLane13","TransitionLane14","TransitionLane15","TransitionLane16","RetryLanes","RetryLane1","RetryLane2","RetryLane3","RetryLane4","RetryLane5","SomeRetryLane","SelectiveHydrationLane","NonIdleLanes","IdleHydrationLane","IdleLane","OffscreenLane","NoTimestamp","nextTransitionLane","nextRetryLane","getHighestPriorityLanes","getHighestPriorityLane","getNextLanes","wipLanes","pendingLanes","nextLanes","suspendedLanes","pingedLanes","nonIdlePendingLanes","nonIdleUnblockedLanes","nonIdlePingedLanes","unblockedLanes","nextLane","wipLane","entangledLanes","entanglements","pickArbitraryLaneIndex","computeExpirationTime","getLanesToRetrySynchronouslyOnError","everythingButOffscreen","includesNonIdleWork","includesOnlyRetries","includesBlockingLane","isTransitionLane","claimNextTransitionLane","pickArbitraryLane","laneToIndex","includesSomeLane","isSubsetOfLanes","subset","mergeLanes","removeLanes","intersectLanes","createLaneMap","laneMap","markRootUpdated","updateLane","eventTime","eventTimes","markRootPinged","markRootEntangled","rootEntangledLanes","addFiberToLanesMap","pendingUpdatersLaneMap","movePendingFibersToMemoized","memoizedUpdaters","updaters","_attemptSynchronousHydration","attemptContinuousHydration","attemptHydrationAtCurrentPriority","getCurrentUpdatePriority$1","attemptHydrationAtPriority","DiscreteEventPriority","ContinuousEventPriority","DefaultEventPriority","IdleEventPriority","currentUpdatePriority","getCurrentUpdatePriority","setCurrentUpdatePriority","newPriority","isHigherEventPriority","lanesToEventPriority","isRootDehydrated","isDehydrated","attemptSynchronousHydration","hasScheduledReplayAttempt","queuedDiscreteEvents","queuedFocus","queuedDrag","queuedMouse","queuedPointers","queuedPointerCaptures","queuedExplicitHydrationTargets","discreteReplayableEvents","clearIfContinuousEvent","domEventName","delete","_pointerId","accumulateOrCreateContinuousQueuedReplayableEvent","existingQueuedEvent","blockedOn","eventSystemFlags","targetContainer","queuedEvent","targetContainers","createQueuedReplayableEvent","_fiber2","attemptExplicitHydrationTarget","queuedTarget","targetInst","getClosestInstanceFromNode","priority","attemptReplayContinuousQueuedEvent","nextBlockedOn","findInstanceBlockingEvent","_fiber3","nativeEventClone","attemptReplayContinuousQueuedEventInMap","replayUnblockedEvents","scheduleCallbackIfUnblocked","unblocked","retryIfBlockedOn","unblock","nextExplicitTarget","ReactCurrentBatchConfig","_enabled","setEnabled","dispatchDiscreteEvent","previousPriority","prevTransition","dispatchContinuousEvent","dispatchEventForPluginEventSystem","return_targetInst","pointerEvent","_pointerEvent","_pointerId2","queueIfContinuousEvent","dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay","getEventPriority","startText","fallbackText","endLength","minEnd","sliceTail","getEventCharCode","functionThatReturnsTrue","functionThatReturnsFalse","createSyntheticEvent","Interface","SyntheticBaseEvent","reactName","reactEventType","nativeEventTarget","_propName","_reactName","_targetInst","normalize","cancelBubble","persist","isPersistent","lastMovementX","lastMovementY","lastMouseEvent","EventInterface","isTrusted","SyntheticEvent","UIEventInterface","SyntheticUIEvent","MouseEventInterface","getModifierState","getEventModifierState","fromElement","movementX","updateMouseMovementPolyfillState","movementY","SyntheticMouseEvent","SyntheticDragEvent","dataTransfer","SyntheticFocusEvent","SyntheticAnimationEvent","animationName","elapsedTime","pseudoElement","SyntheticClipboardEvent","clipboardData","SyntheticCompositionEvent","SyntheticInputEvent","normalizeKey","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","translateToKey","modifierKeyToProp","Alt","Control","Meta","Shift","modifierStateGetter","keyArg","keyProp","SyntheticKeyboardEvent","repeat","locale","SyntheticPointerEvent","pressure","tangentialPressure","tiltX","tiltY","twist","isPrimary","SyntheticTouchEvent","SyntheticTransitionEvent","SyntheticWheelEvent","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","END_KEYCODES","START_KEYCODE","canUseCompositionEvent","canUseTextInputEvent","useFallbackCompositionData","SPACEBAR_CODE","SPACEBAR_CHAR","hasSpaceKeypress","isFallbackCompositionEnd","getDataFromCustomEvent","isUsingKoreanIME","isComposing","extractBeforeInputEvent","dispatchQueue","getNativeBeforeInputChars","isKeypressCommand","char","getFallbackBeforeInputChars","listeners","accumulateTwoPhaseListeners","supportedInputTypes","email","number","tel","week","isTextInputElement","createAndAccumulateChangeEvent","activeElementInst","runEventInBatch","processDispatchQueue","getInstIfValueChanged","getNodeFromInstance","getTargetInstForChangeEvent","isInputEventSupported","stopWatchingForValueChange","detachEvent","handlePropertyChange","manualDispatchChangeEvent","handleEventsForInputEventPolyfill","attachEvent","startWatchingForValueChange","getTargetInstForInputEventPolyfill","getTargetInstForClickEvent","getTargetInstForInputOrChangeEvent","isSupported","isEventSupported","objectIs","shallowEqual","objA","objB","keysA","keysB","currentKey","getLeafNode","getSiblingNode","getNodeForCharacterOffset","nodeStart","nodeEnd","isTextNode","containsNode","outerNode","innerNode","isInDocument","isSameOriginFrame","contentWindow","getActiveElementDeep","HTMLIFrameElement","hasSelectionCapabilities","selectionStart","selectionEnd","anchorNode","anchorOffset","focusNode","focusOffset","indexWithinAnchor","indexWithinFocus","outer","getModernOffsetsFromPoints","skipSelectionChangeEvent","activeElement$1","activeElementInst$1","lastSelection","mouseDown","constructSelectEvent","eventTarget","currentSelection","getSelection$1","makePrefixMap","styleProp","vendorPrefixes","animationend","animationiteration","animationstart","transitionend","prefixedEventNames","getVendorPrefixedEventName","prefixMap","ANIMATION_END","ANIMATION_ITERATION","ANIMATION_START","TRANSITION_END","topLevelEventsToReactNames","simpleEventPluginEvents","registerSimpleEvent","extractEvents$5","SyntheticEventCtor","inCapturePhase","accumulateTargetOnly","_listeners","targetFiber","nativeEventType","reactEventName","lastHostComponent","_instance2","createDispatchListener","accumulateSinglePhaseListeners","_event","extractEvents$4","isOverEvent","isOutEvent","isContainerMarkedAsRoot","_related","leaveEventType","enterEventType","eventTypePrefix","fromNode","toNode","leave","enterEvent","leaveEvent","common","instA","instB","nodeA","nodeB","depthA","tempA","getParent","depthB","tempB","getLowestCommonAncestor","accumulateEnterLeaveListenersForEvent","accumulateEnterLeaveTwoPhaseListeners","extractEvents$2","getTargetInstFunc","handleEventFunc","targetNode","shouldUseClickEvent","extractEvents$1","extractEvents$3","fallbackData","getCompositionEventType","isFallbackCompositionStart","initialize","customData","extractCompositionEvent","extractEvents","registerSimpleEvents","mediaEventTypes","nonDelegatedEvents","executeDispatch","invokeGuardedCallbackAndCatchFirstError","processDispatchQueueItemsInOrder","dispatchListeners","previousInstance","_dispatchListeners$i","_dispatchListeners$_i","_instance","_currentTarget","_listener","_dispatchQueue$i","rethrowCaughtError","listenToNonDelegatedEvent","elementListenerSet","isCapturePhaseListener","listenerSet","internalEventHandlersKey","listenerSetKey","getListenerSetKey","addTrappedEventListener","listenToNativeEvent","listeningMarker","listenToAllSupportedEvents","rootContainerElement","isDeferredListenerForLegacyFBSupport","listenerWrapper","createEventListenerWrapperWithPriority","isPassiveListener","passive","addEventCaptureListenerWithPassiveFlag","addEventCaptureListener","addEventBubbleListenerWithPassiveFlag","addEventBubbleListener","isMatchingRootContainer","grandContainer","ancestorInst","targetContainerNode","mainLoop","nodeTag","grandNode","grandTag","parentTag","dispatchEventsForPlugins","captureName","_instance3","captureListener","bubbleListener","_instance4","warnedUnknownTags","validatePropertiesInDevelopment","warnForPropDifference","warnForExtraAttributes","warnForInvalidEventListener","canDiffStyleForHydrationWarning","normalizeHTML","didWarnInvalidHydration","DANGEROUSLY_SET_INNER_HTML","SUPPRESS_CONTENT_EDITABLE_WARNING","SUPPRESS_HYDRATION_WARNING","AUTOFOCUS","CHILDREN","STYLE","HTML$1","webview","invalidProps","unknownPropString","warnInvalidARIAProps","validateProperties","validateProperties$1","unknownProps","warnUnknownProperties","validateProperties$2","serverValue","clientValue","normalizedClientValue","normalizeMarkupForTextOrAttribute","normalizedServerValue","attributeNames","testElement","createElementNS","NORMALIZE_NEWLINES_REGEX","NORMALIZE_NULL_AND_REPLACEMENT_REGEX","markup","checkForUnmatchedText","serverText","clientText","isConcurrentMode","shouldWarnDev","normalizedClientText","normalizedServerText","getOwnerDocumentFromRootContainer","trapClickOnNonInteractiveElement","onclick","warnForDeletedHydratableElement","warnForDeletedHydratableText","warnForInsertedHydratedElement","warnForInsertedHydratedText","validateDOMNesting","updatedAncestorInfo","specialTags","inScopeTags","buttonScopeTags","impliedEndTags","emptyAncestorInfo","formTag","aTagInScope","buttonTagInScope","nobrTagInScope","pTagInButtonScope","listItemTagAutoclosing","dlItemTagAutoclosing","oldInfo","ancestorInfo","didWarn$1","childTag","childText","parentInfo","invalidParent","isTagValidWithParent","invalidAncestor","findInvalidAncestorForTag","invalidParentOrAncestor","ancestorTag","warnKey","tagDisplayName","whitespaceInfo","SUPPRESS_HYDRATION_WARNING$1","SUSPENSE_START_DATA","SUSPENSE_END_DATA","SUSPENSE_PENDING_START_DATA","SUSPENSE_FALLBACK_START_DATA","STYLE$1","eventsEnabled","selectionInformation","shouldSetTextContent","__html","scheduleTimeout","cancelTimeout","noTimeout","localPromise","Promise","scheduleMicrotask","queueMicrotask","handleErrorInNextTick","resetTextContent","domElement","clearSuspenseBoundary","suspenseInstance","hideInstance","unhideInstance","unhideTextInstance","textInstance","isSuspenseInstancePending","isSuspenseInstanceFallback","getNextHydratable","nodeData","getNextHydratableSibling","getParentSuspenseInstance","targetInstance","previousSibling","randomKey","internalInstanceKey","internalPropsKey","internalContainerInstanceKey","internalEventHandlerListenersKey","internalEventHandlesSetKey","precacheFiberNode","hostInst","markContainerAsRoot","hostRoot","unmarkContainerAsRoot","targetSuspenseInst","updateFiberProps","loggedTypeFailures","ReactDebugCurrentFrame$1","setCurrentlyValidatingElement","_owner","_source","setExtraStackFrame","checkPropTypes","typeSpecs","componentName","typeSpecName","error$1","fiberStack","valueStack","warnedAboutMissingGetChildContext","createCursor","emptyContextObject","freeze","contextStackCursor","didPerformWorkStackCursor","previousContext","getUnmaskedContext","Component","didPushOwnContextIfProvider","isContextProvider","cacheContext","unmaskedContext","maskedContext","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","getMaskedContext","contextTypes","hasContextChanged","childContextTypes","popContext","popTopLevelContextObject","pushTopLevelContextObject","didChange","processChildContext","parentContext","getChildContext","childContext","contextKey","pushContextProvider","memoizedMergedChildContext","__reactInternalMemoizedMergedChildContext","invalidateContextProvider","mergedContext","LegacyRoot","ConcurrentRoot","syncQueue","includesLegacySyncCallbacks","isFlushingSyncQueue","scheduleSyncCallback","flushSyncCallbacksOnlyInLegacyMode","flushSyncCallbacks","previousUpdatePriority","forkStack","forkStackIndex","treeForkProvider","treeForkCount","idStack","idStackIndex","treeContextProvider","treeContextId","treeContextOverflow","pushTreeFork","totalChildren","warnIfNotHydrating","pushTreeId","baseIdWithLeadingBit","baseOverflow","baseLength","getBitLength","baseId","slot","numberOfOverflowBits","newOverflow","restOfBaseId","restOfBaseLength","restOfLength","pushMaterializedTreeId","popTreeContext","getIsHydrating","hydrationParentFiber","nextHydratableInstance","didSuspendOrErrorDEV","hydrationErrors","markDidThrowWhileHydratingDEV","warnUnhydratedInstance","returnFiber","parentContainer","didNotHydrateInstanceWithinContainer","parentType","parentProps","didNotHydrateInstance","memoizedProps","didNotHydrateInstanceWithinSuspenseInstance","deleteHydratableInstance","childToDelete","createFiber","elementType","deletions","warnNonhydratedInstance","pendingProps","didNotFindHydratableInstanceWithinContainer","didNotFindHydratableTextInstanceWithinContainer","didNotFindHydratableInstance","didNotFindHydratableTextInstance","_parentInstance","_type2","didNotFindHydratableInstanceWithinSuspenseInstance","didNotFindHydratableTextInstanceWithinSuspenseInstance","insertNonHydratedInstance","tryHydrate","nextInstance","canHydrateInstance","canHydrateTextInstance","canHydrateSuspenseInstance","treeContext","retryLane","dehydratedFragment","dehydratedNode","createFiberFromDehydratedFragment","shouldClientRenderOnMismatch","throwOnHydrationMismatch","tryToClaimNextHydratableInstance","firstAttemptedInstance","prevHydrationParentFiber","popToNextHostParent","popHydrationState","warnIfUnhydratedTailNodes","getNextHydratableInstanceAfterSuspenseInstance","skipPastDehydratedSuspenseInstance","resetHydrationState","upgradeHydrationErrorsToRecoverable","queueRecoverableErrors","queueHydrationError","ReactCurrentBatchConfig$1","NoTransition","ReactStrictModeWarnings","recordUnsafeLifecycleWarnings","flushPendingUnsafeLifecycleWarnings","recordLegacyContextWarning","flushLegacyContextWarning","discardPendingWarnings","setToSortedString","pendingComponentWillMountWarnings","pendingUNSAFE_ComponentWillMountWarnings","pendingComponentWillReceivePropsWarnings","pendingUNSAFE_ComponentWillReceivePropsWarnings","pendingComponentWillUpdateWarnings","pendingUNSAFE_ComponentWillUpdateWarnings","didWarnAboutUnsafeLifecycles","componentWillMount","__suppressDeprecationWarning","UNSAFE_componentWillMount","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","componentWillUpdate","UNSAFE_componentWillUpdate","componentWillMountUniqueNames","UNSAFE_componentWillMountUniqueNames","componentWillReceivePropsUniqueNames","UNSAFE_componentWillReceivePropsUniqueNames","componentWillUpdateUniqueNames","UNSAFE_componentWillUpdateUniqueNames","didWarnAboutMaps","didWarnAboutGenerators","didWarnAboutStringRefs","ownerHasKeyUseWarning","ownerHasFunctionTypeWarning","warnForMissingKey","pendingLegacyContextWarning","didWarnAboutLegacyContext","coerceRef","mixedRef","_self","ownerFiber","resolvedInst","stringRef","_stringRef","refs","throwOnInvalidObjectType","newChild","childString","warnOnFunctionType","resolveLazy","lazyType","ChildReconciler","shouldTrackSideEffects","deleteChild","deleteRemainingChildren","currentFirstChild","mapRemainingChildren","existingChildren","existingChild","useFiber","createWorkInProgress","placeChild","newFiber","lastPlacedIndex","newIndex","placeSingleChild","updateTextNode","created","createFiberFromText","existing","updateElement","updateFragment","isCompatibleFamilyForHotReloading","createFiberFromElement","updatePortal","portal","createFiberFromPortal","createFiberFromFragment","createChild","_created","_created2","_created3","updateSlot","oldFiber","updateFromMap","newIdx","warnOnInvalidKey","knownKeys","reconcileChildFibers","_existing","_created4","reconcileSingleElement","reconcileSinglePortal","newChildren","resultingFirstChild","previousNewFiber","nextOldFiber","_newFiber","_newFiber2","reconcileChildrenArray","newChildrenIterable","iteratorFn","entries","_newChildren","_step","_newFiber3","_newFiber4","reconcileChildrenIterator","reconcileSingleTextNode","strictRoot","maybeStrictRoot","findStrictRoot","warningsForRoot","fiberArray","firstFiber","uniqueNames","sortedNames","_store","validated","mountChildFibers","resetChildFibers","resetWorkInProgress","rendererSigil","valueCursor","currentlyRenderingFiber","lastContextDependency","lastFullyObservedContext","isDisallowedContextReadInDEV","resetContextDependencies","enterDisallowedContextReadInDEV","exitDisallowedContextReadInDEV","pushProvider","providerFiber","_currentValue","_currentRenderer","popProvider","scheduleContextWorkOnParentPath","renderLanes","propagationRoot","childLanes","prepareToReadContext","firstContext","markWorkInProgressReceivedUpdate","readContext","contextItem","memoizedValue","concurrentQueues","pushConcurrentUpdateQueue","enqueueConcurrentHookUpdate","interleaved","markUpdateLaneFromFiberToRoot","enqueueConcurrentRenderForLane","unsafe_markUpdateLaneFromFiberToRoot","sourceFiber","warnAboutUpdateOnNotYetMountedFiberInDEV","didWarnUpdateInsideUpdate","currentlyProcessingQueue","UpdateState","ReplaceState","ForceUpdate","CaptureUpdate","hasForceUpdate","initializeUpdateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","updateQueue","cloneUpdateQueue","currentQueue","createUpdate","enqueueUpdate","sharedQueue","executionContext","RenderContext","NoContext","enqueueConcurrentClassUpdate","entangleTransitions","queueLanes","newQueueLanes","enqueueCapturedUpdate","capturedUpdate","newFirst","newLast","getStateFromUpdate","prevState","nextProps","nextState","partialState","processUpdateQueue","pendingQueue","lastPendingUpdate","firstPendingUpdate","currentLastBaseUpdate","newState","newLanes","newBaseState","newFirstBaseUpdate","newLastBaseUpdate","updateEventTime","_clone","_lastPendingUpdate","_firstPendingUpdate","lastInterleaved","markSkippedUpdateLanes","resetHasForceUpdateBeforeProcessing","checkHasForceUpdateAfterProcessing","commitUpdateQueue","finishedWork","finishedQueue","NO_CONTEXT","contextStackCursor$1","contextFiberStackCursor","rootInstanceStackCursor","requiredContext","getRootHostContainer","pushHostContainer","nextRootInstance","nextRootContext","rootContainerInstance","validatedTag","getRootHostContext","popHostContainer","getHostContext","pushHostContext","parentHostContext","parentHostContextDev","nextContext","popHostContext","SubtreeSuspenseContextMask","InvisibleParentSuspenseContext","ForceSuspenseFallback","suspenseStackCursor","hasSuspenseContext","setDefaultShallowSuspenseContext","setShallowSuspenseContext","shallowContext","pushSuspenseContext","popSuspenseContext","shouldCaptureSuspense","hasInvisibleParent","findFirstSuspended","revealOrder","NoFlags$1","HasEffect","Insertion","Passive$1","workInProgressSources","resetWorkInProgressVersions","_workInProgressVersionPrimary","registerMutableSourceForHydration","mutableSource","getVersion","_getVersion","mutableSourceEagerHydrationData","didWarnAboutMismatchedHooksForComponent","didWarnUncachedGetSnapshot","ReactCurrentDispatcher$1","ReactCurrentBatchConfig$2","currentlyRenderingFiber$1","currentHook","workInProgressHook","didScheduleRenderPhaseUpdate","didScheduleRenderPhaseUpdateDuringThisPass","localIdCounter","globalClientIdCounter","RE_RENDER_LIMIT","currentHookNameInDev","hookTypesDev","hookTypesUpdateIndexDev","ignorePreviousDependencies","mountHookTypesDev","hookName","updateHookTypesDev","currentHookName","oldHookName","newHookName","warnOnHookMismatchInDev","checkDepsAreArrayDev","deps","throwInvalidHookError","areHookInputsEqual","nextDeps","prevDeps","renderWithHooks","secondArg","nextRenderLanes","_debugHookTypes","HooksDispatcherOnUpdateInDEV","HooksDispatcherOnMountWithHookTypesInDEV","HooksDispatcherOnMountInDEV","numberOfReRenders","HooksDispatcherOnRerenderInDEV","ContextOnlyDispatcher","didRenderTooFewHooks","checkDidRenderIdHook","didRenderIdHook","bailoutHooks","resetHooksAfterThrow","isUpdatingOpaqueValueInRenderPhase","mountWorkInProgressHook","baseQueue","updateWorkInProgressHook","nextCurrentHook","nextWorkInProgressHook","newHook","basicStateReducer","mountReducer","reducer","initialArg","initialState","lastRenderedReducer","lastRenderedState","dispatchReducerAction","updateReducer","baseFirst","pendingFirst","newBaseQueueFirst","newBaseQueueLast","hasEagerState","eagerState","interleavedLane","rerenderReducer","lastRenderPhaseUpdate","firstRenderPhaseUpdate","mountSyncExternalStore","subscribe","getSnapshot","getServerSnapshot","nextSnapshot","cachedSnapshot","getWorkInProgressRoot","pushStoreConsistencyCheck","mountEffect","subscribeToStore","pushEffect","updateStoreInstance","updateSyncExternalStore","prevSnapshot","snapshotChanged","updateEffect","renderedSnapshot","componentUpdateQueue","lastEffect","stores","checkIfSnapshotChanged","forceStoreRerender","latestGetSnapshot","scheduleUpdateOnFiber","mountState","dispatchSetState","updateState","rerenderState","firstEffect","mountRef","_ref2","updateRef","mountEffectImpl","fiberFlags","hookFlags","updateEffectImpl","prevEffect","mountInsertionEffect","updateInsertionEffect","mountLayoutEffect","updateLayoutEffect","imperativeHandleEffect","refCallback","refObject","_inst2","mountImperativeHandle","effectDeps","updateImperativeHandle","updateDebugValue","formatterFn","mountCallback","updateCallback","mountMemo","nextCreate","updateMemo","mountDeferredValue","updateDeferredValue","updateDeferredValueImpl","rerenderDeferredValue","deferredLane","startTransition","setPending","higherEventPriority","currentTransition","_updatedFibers","mountTransition","_mountState","isPending","updateTransition","rerenderTransition","mountId","identifierPrefix","getTreeId","localId","updateId","requestUpdateLane","isRenderPhaseUpdate","enqueueRenderPhaseUpdate","requestEventTime","entangleTransitionUpdate","markUpdateInDevTools","prevDispatcher","InvalidNestedHooksDispatcherOnUpdateInDEV","currentState","enqueueConcurrentHookUpdateAndEagerlyBailout","useCallback","useContext","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","InvalidNestedHooksDispatcherOnMountInDEV","InvalidNestedHooksDispatcherOnRerenderInDEV","warnInvalidContextAccess","warnInvalidHookAccess","now$1","commitTime","layoutEffectStartTime","profilerStartTime","passiveEffectStartTime","currentUpdateIsNested","nestedUpdateScheduled","isCurrentUpdateNested","getCommitTime","recordCommitTime","startProfilerTimer","actualStartTime","stopProfilerTimerIfRunning","stopProfilerTimerIfRunningAndRecordDelta","overrideBaseTime","actualDuration","selfBaseDuration","recordLayoutEffectDuration","parentFiber","effectDuration","recordPassiveEffectDuration","passiveEffectDuration","parentStateNode","startLayoutEffectTimer","startPassiveEffectTimer","transferActualDuration","resolveDefaultProps","baseProps","defaultProps","didWarnAboutStateAssignmentForComponent","didWarnAboutUninitializedState","didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate","didWarnAboutLegacyLifecyclesAndDerivedState","didWarnAboutUndefinedDerivedState","warnOnUndefinedDerivedState","warnOnInvalidCallback","didWarnAboutDirectlyAssigningPropsToState","didWarnAboutContextTypeAndContextTypes","didWarnAboutInvalidateContextType","didWarnAboutLegacyContext$1","fakeInternalInstance","didWarnOnInvalidCallback","applyDerivedStateFromProps","ctor","getDerivedStateFromProps","callerName","classComponentUpdater","isMounted","component","_warnedAboutRefsInRender","enqueueSetState","enqueueReplaceState","enqueueForceUpdate","markForceUpdateScheduled","checkShouldComponentUpdate","oldProps","newProps","oldState","shouldComponentUpdate","shouldUpdate","isPureReactComponent","adoptClassInstance","updater","_reactInternalInstance","constructClassInstance","isLegacyContextConsumer","contextType","addendum","getSnapshotBeforeUpdate","foundWillMountName","foundWillReceivePropsName","foundWillUpdateName","_componentName","newApiName","callComponentWillReceiveProps","mountClassInstance","getInitialState","isReactClassApproved","getDefaultProps","componentShouldUpdate","componentDidUnmount","componentDidReceiveProps","componentWillRecieveProps","UNSAFE_componentWillRecieveProps","hasMutatedProps","componentDidUpdate","getDerivedStateFromError","_state","checkClassInstance","callComponentWillMount","componentDidMount","createCapturedValueAtFiber","digest","createCapturedValue","logCapturedError","boundary","errorInfo","componentStack","combinedMessage","PossiblyWeakMap$1","createRootErrorUpdate","onUncaughtError","createClassErrorUpdate","markFailedErrorBoundaryForHotReloading","componentDidCatch","legacyErrorBoundariesThatAlreadyFailed","attachPingListener","wakeable","threadIDs","pingCache","ping","pingSuspendedRoot","restorePendingUpdaters","getNearestSuspenseBoundaryToCapture","markSuspenseBoundaryShouldCapture","suspenseBoundary","rootRenderLanes","throwException","currentSource","resetSuspendedComponent","wakeables","attachRetryListener","renderDidSuspendDelayIfPossible","_suspenseBoundary","workInProgressRootExitStatus","RootSuspendedWithDelay","RootErrored","workInProgressRootConcurrentErrors","renderDidError","_errorInfo","isAlreadyFailedLegacyErrorBoundary","_lane","didWarnAboutBadClass","didWarnAboutModulePatternComponent","didWarnAboutContextTypeOnFunctionComponent","didWarnAboutGetDerivedStateOnFunctionComponent","didWarnAboutFunctionRefs","didWarnAboutReassigningProps","didWarnAboutRevealOrder","didWarnAboutTailOptions","didWarnAboutDefaultPropsOnFunctionComponent","ReactCurrentOwner$1","didReceiveUpdate","reconcileChildren","nextChildren","updateForwardRef","innerPropTypes","hasId","bailoutOnAlreadyFinishedWork","updateMemoComponent","resolvedType","shouldConstruct$1","isSimpleFunctionComponent","resolveFunctionForHotReloading","validateFunctionComponentInDev","updateSimpleMemoComponent","createFiberFromTypeAndProps","_innerPropTypes","currentChild","checkScheduledUpdateOrContext","prevProps","outerMemoType","outerPropTypes","updateFunctionComponent","updateOffscreenComponent","_subtreeRenderLanes","baseLanes","cachePool","transitions","pushRenderLanes","nextBaseLanes","_nextState","_nextState2","markRef","updateClassComponent","shouldErrorImpl","hasContext","resetSuspendedCurrentOnMountInLegacyMode","oldContext","hasNewLifecycles","_fiberFlags","_fiberFlags2","resumeMountClassInstance","unresolvedOldProps","unresolvedNewProps","updateClassInstance","nextUnitOfWork","finishClassComponent","didCaptureError","forceUnmountCurrentAndReconcile","pushHostRootContext","pendingContext","mountHostRootWithoutHydrating","recoverableError","warningKey","debugSource","fileName","lineNumber","_componentName3","_componentName4","SUSPENDED_MARKER","mountSuspenseOffscreenState","updateSuspenseComponent","shouldSuspendImpl","suspenseContext","showFallback","didSuspend","shouldRemainOnFallback","mountDehydratedSuspenseComponent","nextPrimaryChildren","nextFallbackChildren","fallback","fallbackFragment","primaryChildren","fallbackChildren","primaryChildFragment","fallbackChildFragment","progressedPrimaryFragment","primaryChildProps","treeBaseDuration","mountWorkInProgressOffscreenFiber","mountSuspenseFallbackChildren","mountSuspensePrimaryChildren","_dehydrated","retrySuspenseComponentWithoutHydrating","fiberMode","mountSuspenseFallbackAfterRetryWithoutHydrating","_getSuspenseInstanceF","dataset","dgst","stck","getSuspenseInstanceFallbackErrorDetails","attemptHydrationAtLane","getBumpedLaneForHydration","retryDehydratedSuspenseBoundary","_reactRetry","suspendedContext","restoreSuspendedTreeContext","reenterHydrationStateFromDehydratedSuspenseInstance","updateDehydratedSuspenseComponent","_nextFallbackChildren","currentPrimaryChildFragment","currentFallbackChildFragment","updateWorkInProgressOffscreenFiber","subtreeFlags","updateSuspenseFallbackChildren","_primaryChildFragment2","prevOffscreenState","updateSuspenseOffscreenState","getRemainingWorkInPrimaryTree","_primaryChildFragment3","updateSuspensePrimaryChildren","offscreenProps","createFiberFromOffscreen","scheduleSuspenseWorkOnFiber","validateSuspenseListNestedChild","childSlot","isAnArray","isIterable","initSuspenseListRenderState","isBackwards","tail","lastContentRow","tailMode","renderState","renderingStartTime","updateSuspenseListComponent","validateRevealOrder","validateTailOptions","childrenIterator","validateSuspenseListChildren","propagateSuspenseContextChange","currentRow","findLastContentRow","_tail","nextRow","appendAllChildren","updateHostContainer","updateHostComponent$1","updateHostText$1","hasWarnedAboutUsingNoValuePropOnContextProvider","hasWarnedAboutUsingContextAsConsumer","cloneChildFibers","beginWork","_debugNeedsRemount","oldWorkInProgress","newWorkInProgress","prevSibling","remountFiber","didSuspendBefore","_hasChildWork","attemptEarlyBailoutIfNoScheduledUpdate","isForkedChild","slotIndex","_current","_componentName2","mountIndeterminateComponent","resolvedTag","resolveLazyComponentTag","resolvedProps","resolveClassForHotReloading","resolveForwardRefForHotReloading","hint","mountLazyComponent","unresolvedProps","_Component","_unresolvedProps","prevChildren","overrideState","pendingSuspenseBoundaries","updateHostRoot","updateHostComponent","updateHostText","updatePortalComponent","_unresolvedProps2","updateMode","updateProfiler","providerPropTypes","nextFiber","dependency","parentSuspense","_alternate","propagateContextChange_eager","propagateContextChange","updateContextProvider","Consumer","updateContextConsumer","_resolvedProps3","_Component2","_unresolvedProps4","mountIncompleteClassComponent","markUpdate","markRef$1","cutOffTailIfNeeded","hasRenderedATailFallback","tailNode","lastTailNode","_tailNode","_lastTailNode","bubbleProperties","completedWork","didBailout","newChildLanes","_treeBaseDuration","_child2","_child3","completeDehydratedSuspenseBoundary","wasHydrated","internalInstanceHandle","hydrateSuspenseInstance","prepareToHydrateHostSuspenseInstance","_primaryChildFragment","completeWork","fiberRoot","currentHostContext","hostContext","shouldWarnIfMismatchDev","updatePayload","rawProps","extraAttributeNames","propKey","nextProp","serverHTML","nextHtml","expectedHTML","expectedStyle","isMismatchDueToBadCasing","ownNamespace","diffHydratedProperties","hydrateInstance","prepareToHydrateHostInstance","hostContextDev","ownAncestorInfo","createInstance","setInitialDOMProperties","postMountWrapper$1","postMountWrapper$2","setInitialProperties","finalizeInitialChildren","newText","oldText","_rootContainerInstance","_currentHostContext","textNode","diffHydratedText","hydrateTextInstance","didNotMatchHydratedContainerTextInstance","didNotMatchHydratedTextInstance","prepareToHydrateHostTextInstance","createTextInstance","nextDidTimeout","unstable_avoidThisFallback","RootInProgress","RootSuspended","didSuspendAlready","renderedTail","suspended","newThenables","getRenderTargetTime","_suspended","_newThenables","popRenderLanes","nextIsHidden","subtreeRenderLanes","unwindWork","_flags","_flags2","unwindInterruptedWork","interruptedWork","needsVisibilityToggle","isHidden","lastRawProps","nextRawProps","lastProps","styleUpdates","lastStyle","lastProp","lastHtml","nextStyles","expandedUpdates","expandedStyles","warnedAbout","originalKey","correctOriginalKey","validateShorthandPropertyCollisionInDev","diffProperties","prepareUpdate","didWarnAboutUndefinedSnapshotBeforeUpdate","offscreenSubtreeIsHidden","offscreenSubtreeWasHidden","PossiblyWeakSet","WeakSet","nextEffect","inProgressLanes","inProgressRoot","callComponentWillUnmountWithTimer","componentWillUnmount","safelyCallCommitHookLayoutEffectListMount","nearestMountedAncestor","commitHookEffectListMount","captureCommitPhaseError","safelyCallComponentWillUnmount","safelyAttachRef","commitAttachRef","safelyDetachRef","retVal","safelyCallDestroy","shouldFireAfterActiveInstanceBlur","commitBeforeMutationEffects","focusedElem","selectionRange","commitBeforeMutationEffects_complete","commitBeforeMutationEffects_begin","shouldFire","commitBeforeMutationEffectsOnFiber","snapshot","didWarnSet","__reactInternalSnapshotBeforeUpdate","commitHookEffectListUnmount","markComponentPassiveEffectUnmountStarted","setIsRunningInsertionEffect","markComponentPassiveEffectUnmountStopped","markComponentPassiveEffectMountStarted","markComponentPassiveEffectMountStopped","markComponentLayoutEffectMountStopped","commitPassiveEffectDurations","finishedRoot","_finishedWork$memoize","onPostCommit","phase","commitLayoutEffectOnFiber","committedLanes","_updateQueue","commitMount","_finishedWork$memoize2","onCommit","onRender","pendingPassiveProfilerEffects","rootDoesHavePassiveEffects","scheduleCallback$1","flushPassiveEffects","commitHydratedSuspenseInstance","commitSuspenseHydrationCallbacks","reappearLayoutEffectsOnFiber","safelyCallComponentDidMount","instanceToUse","detachFiberAfterEffects","hostInstance","isHostParent","getHostSibling","commitPlacement","getHostParentFiber","insertOrAppendPlacementNode","insertOrAppendPlacementNodeIntoContainer","beforeChild","insertInContainerBefore","_reactRootContainer","appendChildToContainer","hostParent","hostParentIsContainer","commitDeletionEffects","deletedFiber","findParent","commitDeletionEffectsOnFiber","recursivelyTraverseDeletionEffects","onCommitFiberUnmount","onCommitUnmount","prevHostParent","prevHostParentIsContainer","clearSuspenseBoundaryFromContainer","_prevHostParent","_prevHostParentIsContainer","_effect","prevOffscreenSubtreeWasHidden","attachSuspenseRetryListeners","retryCache","retry","resolveRetryWakeable","recursivelyTraverseMutationEffects","prevDebugFiber","commitMutationEffectsOnFiber","commitReconciliationEffects","wasCustomComponentTag","updateDOMProperties","postUpdateWrapper","updateProperties","commitUpdate","commitTextUpdate","offscreenFiber","offscreenInstance","globalMostRecentFallbackTime","commitSuspenseCallback","_wasHidden","_offscreenInstance","_isHidden","offscreenBoundary","offscreenChild","disappearLayoutEffects_begin","hostSubtreeRoot","hideOrUnhideAllChildren","commitLayoutEffects","commitLayoutEffects_begin","subtreeRoot","isModernRoot","newOffscreenSubtreeIsHidden","commitLayoutMountEffects_complete","wasHidden","prevOffscreenSubtreeIsHidden","reappearLayoutEffects_begin","disappearLayoutEffects_complete","reappearLayoutEffects_complete","commitPassiveMountEffects_complete","committedTransitions","commitPassiveMountOnFiber","commitPassiveUnmountEffects_complete","commitPassiveUnmountOnFiber","commitPassiveUnmountEffectsInsideOfDeletedTree_begin","deletedSubtreeRoot","commitPassiveUnmountInsideDeletedTreeOnFiber","commitPassiveUnmountEffectsInsideOfDeletedTree_complete","invokeLayoutEffectMountInDEV","invokePassiveEffectMountInDEV","invokeLayoutEffectUnmountInDEV","invokePassiveEffectUnmountInDEV","symbolFor","commitHooks","ReactCurrentActQueue","isConcurrentActEnvironment","isReactActEnvironmentGlobal","IS_REACT_ACT_ENVIRONMENT","ReactCurrentDispatcher$2","ReactCurrentOwner$2","ReactCurrentBatchConfig$3","ReactCurrentActQueue$1","BatchedContext","CommitContext","RootFatalErrored","RootCompleted","RootDidNotComplete","workInProgressRoot","workInProgressRootRenderLanes","subtreeRenderLanesCursor","workInProgressRootFatalError","workInProgressRootIncludedLanes","workInProgressRootSkippedLanes","workInProgressRootInterleavedUpdatedLanes","workInProgressRootPingedLanes","workInProgressRootRecoverableErrors","FALLBACK_THROTTLE_MS","workInProgressRootRenderTargetTime","RENDER_TIMEOUT_MS","workInProgressTransitions","resetRenderTimer","hasUncaughtError","firstUncaughtError","rootWithPendingPassiveEffects","pendingPassiveEffectsLanes","NESTED_UPDATE_LIMIT","nestedUpdateCount","rootWithNestedUpdates","isFlushingPassiveEffects","didScheduleUpdateDuringPassiveEffects","NESTED_PASSIVE_UPDATE_LIMIT","nestedPassiveUpdateCount","rootWithPassiveNestedUpdates","currentEventTime","currentEventTransitionLane","isRunningInsertionEffect","currentEvent","checkForNestedUpdates","renderingComponentName","dedupeKey","didWarnAboutUpdateInRenderForAnotherComponent","didWarnAboutUpdateInRender","warnAboutRenderPhaseUpdatesInDEV","jest","previousFiber","warnIfUpdatesNotWrappedWithActDEV","markRootSuspended$1","ensureRootIsScheduled","existingCallbackNode","callbackNode","expirationTimes","expirationTime","expiredLanes","markStarvedLanesAsExpired","cancelCallback$1","callbackPriority","newCallbackPriority","existingCallbackPriority","fakeActCallbackNode","newCallbackNode","isBatchingLegacy","didScheduleLegacyUpdate","performSyncWorkOnRoot","schedulerPriorityLevel","performConcurrentWorkOnRoot","didTimeout","originalCallbackNode","shouldTimeSlice","includesExpiredLane","exitStatus","prevExecutionContext","pushDispatcher","prepareFreshStack","workLoopConcurrent","handleError","popDispatcher","markRenderYielded","renderRootConcurrent","renderRootSync","errorRetryLanes","recoverFromConcurrentError","fatalError","renderWasConcurrent","checks","renderedValue","isRenderConsistentWithExternalStores","_errorRetryLanes","_fatalError","finishedLanes","commitRoot","shouldForceFlushFallbacksInDEV","msUntilTimeout","timeoutHandle","includesOnlyTransitions","mostRecentEventTime","getMostRecentEventTime","eventTimeMs","timeElapsedMs","_msUntilTimeout","timeElapsed","finishConcurrentRender","errorsFromFirstAttempt","errorsFromSecondAttempt","errors","markRootSuspended","batchedUpdates$1","flushSync","isAlreadyRendering","rootWorkInProgress","lastInterleavedUpdate","firstInterleavedUpdate","finishQueueingConcurrentUpdates","erroredWork","markComponentSuspended","completeUnitOfWork","yetAnotherThrownValue","workLoopSync","performUnitOfWork","unitOfWork","beginWork$1","_next","siblingFiber","recoverableErrors","previousUpdateLanePriority","renderPriorityLevel","markCommitStarted","remainingLanes","noLongerPendingLanes","mutableReadLanes","markRootFinished","subtreeHasEffects","rootHasEffect","commitMutationEffects","priorSelectionInformation","curFocusedElem","priorFocusedElem","priorSelectionRange","startMarker","endMarker","setStart","setEnd","setOffsets","setSelection","restoreSelection","markLayoutEffectsStarted","markLayoutEffectsStopped","rootDidHavePassiveEffects","commitDoubleInvokeEffectsInDEV","eventPriority","onCommitFiberRoot","schedulerPriority","onCommitRoot","commitHook","onRecoverableError","commitRootImpl","renderPriority","lowerEventPriority","markPassiveEffectsStarted","fiberToDelete","detachedChild","detachedSibling","commitPassiveUnmountEffects_begin","commitPassiveMountEffects_begin","profilerEffects","markPassiveEffectsStopped","onPostCommitFiberRoot","onPostCommitRoot","flushPassiveEffectsImpl","captureCommitPhaseErrorOnRoot","rootFiber","reportUncaughtErrorInDEV","warnIfSuspenseResolutionNotWrappedWithActDEV","retryTimedOutBoundary","boundaryFiber","hasPassiveEffects","invokeEffectsInDev","invokeEffectFn","primarySubtreeFlag","didWarnStateUpdateForNotYetMountedComponent","originalWorkInProgressCopy","assignFiberPropertiesInDEV","originalError","replayError","schedulingFiber","priorityLevel","actQueue","isRunning","resolveFamily","failedBoundaries","setRefreshHandler","family","currentRender","syntheticType","prevType","nextType","needsCompareFamilies","$$typeofNextType","prevFamily","scheduleRefresh","staleFamilies","updatedFamilies","scheduleFibersWithFamiliesRecursively","scheduleRoot","updateContainer","candidateType","needsRender","needsRemount","_root","hasBadMapPolyfill","findHostInstancesForRefresh","families","hostInstances","findHostInstancesForMatchingFibersRecursively","didMatch","foundHostInstances","findChildHostInstancesForFiberShallowly","findHostInstancesForFiberShallowly","nonExtensibleObject","preventExtensions","FiberNode","Number","NaN","currentDependencies","fiberTag","getTag","createFiberFromProfiler","createFiberFromSuspense","createFiberFromSuspenseList","pendingChildren","FiberRootNode","hydrate","_debugRootType","createFiberRoot","initialChildren","hydrationCallbacks","isStrictMode","concurrentUpdatesByDefaultOverride","transitionCallbacks","uninitializedFiber","createHostRootFiber","_initialState","didWarnAboutNestedUpdates","didWarnAboutFindNodeInStrictMode","ReactVersion","getContextForSubtree","parentComponent","isFiberMounted","findCurrentUnmaskedContext","createContainer","createHydrationContainer","scheduleInitialHydrationOnRoot","onScheduleFiberRoot","onScheduleRoot","current$1","markRenderScheduled","getPublicRootInstance","containerFiber","markRetryLaneImpl","higherPriorityLane","markRetryLaneIfNotHydrated","findHostInstanceWithNoPortals","hostFiber","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","scheduleUpdate","setErrorHandler","setSuspenseHandler","copyWithDeleteImpl","path","updated","copyWithDelete","copyWithRenameImpl","oldPath","newPath","oldKey","copyWithRename","copyWithSetImpl","copyWithSet","findHook","findHostInstanceByFiber","emptyFindFiberByHostInstance","getCurrentFiberForDevTools","newShouldErrorImpl","newShouldSuspendImpl","defaultOnRecoverableError","reportError","ReactDOMRoot","internalRoot","_internalRoot","ReactDOMHydrationRoot","isValidContainer","isValidContainerLegacy","warnIfReactDOMContainerInDEV","unmount","unstable_scheduleHydration","updatePriority","queueExplicitHydrationTarget","topLevelUpdateWarnings","ReactCurrentOwner$3","getReactRootElementInContainer","noopOnRecoverableError","legacyRenderSubtreeIntoContainer","forceHydrate","warnOnInvalidCallback$1","maybeRoot","originalCallback","isHydrationContainer","rootSibling","_originalCallback","legacyCreateRootFromDOMContainer","isRootRenderedBySomeReact","rootEl","didWarnAboutFindDOMNode","didWarnAboutUnmountComponentAtNode","getHighestPriorityPendingLanes","flushRoot","setGetCurrentUpdatePriority","rootNode","queryRoot","otherNode","otherProps","updateNamedCousins","restoreControlledState","restoreControlledState$2","restoreControlledState$1","Internals","usingClientEntryPoint","Events","foundDevTools","devToolsConfig","findFiberByHostInstance","internals","supportsFiber","inject","checkDCE","injectInternals","bundleType","rendererPackageName","rendererConfig","currentDispatcherRef","getCurrentFiber","reconcilerVersion","injectIntoDevTools","createPortal","createRoot","unstable_strictMode","findDOMNode","componentOrElement","methodName","findHostInstanceWithWarning","hydrateRoot","mutableSources","hydratedSources","unmountComponentAtNode","_rootEl","hasNonRootReactChild","isContainerReactRoot","unstable_batchedUpdates","unstable_renderSubtreeIntoContainer","containerNode","registerInternalModuleStop","REACT_MODULE_REFERENCE","checkKeyStringCoercion","specialPropKeyWarningShown","specialPropRefWarningShown","RESERVED_PROPS","__self","__source","ReactElement","propTypesMisspellWarningShown","setCurrentlyValidatingElement$1","isValidElement","validateExplicitKey","currentComponentErrorInfo","parentName","getCurrentComponentErrorInfo","childOwner","validateChildKeys","didWarnAboutKeySpread","jsxWithValidation","isStaticChildren","validType","getModuleId","isValidElementType","typeString","sourceInfo","getSourceInfoErrorAddendum","config","maybeKey","isReactWarning","hasValidKey","hasValidRef","warnIfStringRefCannotBeAutoConverted","warnAboutAccessingKey","defineKeyPropWarningGetter","warnAboutAccessingRef","defineRefPropWarningGetter","jsxDEV","beforeExample","validateFragmentProps","PropTypes","validatePropTypes","jsx","jsxs","currentExtraStackFrame","impl","enableScopeAPI","enableCacheElement","enableTransitionTracing","enableDebugTracing","didWarnStateUpdateForUnmountedComponent","warnNoop","publicInstance","_constructor","ReactNoopUpdateQueue","completeState","emptyObject","setState","forceUpdate","deprecatedAPIs","replaceState","defineDeprecationWarning","fnName","ComponentDummy","PureComponent","pureComponentPrototype","childrenLength","childArray","cloneElement","SEPARATOR","SUBSEPARATOR","userProvidedKeyEscapeRegex","escapeUserProvidedKey","getElementKey","escaperLookup","mapIntoArray","escapedPrefix","nameSoFar","oldElement","newKey","invokeCallback","mappedChild","childKey","escapedChildKey","subtreeCount","nextNamePrefix","iterableChildren","ii","childrenString","mapChildren","lazyInitializer","_status","thenable","_result","moduleObject","resolved","rejected","resolveDispatcher","dispatcher","shouldConstruct","createElementWithValidation","elementProps","didWarnAboutDeprecatedCreateFactory","didWarnAboutMessageChannel","enqueueTaskImpl","actScopeDepth","didWarnNoAwaitAct","act","prevActScopeDepth","prevIsBatchingLegacy","flushActQueue","popActScope","thenableResult","wasAwaited","recursivelyFlushAsyncActWork","_queue","requireString","nodeRequire","setImmediate","_err","MessageChannel","channel","port1","onmessage","port2","postMessage","enqueueTask","isFlushing","createElement$1","forEachFunc","forEachContext","StrictMode","Suspense","newElement","createContext","_currentValue2","_threadCount","Provider","_defaultValue","_globalName","hasWarnedAboutUsingNestedContextConsumers","hasWarnedAboutUsingConsumerProvider","hasWarnedAboutDisplayNameOnConsumer","_Provider","_currentRenderer2","createFactory","validatedFactory","createRef","seal","forwardRef","ownName","lazy","newDefaultProps","newPropTypes","memo","unstable_act","Context","realContext","enableSchedulerDebugging","enableProfiling","heap","parentIndex","siftUp","peek","halfLength","leftIndex","rightIndex","siftDown","sortIndex","performance","localPerformance","localDate","initialTime","taskQueue","timerQueue","taskIdCounter","currentTask","currentPriorityLevel","isPerformingWork","isHostCallbackScheduled","isHostTimeoutScheduled","localSetTimeout","localClearTimeout","localSetImmediate","advanceTimers","handleTimeout","requestHostCallback","flushWork","firstTimer","requestHostTimeout","hasTimeRemaining","cancelHostTimeout","previousPriorityLevel","workLoop","isQueued","shouldYieldToHost","continuationCallback","scheduling","isInputPending","isMessageLoopRunning","scheduledHostCallback","taskTimeoutID","frameInterval","schedulePerformWorkUntilDeadline","performWorkUntilDeadline","hasMoreWork","port","ms","unstable_Profiling","task","unstable_continueExecution","unstable_forceFrameRate","fps","unstable_getFirstCallbackNode","unstable_next","eventHandler","unstable_pauseExecution","unstable_runWithPriority","newTask","unstable_wrapCallback","parentPriorityLevel","ascending","descending","bisector","compare1","compare2","lo","hi","mid","zero","center","ascendingBisect","bisectRight","bisectLeft","bisectCenter","RangeError","blurf","blur2","Blur2","blurImage","T","S","blurx","blury","blurh","blurv","radius0","bluri","s0","s1","valueof","arrayify","cross","reduce","lengths","product","cumsum","Float64Array","variance","mean","deviation","extent","Adder","_partials","fsum","adder","fcumsum","InternMap","keyof","super","_intern","intern_get","intern_set","intern_delete","InternSet","identity","nest","flatten","flatMap","flatGroup","flatRollup","rollups","rollup","indexes","regroup","permute","F","Uint32Array","ascendingDefined","compareDefined","groupSort","ak","av","bk","bv","constant","e10","e5","e2","tickSpec","power","log10","i1","i2","inc","tickIncrement","tickStep","nice","prestep","thresholdSturges","bin","threshold","histogram","xz","x0","tz","tn","bins","bisect","thresholds","maxIndex","minIndex","quickselect","sd","greatest","defined","maxValue","quantile","numbers","i0","value0","subarray","quantileSorted","quantileIndex","thresholdFreedmanDiaconis","thresholdScott","cbrt","median","medianIndex","arrays","counts","modeValue","modeCount","pairs","pairof","rank","V","R","compareIndex","least","minValue","leastIndex","greatestIndex","scan","shuffler","transpose","matrix","zip","every","mapper","difference","others","disjoint","superset","io","intern","ivalue","union","epsilon","translateX","translateY","bandwidth","entering","__axis","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","devicePixelRatio","range0","range1","tickExit","exit","tickEnter","tickSize","axisTop","axisRight","axisBottom","axisLeft","Dispatch","typename","none","childMatcher","childFirst","EnterNode","__data__","bindIndex","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","arraylike","xhtml","xlink","attrRemove","attrRemoveNS","fullname","removeAttributeNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","styleRemove","removeProperty","styleConstant","styleFunction","propertyRemove","propertyConstant","propertyFunction","classArray","classList","ClassList","_node","_names","classedAdd","classedRemove","classedTrue","classedFalse","classedFunction","textRemove","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","raise","lower","creatorInherit","uri","creatorFixed","constantNull","selection_cloneShallow","selection_cloneDeep","onRemove","__on","onAdd","contextListener","CustomEvent","dispatchConstant","dispatchFunction","Selection","_groups","_parents","subgroups","subnode","arrayAll","selectorAll","selectChild","childFind","selectChildren","childrenFilter","enterGroup","updateGroup","_enter","_exit","sparse","onenter","onupdate","onexit","groups0","groups1","m0","m1","merges","group0","group1","compareNode","sortgroups","sortgroup","getAttributeNS","classed","creator","typenames","nonpassive","nonpassivecapture","nopropagation","noevent","__noselect","MozUserSelect","yesdrag","noclick","definition","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aquamarine","azure","beige","bisque","blanchedalmond","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","gainsboro","ghostwhite","gold","goldenrod","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","limegreen","linen","magenta","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","oldlace","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellowgreen","color_formatHex","formatHex","color_formatRgb","formatRgb","rgbn","Rgb","rgbConvert","rgb_formatHex","hex","rgb_formatRgb","clampa","clampi","Hsl","hslConvert","hsl","clamph","clampt","hsl2rgb","m2","basis","t1","v0","v1","v2","v3","t2","t3","channels","displayable","formatHex8","formatHsl","nogamma","rgbGamma","exponential","gamma","rgbSpline","spline","rgbBasis","rgbBasisClosed","basisClosed","isNumberArray","ArrayBuffer","isView","DataView","numberArray","genericArray","nb","na","setTime","reA","reB","am","bm","bi","lastIndex","sourceEvent","ownerSVGElement","createSVGPoint","point","matrixTransform","getScreenCTM","inverse","clientLeft","clientTop","taskHead","taskTail","pokeDelay","clockLast","clockNow","clockSkew","clock","setFrame","clearNow","Timer","_call","_time","timerFlush","wake","t0","sleep","nap","poke","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","ENDING","ENDED","timing","schedules","__transition","ease","degrees","skewX","scaleX","scaleY","atan2","atan","interpolateTransform","pxComma","pxParen","degParen","xa","ya","xb","yb","translate","interpolateTransformCss","DOMMatrix","WebKitCSSMatrix","isIdentity","decompose","interpolateTransformSvg","baseVal","consolidate","tweenRemove","tween0","tween1","tweenFunction","tweenValue","_id","interpolate","value1","string00","interpolate0","string1","string0","string10","attrTweenNS","attrInterpolateNS","attrTween","attrInterpolate","delayFunction","delayConstant","durationFunction","durationConstant","Transition","_name","newId","selection_prototype","cubicIn","cubicOut","cubicInOut","inherit","id0","id1","on0","on1","sit","onFunction","styleTween","styleNull","listener0","styleMaybeRemove","styleInterpolate","textTween","textInterpolate","removeFunction","easeConstant","easeVarying","interrupt","defaultTiming","BrushEvent","MODE_DRAG","MODE_SPACE","MODE_HANDLE","MODE_CENTER","number1","number2","X","xy","Y","XY","cursors","flipX","flipY","signsX","signsY","defaultFilter","defaultExtent","viewBox","defaultTouchable","maxTouchPoints","__brush","brushSelection","brushX","brushY","touchending","touchable","handleSize","brush","redraw","touchmoved","touchended","emitter","clean","emit","Emitter","w0","n0","n1","e0","e1","moving","lockX","lockY","signX","signY","W","N","E","shifting","pointer","point0","beforestart","pts","move","ended","selection0","selection1","starting","keyModifiers","pi","halfPi","tau","chordTranspose","chordDirected","directed","padAngle","sortGroups","sortSubgroups","sortChords","groupSums","groupIndex","subgroupIndex","tauEpsilon","strings","Path","_x0","_y0","_x1","_y1","_append","appendRound","moveTo","closePath","lineTo","quadraticCurveTo","bezierCurveTo","arcTo","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","ccw","da","pathRound","defaultSource","defaultTarget","defaultRadius","defaultStartAngle","defaultEndAngle","defaultPadAngle","defaultArrowheadRadius","ribbon","headRadius","sourceRadius","targetRadius","buffer","ap","argv","sr","sa0","sa1","ta0","ta1","tr2","ta2","ribbonArrow","radians","Xn","Yn","Zn","labConvert","Lab","Hcl","hcl2lab","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","lch","hcl","A","B","C","D","ED","EB","BC_DA","Cubehelix","bl","cubehelixConvert","cosh","sinh","ring","hole","ringContains","xi","yi","pj","xj","yj","segmentContains","collinear","cases","smooth","smoothLinear","contours","finite","contour","polygons","holes","fragmentByStart","fragmentByEnd","above","stitch","startIndex","endIndex","isorings","polygon","coordinates","xt","yt","valid","smooth1","_0","_1","sign","defaultX","defaultY","defaultWeight","weight","Float32Array","pow2k","wi","density","pow4k","MIN_VALUE","geometry","transformPolygon","transformRing","transformPoint","cellSize","elen","flen","Q","Qnew","hh","bvirt","enow","fnow","eindex","findex","hindex","vec","C1","C2","u","orient2d","ax","ay","bx","detleft","detright","det","detsum","acxtail","acytail","bcxtail","bcytail","ahi","alo","bhi","blo","_j","u3","acx","bcx","acy","bcy","errbound","C1len","C2len","Dlen","orient2dadapt","EPSILON","EDGE_STACK","Delaunator","getX","defaultGetX","getY","defaultGetY","maxTriangles","_triangles","_halfedges","Int32Array","_hashSize","_hullPrev","_hullNext","_hullTri","_hullHash","_ids","_dists","hullPrev","hullNext","hullTri","hullHash","minX","minY","maxX","maxY","minDist","i0x","i0y","i1x","i1y","minRadius","circumradius","i2x","i2y","quicksort","hull","d0","triangles","halfedges","ey","cl","circumcenter","_cx","_cy","_hullStart","hullSize","_hashKey","trianglesLen","_addTriangle","xp","yp","_legalize","pseudoAngle","ar","b0","al","pl","inCircle","hbl","_link","px","py","bp","dists","tempDist","Polygon","Voronoi","delaunay","xmin","ymin","xmax","ymax","_circumcenters","vectors","circumcenters","x3","y3","ab","inedges","ti","tj","_renderSegment","h0","h1","_project","renderBounds","renderCell","_clip","cellPolygons","cell","cellPolygon","c0","_regioncode","c1","_clipSegment","neighbors","ci","cj","ai","aj","lj","_cell","_simplify","_clipInfinite","_clipFinite","P","sx0","sy0","sx1","sy1","_edgecode","_edge","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","DragEvent","subject","defaultContainer","defaultSubject","mousedownx","mousedowny","mousemoving","gestures","clickDistance2","mousedowned","touchstarted","gesture","mousemoved","mouseupped","nodrag","touch","clickDistance","EOL","EOF","QUOTE","NEWLINE","RETURN","objectConverter","inferColumns","columnSet","column","pad","reFormat","DELIMITER","parseRows","I","eof","eol","preformatBody","formatValue","formatRow","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","convert","customConverter","formatBody","formatRows","csv","dsv","csvParse","csvParseRows","csvFormat","csvFormatBody","csvFormatRows","csvFormatRow","csvFormatValue","tsv","tsvParse","tsvParseRows","tsvFormat","tsvFormatBody","tsvFormatRows","tsvFormatRow","tsvFormatValue","autoType","fixtz","quadIn","quadOut","quadInOut","polyIn","polyOut","polyInOut","sinIn","sinOut","sinInOut","tpmt","expIn","expOut","expInOut","circleIn","circleOut","circleInOut","b1","b2","b3","b4","b5","b6","b7","b8","b9","bounceIn","bounceOut","bounceInOut","overshoot","backIn","backOut","backInOut","elasticIn","asin","elasticOut","elasticInOut","responseBlob","ok","blob","fetch","responseArrayBuffer","arrayBuffer","dsvParse","Image","responseJson","strength","sx","sy","tree","xm","ym","leaf","_y","quadtree","Quadtree","addAll","leaf_copy","treeProto","radii","iterations","ri","ri2","visitAfter","prepare","visit","quad","rj","jiggle","_nodes","_random","nodeById","nodeId","links","strengths","distances","initializeStrength","initializeDistance","cover","yz","quads","d2","retainer","removeAll","initialRadius","initialAngle","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","lcg","initializeNodes","initializeForce","randomSource","distanceMin2","distanceMax2","theta2","distanceMin","distanceMax","radiuses","formatDecimalParts","toExponential","coefficient","prefixExponent","formatSpecifier","specifier","FormatSpecifier","align","symbol","comma","toLocaleString","toPrecision","formatRounded","formatPrefix","grouping","thousands","currencyPrefix","currency","currencySuffix","numerals","formatNumerals","minus","nan","newFormat","formatTypes","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","formatTrim","defaultLocale","epsilon2","quarterPi","haversin","streamGeometry","stream","streamGeometryType","streamObjectType","Feature","FeatureCollection","features","Sphere","sphere","Point","MultiPoint","LineString","streamLine","MultiLineString","streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lineStart","lineEnd","polygonStart","polygonEnd","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","rangeCompare","rangeContains","feature","merged","deltaMax","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointCartesian","centroidLinePointFirst","centroidLinePoint","centroidRingPointFirst","centroidRingPoint","cz","compose","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","circleStream","cosRadius","sinRadius","circleRadius","circle","rejoin","Intersection","segments","compareIntersection","startInside","segment","pointEqual","isSubject","longitude","winding","sinPhi1","cosPhi1","point1","absDelta","phiArc","pointVisible","clipLine","sink","ringBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","polygonContains","pointLine","ringSegments","validSegment","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","cr","smallRadius","notHemisphere","two","n2","n2n2","n1n2","determinant","c2","n1xn2","uu","polar","q1","v00","point2","lengthSum","clipMax","clipMin","clipRectangle","corner","comparePoint","ca","cb","x__","y__","v__","x_","y_","v_","activeStream","bufferStream","clipStream","polygonInside","cleanInside","cacheStream","lengthStream","lengthPointFirst","lengthLineEnd","lengthPoint","cosDelta","containsObjectType","containsGeometry","containsGeometryType","containsPoint","containsLine","containsPolygon","ao","bo","ringRadians","pointRadians","graticuleX","graticuleY","graticule","DX","DY","extentMajor","extentMinor","stepMajor","stepMinor","graticule10","cy0","cy1","kx0","ky0","kx1","ky1","x00","y00","centroid","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","_radius","pointRadius","_line","_point","lengthRing","cacheDigits","cacheAppend","cacheRadius","cacheCircle","PathString","projection","projectionStream","contextStream","methods","transformer","TransformStream","fitBounds","clipExtent","fitExtent","fitSize","fitWidth","fitHeight","cosMinDistance","project","delta2","resampleLineTo","phi2","dx2","dy2","dz","a00","b00","c00","resampleStream","ringPoint","resampleNone","transformRadians","scaleTranslateRotate","scaleTranslate","cosAlpha","sinAlpha","fi","projectionMutator","projectAt","projectResample","projectTransform","projectRotateTransform","preclip","postclip","recenter","resample","transformRotate","clipAngle","reflectX","reflectY","conicProjection","parallels","conicEqualAreaRaw","cylindricalEqualAreaRaw","r0","r0y","conicEqualArea","lower48Point","alaskaPoint","hawaiiPoint","lower48","albers","alaska","hawaii","pointStream","albersUsa","streams","azimuthalRaw","azimuthalInvert","sc","cc","azimuthalEqualAreaRaw","cxcy","azimuthalEquidistantRaw","mercatorRaw","mercatorProjection","reclip","tany","conicConformalRaw","equirectangularRaw","conicEquidistantRaw","gy","nx","A1","A2","A3","A4","M","equalEarthRaw","l2","l6","gnomonicRaw","sa","tx","ty","kx","ky","naturalEarth1Raw","phi4","orthographicRaw","stereographicRaw","transverseMercatorRaw","defaultSeparation","meanXReduce","maxYReduce","separation","nodeSize","cluster","previousNode","eachAfter","meanX","leafLeft","leafRight","hierarchy","objectChildren","childs","Node","eachBefore","computeHeight","copyData","optional","constantZero","aNodes","bNodes","leastCommonAncestor","descendants","leaves","circles","packEncloseRandom","enclosesWeak","encloseBasis","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","encloseBasis1","r1","r2","r21","r3","a2","a3","c3","d1","place","score","packSiblingsRandom","aa","sj","sk","pack","radiusLeaf","packChildrenRandom","translateChild","partition","positionNode","preroot","ambiguous","imputed","defaultId","defaultParentId","parentId","stratify","nodeKey","currentId","currentParentId","nodeByKey","slash","parentof","nextLeft","nextRight","moveSubtree","wm","wp","nextAncestor","vim","TreeNode","treeRoot","firstWalk","secondWalk","sizeNode","executeShifts","midpoint","vip","vop","vom","sip","sop","sim","som","apportion","squarifyRatio","sumValue","newRatio","minRatio","beta","dice","squarify","tile","paddingStack","paddingInner","paddingRight","paddingLeft","treemap","paddingOuter","sums","valueOffset","valueTarget","valueLeft","valueRight","xk","yk","resquarify","_squarify","zoomRho","rho","rho2","rho4","ux0","uy0","ux1","uy1","coshr0","SQRT2","_2","hslLong","hclLong","cubehelix","cubehelixGamma","cubehelixLong","piecewise","interpolator","samples","lexicographicOrder","computeUpperHullIndexes","sortedPoints","flippedPoints","upperIndexes","lowerIndexes","skipLeft","skipRight","inside","perimeter","sourceRandomUniform","randomUniform","sourceRandomInt","randomInt","sourceRandomNormal","randomNormal","mu","sigma","sourceRandomLogNormal","randomLogNormal","sourceRandomIrwinHall","randomIrwinHall","sourceRandomBates","irwinHall","randomBates","sourceRandomExponential","randomExponential","log1p","sourceRandomPareto","randomPareto","sourceRandomBernoulli","randomBernoulli","sourceRandomGeometric","randomGeometric","sourceRandomGamma","randomGamma","multiplier","sourceRandomBeta","G","randomBeta","sourceRandomBinomial","geometric","randomBinomial","acc","nn","pp","sourceRandomWeibull","randomWeibull","outerFunc","sourceRandomCauchy","randomCauchy","sourceRandomLogistic","randomLogistic","sourceRandomPoisson","binomial","randomPoisson","mul","eps","initRange","initInterpolator","implicit","ordinal","unknown","band","ordinalRange","rescale","rangeRound","pointish","bimap","polymap","untransform","clamper","continuous","precisionPrefix","precisionRound","precisionFixed","linearish","maxIter","transformLog","transformExp","transformLogn","transformExpn","pow10","reflect","loggish","logs","pows","log2","logp","powp","transformSymlog","transformSymexp","expm1","symlogish","symlog","transformPow","transformSqrt","transformSquare","powish","square","squared","unsquare","invertExtent","quantiles","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationYear","timeInterval","floori","offseti","field","millisecond","getMilliseconds","timeMinute","getSeconds","getMinutes","timeMinutes","utcMinute","setUTCSeconds","utcMinutes","timeHour","timeHours","utcHour","setUTCMinutes","utcHours","timeDay","getTimezoneOffset","timeDays","utcDay","setUTCHours","setUTCDate","utcDays","unixDay","unixDays","timeWeekday","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","timeMonths","utcMonth","setUTCMonth","utcMonths","timeYear","setFullYear","timeYears","utcYear","setUTCFullYear","utcYears","ticker","hour","minute","tickIntervals","tickInterval","utcTicks","utcTickInterval","timeTicks","timeTickInterval","H","L","utcDate","UTC","formatLocale","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","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatFullYear","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","newParse","Z","U","utcFormat","utcParse","timeFormat","timeParse","numberRe","percentRe","requoteRe","requote","dISO","UTCdISO","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","formatYear","utcTime","k10","sequential","sequentialLog","sequentialSymlog","sequentialPow","sequentialSqrt","sequentialQuantile","k21","diverging","divergingLog","divergingSymlog","divergingPow","divergingSqrt","scheme","ramp","warm","cool","pi_1_3","pi_2_3","magma","inferno","plasma","nextId","Local","withPath","arcInnerRadius","arcOuterRadius","arcStartAngle","arcEndAngle","arcPadAngle","cornerTangents","rc","x11","y11","x10","y10","cx0","cx1","dx0","dy0","dx1","dy1","padRadius","a01","a11","a10","da0","da1","rp","rc0","rc1","x32","y32","kc","lc","Linear","defined0","x0z","y0z","areaStart","areaEnd","arealine","lineX0","lineY0","lineY1","lineX1","sortValues","pie","arcs","pa","curveRadialLinear","curveRadial","Radial","_curve","radial","lineRadial","lineStartAngle","lineEndAngle","lineInnerRadius","lineOuterRadius","Bump","BumpRadial","pointRadial","p2","p3","bumpX","bumpY","bumpRadial","linkSource","linkTarget","linkHorizontal","linkVertical","linkRadial","sqrt3","draw","tan30","tan30_2","kr","symbolsFill","diamond","star","triangle","wye","symbolsStroke","plus","triangle2","asterisk","square2","diamond2","Basis","BasisClosed","BasisOpen","Bundle","_basis","_beta","_x2","_x3","_x4","_y2","_y3","_y4","bundle","_k","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","CardinalOpen","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","_alpha","x23","y23","catmullRom","CatmullRomClosed","CatmullRomOpen","LinearClosed","slope3","slope2","MonotoneX","MonotoneY","ReflectContext","monotoneX","monotoneY","Natural","controlPoints","Step","_t","stepBefore","stepAfter","series","stackValue","stackSeries","oz","sz","yn","s2","si","sij0","s3","peaks","peak","vi","vj","appearance","tops","bottoms","_t0","isoSpecifier","formatIso","toISOString","parseIso","_restart","ZoomEvent","Transform","applyX","applyY","invertX","invertY","rescaleX","rescaleY","__zoom","SVGElement","defaultTransform","defaultWheelDelta","defaultConstrain","translateExtent","touchstarting","touchfirst","constrain","scaleExtent","touchDelay","wheelDelay","tapDistance","wheeled","dblclicked","__zooming","Gesture","taps","wheel","touch0","touch1","l0","l1","dp","dl","scaleBy","scaleTo","translateBy","translateTo","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","__esModule","globalThis","nmd","paths","uncheck","modalActive","isShown","wiggle","VERSION","ArrayProto","ObjProto","SymbolProto","supportsArrayBuffer","supportsDataView","nativeIsArray","nativeKeys","nativeCreate","nativeIsView","_isNaN","_isFinite","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","MAX_ARRAY_INDEX","restArguments","rest","isObject","isNull","isUndefined","isBoolean","isElement","tagTester","nodelist","Int8Array","hasDataViewBug","isIE11","isDataView","getInt8","isArrayBuffer","isArguments","isSymbol","isNumber","createSizePropertyCheck","getSizeProperty","shallowProperty","typedArrayPattern","collectNonEnumProps","emulatedSet","nonEnumIdx","isEmpty","isString","isMatch","_keys","_wrapped","toBufferView","bufferSource","Uint8Array","byteOffset","toJSON","tagDataView","aStack","bStack","deepEq","areArrays","aCtor","bCtor","isEqual","allKeys","ie11fingerprint","weakMapMethods","forEachName","commonInit","mapTail","mapMethods","setMethods","functions","createAssigner","keysFunc","defaults","baseCreate","extendOwn","tap","interceptor","toPath","deepGet","optimizeCb","argCount","accumulator","baseIteratee","iteratee","mapObject","propertyOf","accum","createEscaper","escaper","testRegexp","replaceRegexp","templateSettings","evaluate","noMatch","escapes","escapeRegExp","escapeChar","bareIdentifier","template","oldSettings","variable","idCounter","chain","_chain","executeBound","sourceFunc","boundFunc","callingContext","partial","boundArgs","bound","callArgs","strict","memoize","hasher","address","throttle","later","leading","throttled","_now","trailing","debounce","immediate","passed","debounced","_args","predicate","findKey","createPredicateIndexFinder","sortedIndex","createIndexFinder","predicateFind","findIndex","findLastIndex","findWhere","createReduce","fromIndex","guard","contextPath","pluck","where","lastComputed","reStrSymbol","rand","shuffle","sortBy","criteria","behavior","pass","keyInObj","pick","compact","Boolean","otherArrays","uniq","isSorted","seen","argsLength","unzip","chunk","chainResult","mixin","downloadFASTA","sequence_ids","database_ids","addField","asMailtoHref","querydb","program","numQueries","isOpenAccess","dbsArr","db","formatDatabases","mailto","upperProgram","accessStatement","composeEmail","encodeURI","encodeEmail","queryLength","copied","setCopied","_jsxs","_jsx","clipboard","writeText","_regeneratorRuntime","asyncIterator","Generator","makeInvokeMethod","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","_invoke","AsyncIterator","invoke","__await","callInvokeWithMethodAndArg","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","isGeneratorFunction","mark","setPrototypeOf","__proto__","awrap","rval","delegateYield","asyncGeneratorStep","_defineProperties","_toPropertyKey","_callSuper","_getPrototypeOf","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","_isNativeReflectConstruct","_setPrototypeOf","_defineProperty","toPrimitive","_toPrimitive","CloudShareModal","_React$Component","_classCallCheck","_e$target","inputValue","_callee","jobId","requestData","getJobIdFromPath","formState","job_id","sender_email","shareable_url","shareableurl","errorMessages","_throw","pathname","_this$modalRef$curren","modalRef","showModal","_this$modalRef$curren2","agreeToTos","isModalVisible","_inherits","ShareURLComponent","_Fragment","errorMessage","renderForm","_this$state","isSubmitDisabled","onSubmit","handleSubmit","htmlFor","handleChange","_this$state2","renderLoading","renderResults","renderError","DownloadLinks","downloadFastaOfAll","downloadFastaOfSelected","topPanelJSX","summaryString","indexJSX","downloadsPanelJSX","handleQueryIndexChange","isElementInViewPort","setVisibleQueryIndex","debounceScrolling","scrollListener","copyURL","shareCloudInit","sharingPanelJSX","cloudShareModal","queryElems","queryIndex","urlMatch","queryNumber","query","animateAnchorElements","allQueriesLoaded","hits","topmostEl","history","pushState","JEST_WORKER_ID","_elem$getBoundingClie","sessionStorage","nextQuery","anchorEl","execCommand","rootURL","queryIndexButtons","clearSession","shouldShowIndex","numqueries","numquerydb","_this2","buttonStyle","NavButton","imported_xml","non_parse_seqids","atLeastOneHit","search_id","cloudSharingEnabled","download_url","filename","generate_blob_url","URL","createObjectURL","download_blob","msSaveOrOpenBlob","sanitize_filename","san","AlignmentExporter","prepare_alignments_for_export","export_alignments","hsps","fasta","query_id","qstart","qend","qseq","hit_id","sstart","midline","sseq","filename_prefix","generate_fasta","Blob","Exporter","_this$get_alignments_","get_alignments_download_metadata","_this$get_alignments_2","serialize_svg","get_styles","XMLSerializer","serializeToString","styleSheets","process_ss","ss","cssRules","CSSRule","IMPORT_RULE","styleSheet","selectorText","handle_click","export_callback","$svg","$body","canvas","getContext","drawImage","toDataURL","svgString","encodedSvg","btoa","alert","CollapsePreferences","collapsePreferences","localStorage","getItem","currentlyCollapsed","collapsed","setItem","uniqueCollapsePreferences","_toConsumableArray","plusIcon","minusIcon","Grapher","Graph","alwaysShowName","printing","useDetectPrint","setWidth","_useState4","setCollapsed","svgContainerRef","graphLinksJSX","svgContainer","graphWidth","handleResize","isCollapsed","preferenceStoredAsCollapsed","canCollapse","printCss","cssClasses","toggleCollapse","renderCollapseIcon","graphId","svgContainerJSX","_clipped","_unclipped","limit","classToType","keyOrder","TWOPI","PITHIRD","DEG2RAD","RAD2DEG","autodetect","me","sorted","chk","_rgb","clip_rgb","cmyk","unpack","rnd","minRgb","maxRgb","h_","RE_RGB","RE_RGBA","RE_RGB_PCT","RE_RGBA_PCT","RE_HSL","RE_HSLA","css2rgb","gl","hcg","_g","_c","RE_HEX","RE_HEXA","hxa","hsi","min_","hsv","max_","rgb2hsv","xyz_rgb","lab_xyz","b_","rgb_xyz","xyz_lab","rgb2xyz","laserlemon","lightgoldenrod","maroon2","maroon3","purple2","purple3","kelvin","temperature","minTemp","maxTemp","lr","lg","lb","oklab","oklch","mutate","clipped","darken","brighten","mc","luminance","lum","cur_lum","max_iter","lm","rgb2luminance","luminance_x","col1","col2","mix","premultiply","saturate","desaturate","tint","shade","xyz0","xyz1","lrgb","z1","z2","hue0","hue1","sat0","sat1","lbv0","lbv1","sat","lbv","_mode","_nacol","_spread","_domain","_padding","_colors","_min","_max","_correctLightness","_colorCache","_useCache","_gamma","setColors","brewer","resetCache","tMapLightness","tMapDomain","getColor","bypassMap","analyze","limits","tOut","tBreaks","_m","_o","spread","correctLightness","L0","L1","pol","L_actual","L_ideal","L_diff","numColors","dm","dd","__range__","asc","nodata","blend_f","multiply","screen","lighten","dodge","burn","MAX_VALUE","min_log","LOG10E","max_log","pb","assignments","clusterSizes","nb_iters","centroids","best","mindist","newCentroids","kClusters","tmpKMeansBreaks","hot","colorbrewer","OrRd","PuBu","BuPu","Oranges","BuGn","YlOrBr","YlGn","Reds","RdPu","Greens","YlGnBu","Purples","GnBu","Greys","YlOrRd","PuRd","Blues","PuBuGn","Viridis","Spectral","RdYlGn","RdBu","PiYG","PRGn","RdYlBu","BrBG","RdGy","PuOr","Set2","Accent","Set1","Set3","Dark2","Paired","Pastel2","Pastel1","average","weights","xyz","_average_lrgb","cnt","xyz2","bezier","lab0","lab1","lab2","lab3","labs","newrow","binom_row","rotations","fract","amp","cos_a","sin_a","contrast","deltaE","Kl","Kc","Kh","rad2deg","rad","deg2rad","deg","L2","avgL","avgC","a1p","a2p","C1p","C2p","avgCp","arctan1","arctan2","h1p","h2p","avgHp","deltaHp","deltaL","deltaCp","sl","sh","deltaTheta","Rt","sum_sq","scales","ReportPlugins","_callback","_query","Histogram","renderable","_objectSpread","renderContent","ReportHeader","seqserv_version","program_version","submitted_at","stats","nsequences","ncharacters","get_colors_for_evalue","evalue","toLetters","tick_formatter","seq_type","suffixes","amino_acid","nucleic_acid","get_seq_type","algorithm","blastn","query_seq_type","subject_seq_type","blastp","blastx","tblastx","tblastn","prettify_evalue","Utils","format_2_tuple","inPercentage","den","inFraction","inTwoDecimal","inExponential","$svgContainer","Helpers","query_arr","hit_arr","layout_arr","chords_arr","hsp_count","denominator","initiate","construct_layout","iterator_for_edits","handle_spacing","create_instance","instance_render","render_error","setupTooltip","max_length","calculate_max_length","complex_layout_edits","num_queries","num_karyotype","num_hits","new_layout","processQuery","item1","clean_id","ori_id","processHit","item2","processHSP","delete_from_layout","delete_from_chords","rel_length","delete_arr","found","check_id","sum_query_length","sum_hit_length","mid_sum","query_multiplier","hit_multiplier","Circos","chord_layout","instance_layout","paletteSize","layoutHide","chordsHide","slen","tlen","layoutReset","chordsReset","cleaned_id","chordsCheck","chordsClean","layoutClean","alt_tooltip","positives","gaps","ratioHSP","legend","ratioCalculate","atLeastTwoHits","hitNum","generateStats","svg_container","$queryDiv","extractData","graphIt","query_hits","_hsps","_hsp","hspEvalue","hspStart","hspEnd","hspFrame","sframe","hspId","hspIdentity","hspGaps","hspPositives","hspLength","hitId","hitDef","hitEvalue","$graphDiv","isInit","totalHits","shownHits","lessButton","moreButton","MIN_HITS_TO_SHOW","countHits","initButtons","setupButtons","svg_legend","howMany","inhits","barHeight","queryLen","q_i","formatter","_tValues","xAxis","gradScale","yHspline","hsplineColor","drawLegend","graphControls","setupClick","$svg_container","_seq_type","query_length","_margin","_width","_height","hit_lengths","define_scale_and_bins","update_data","draw_rectangles","draw_query_line","draw_axes","_scale_x","_bins","_scale_y","currentWidth","debounced_draw","data2","inner_data","len_index","_update_data","query_line","x_axis","y_axis","xContainer","ReportQuery","_createClass","showQueryCrumbs","HitsOverview","veryBig","LengthDistribution","HitsTable","domID","headerJSX","numhits","hitsListJSX","noHitsJSX","_Component3","hasName","sciname","seqwidth","qcovs","total_score","_this3","tableJSX","_zoom_scale_by","_padding_x","_padding_y","_canvas_height","_canvas_width","_results","_query_id","_subject_id","_query_length","_subject_length","_show_numbers","showHSPCrumbs","_maxBitScore","bit_score","svgContainer_d3","_svg","jq","_scales","_create_scales","use_complement_coords","_axis_ticks","_initiate","bindHoverHandler","$g","_render_graph","text_anchor","tvalues","_rotate_axis_labels","original_domain","new_domain","zoom_from","scale_by","_is_domain_within_orig","existing_scale","scaled_delta","_polygons","determine_colour","query_x_points","subject_x_points","qframe","rect1","rect2","_overlaps","_create_axis","_render_polygons","_render_axes","nearest","smallest_distance","scale_name","scale_height","query_range","subject_range","query_scale","subject_scale","query_height","matte_rgb","colour","norm","_rgba_to_rgb","HitButtons","accession","sequenceID","hitLength","numHSPs","databaseIDs","showSequenceViewer","viewSequenceLink","downloadAlignment","contentJSX","hitLinks","viewSequenceButton","downloadFASTAButton","hit_buttons","showSequenceModal","sequenceIDs","showHitCrumbs","HSPOverview","btns","downloadAlignmentButton","selectHit","btn","_this4","_this5","HSP","hspRef","setChars","charWidth","getCharacterWidth","containerWidth","qframe_unit","sframe_unit","qframe_sign","sframe_sign","formatCoords","coord","showHSPNumbers","hspStats","adjustedLineWidth","nqseq","getNqseq","nsseq","getNsseq","seq_start_index","seq_stop_index","lqstart","lqseq","lqend","lmseq","lsstart","lsseq","lsend","hspLines","Hits","numUpdates","nextHit","nextHSP","maxHSPs","pluginResults","prepareAlignmentOfSelectedHits","onPluginResultsFetched","updatedResults","replacePluginResults","_prevProps","componentFinishedUpdating","numHSPsProcessed","processQueries","lastTimeStamp","renderReportQuery","queryResult","processHits","iterateLoops","renderHit","processHSPS","renderHsp","Hit","num_checked","$hit","$a","$b","alignment_blob_url","revokeObjectURL","hsps_arr","aln_exporter","populate_hsp_array","blob_url","Report","user_warning","download_links","cloud_sharing_enabled","prepareAlignmentOfAllHits","setStateFromJSON","pollPeriodically","showErrorModal","errCallback","intervals","parsedJson","poll","errData","responseJSON","fetchResults","preventCollapseOnSelection","toggleTable","setupScrollSpy","Sidebar","RunSummary","GraphicalOverview","prorgam","AlignmentResults","hitID","sectionIds","containerBottom","scrollPosition","file_name","isUserWarningPresent","warningJSX","isResultAvailable","resultsJSX","loadingJSX","Class","EVT_ON_SELECTION_CHANGE","EVT_ON_SELECTION_CHANGED","Sequence","_container","_ready","_initialize","sequence","spacedEach","annotations","sequenceUrl","selectionColor","selectionFontColor","highlightFontColor","highlightBackgroundColor","fontColor","formatSelectorVisible","eventTypes","getId","_headerDiv","_contentDiv","_buildFormatSelector","_highlights","_annotations","_redraw","_requestSequence","clearSequence","setSequence","seq","_highlightsCount","sequenceNode","textStatus","errorThrown","showMessage","aux","_formatSelector","addHighlight","highlight","_applyHighlight","_restoreSelection","_applyHighlights","_restoreHighlights","removeHighlight","removeAllHighlights","setFormat","setNumCols","numCols","showFormatSelector","hideFormatSelector","_repaintSelection","_drawRaw","_drawCodata","_drawFasta","_drawPride","_addSpanEvents","pre","numColsForSpace","_drawSequence","_drawAnnotations","formatOptions","numLeft","numLeftSize","numLeftPad","numTop","numTopEach","spaceBetweenChars","footer","leftSpaces","annot","_formatIndex","_getHTMLRowAnnot","charRemaining","numRight","_addToolTip","_getAnnotationString","annotation","currentPos","defaultColor","regions","region","spaceAfter","numRightSize","numRightPad","indL","indT","indR","aaRemaining","browser","msie","fillingChar","alignLeft","filling","clickPos","isMouseDown","mouseup","cbGetMessageFunction","tipId","addAnnotation","removeAnnotation","removeAllAnnotations","onAll","oldMixin","breaker","nativeForEach","ran","eventsApi","ctx","retain","ev","allEvents","triggerEvents","stopListening","deleteListener","_listenerId","eventSplitter","listenTo","listenToOnce","BackboneEvents","GenericReader","read","_onRetrieval","Seq","Str","__hasProp","Fasta","__super__","__extends","currentSeq","database","databaseID","identifiers","seqs","splitNChars","txt","FastaExporter","req","parseHeaders","XHR","XDR","XDomainRequest","useXDR","sync","isJson","getStatusCode","getBody","errorFromStatusCode","onprogress","withCredentials","responseXML","called","forEachArray","forEachString","forEachObject","confirm","prompt","uaMatch","ua","platform_match","platform","versionNumber","android","ipad","iphone","mobile","cros","mac","linux","desktop","chrome","opr","safari","webkit","rv","opera","noParent","getOwnPropertyNames","desc","implements","classProto","implementedType","theClass","statics","findType","implType","implMeta","Checker","typeOf","typeInfo","an","writer","SequenceModal","requestCompleted","loadJSON","error_msgs","sequences","_loadJSON","error_msg","SequenceViewer","_React$Component2","widgetID","widgetClass","ErrorModal","errorData","more_info","Page","hspChars","sequenceModal","errorModal","characterWidth","$hspChars"],"sourceRoot":""}